diff --git a/README.md b/README.md index 8e55d566..b7288471 100644 --- a/README.md +++ b/README.md @@ -21,14 +21,11 @@ Dev: [![CircleCI](https://circleci.com/gh/topcoder-platform/challenge-api/tree/d ## Related repos - [Resources API](https://github.com/topcoder-platform/resources-api) -- [ES Processor](https://github.com/topcoder-platform/challenge-processor-es) - Updates data in ElasticSearch -- [Domain Challenge](https://github.com/topcoder-platform/domain-challenge) - Domain Challenge ## Prerequisites - [NodeJS](https://nodejs.org/en/) (v18+) - [AWS S3](https://aws.amazon.com/s3/) -- [Elasticsearch v6](https://www.elastic.co/) - [Docker](https://www.docker.com/) - [Docker Compose](https://docs.docker.com/compose/) @@ -50,19 +47,11 @@ The following parameters can be set in config files or in env variables: - AUTH0_CLIENT_SECRET: AUTH0 client secret, used to get M2M token - BUSAPI_URL: Bus API URL - KAFKA_ERROR_TOPIC: Kafka error topic used by bus API wrapper -- AMAZON.AWS_ACCESS_KEY_ID: The Amazon certificate key to use when connecting. Use local dynamodb you can set fake value -- AMAZON.AWS_SECRET_ACCESS_KEY: The Amazon certificate access key to use when connecting. Use local dynamodb you can set fake value -- AMAZON.AWS_REGION: The Amazon certificate region to use when connecting. Use local dynamodb you can set fake value -- AMAZON.IS_LOCAL_DB: Use Amazon DynamoDB Local or server. -- AMAZON.DYNAMODB_URL: The local url if using Amazon DynamoDB Local +- AMAZON.AWS_ACCESS_KEY_ID: The Amazon certificate key to use when connecting. +- AMAZON.AWS_SECRET_ACCESS_KEY: The Amazon certificate access key to use when connecting. +- AMAZON.AWS_REGION: The Amazon certificate region to use when connecting. - AMAZON.ATTACHMENT_S3_BUCKET: the AWS S3 bucket to store attachments -- ES: config object for Elasticsearch -- ES.HOST: Elasticsearch host -- ES.API_VERSION: Elasticsearch API version -- ES.ES_INDEX: Elasticsearch index name -- ES.ES_REFRESH: Elasticsearch refresh method. Default to string `true`(i.e. refresh immediately) - FILE_UPLOAD_SIZE_LIMIT: the file upload size limit in bytes -- OPENSEARCH: Flag to use Opensearch NPM instead of Elasticsearch - RESOURCES_API_URL: TC resources API base URL - GROUPS_API_URL: TC groups API base URL - PROJECTS_API_URL: TC projects API base URL @@ -78,18 +67,15 @@ You can find sample `.env` files inside the `/docs` directory. ## Available commands -1. Drop/delete tables: `npm run drop-tables` -2. Creating tables: `npm run create-tables` -3. Seed/Insert data to tables: `npm run seed-tables` -4. Initialize/Clear database in default environment: `npm run init-db` -5. View table data in default environment: `npm run view-data `, ModelName can be `Challenge`, `ChallengeType`, `AuditLog`, `Phase`, `TimelineTemplate`or `Attachment` -6. Create Elasticsearch index: `npm run init-es`, or to re-create index: `npm run init-es force` -7. Synchronize ES data and DynamoDB data: `npm run sync-es` -8. Start all the depending services for local deployment: `npm run services:up` -9. Stop all the depending services for local deployment: `npm run services:down` -10. Check the logs of all the depending services for local deployment: `npm run services:logs` -11. Initialize the local environments: `npm run local:init` -12. Reset the local environments: `npm run local:reset` +Make sure you have set environment variable `DATABASE_URL` before any database operations. + +1. Creating tables: `npm run create-tables` +2. Seed/Insert data to tables: `npm run seed-tables` +3. Start all the depending services for local deployment: `npm run services:up` +4. Stop all the depending services for local deployment: `npm run services:down` +5. Check the logs of all the depending services for local deployment: `npm run services:logs` +6. Initialize the local environments: `npm run local:init` +7. Reset the local environments: `npm run local:reset` ### Notes @@ -103,17 +89,7 @@ You can find sample `.env` files inside the `/docs` directory. nvm use ``` -1. 📦 Install npm dependencies - - ```bash - # export the production AWS credentials to access the topcoder-framework private repos in AWS codeartifact - aws codeartifact login --tool npm --repository topcoder-framework --domain topcoder --domain-owner 409275337247 --region us-east-1 --namespace @topcoder-framework - - # install dependencies - yarn install - ``` - -2. ⚙ Local config +1. ⚙ Local config In the `challenge-api` root directory create `.env` file with the next environment variables. Values for **Auth0 config** should be shared with you on the forum.
```bash @@ -123,47 +99,113 @@ You can find sample `.env` files inside the `/docs` directory. AUTH0_AUDIENCE= AUTH0_CLIENT_ID= AUTH0_CLIENT_SECRET= - - # Locally deployed services (via docker-compose) - IS_LOCAL_DB=true - DYNAMODB_URL=http://localhost:8000 ``` - Values from this file would be automatically used by many `npm` commands. - ⚠️ Never commit this file or its copy to the repository! -3. 🚢 Start docker-compose with services which are required to start Topcoder Challenges API locally + Please make sure database url is configured before everything. + ```bash + DATABASE_URL= + ``` + + After that you can run `npm install` to install dependencies. And then prisma will setup clients automatically. + +2. 🚢 Start docker-compose with services which are required to start Topcoder Challenges API locally ```bash npm run services:up ``` + This command will start postgres with docker-compose. + + If you are running services with docker, you can run: + ```bash + docker run -d --name challengedb -p 5432:5432 \ + -e POSTGRES_USER=johndoe -e POSTGRES_DB=challengedb \ + -e POSTGRES_PASSWORD=mypassword \ + postgres:16.8 + ``` + + The command to set `DATABASE_URL` environment variable will be like + ```bash + export DATABASE_URL="postgresql://johndoe:mypassword@localhost:5432/challengedb?schema=public" + ``` + Be sure to run it before running `npm install` -4. ♻ Update following two parts: -- https://github.com/topcoder-platform/challenge-api/blob/develop/src/models/Challenge.js#L116 - `throughput: 'ON_DEMAND',` should be updated to `throughput:{ read: 4, write: 2 },` -- https://github.com/topcoder-platform/challenge-api/blob/develop/config/default.js#L27-L28 +3. ♻ Running mock-api: -5. ♻ Create tables. + TopCoder Challenge API calls many other APIs like Terms API, Groups API, Projects API, Resources API. + Starting them all is a little complicated. Mock APIs are created in `mock-api`. + + You can run it with + ```bash + cd mock-api + npm start + ``` + It will start a mock service at port `4000` at default, and it works well with Challenge API. + + You might also need to update the API URLs in `config/default.js` Line 44~57 with environment variables. The commands are like: + ```bash + export RESOURCES_API_URL="http://localhost:4000/v5/resources" + export PROJECTS_API_URL="http://localhost:4000/v5/projects" + export TERMS_API_URL="http://localhost:4000/v5/terms" + export RESOURCE_ROLES_API_URL="http://localhost:4000/v5/resource-roles" + ``` + +4. ♻ Create tables and setup testdata + + To create database tables, you can run: ```bash npm run create-tables - # Use `npm run drop-tables` to drop tables. ``` -6. ♻ Init DB, ES + To create test data, you can run: + ```bash + npm run seed-tables + ``` + To reset db structure and create testdata, you can run: ```bash npm run local:init ``` - This command will do 3 things: +5. Comment Code for M2M Token and postBusEvent + + In local environment, you don't need to use M2M Token or bus API. + + You can just comment them to make it working. -- create Elasticsearch indexes (drop if exists) -- Initialize the database by cleaning all the records. -- Import the data to the local database and index it to ElasticSearch + For M2M token, you need to comment `src/common/m2m-helper.js#L18`, just return an empty string. + + The content will be like: + ```js + getM2MToken() { + // return M2MHelper.m2m.getMachineToken(config.AUTH0_CLIENT_ID, config.AUTH0_CLIENT_SECRET); + return ''; + } + ``` + + For postBusEvent, you need to comment codes in `src/common/helper.js#L684`. The content will be like: + ```js + async function postBusEvent(topic, payload, options = {}) { + // const client = getBusApiClient(); + const message = { + topic, + originator: constants.EVENT_ORIGINATOR, + timestamp: new Date().toISOString(), + "mime-type": constants.EVENT_MIME_TYPE, + payload, + }; + if (options.key) { + message.key = options.key; + } + // await client.postEvent(message); + } + ``` -7. 🚀 Start Topcoder Challenge API +6. 🚀 Start Topcoder Challenge API ```bash npm start @@ -195,8 +237,7 @@ The following test parameters can be set in config file or in env variables: ### Prepare - Start Local services in docker. -- Create DynamoDB tables. -- Initialize ES index. +- Create tables. - Various config parameters should be properly set. Seeding db data is not needed. diff --git a/Verification.md b/Verification.md index 7105194f..75f06b5a 100644 --- a/Verification.md +++ b/Verification.md @@ -9,17 +9,14 @@ - Check `Save Responses` - Start Run -## DynamoDB Verification -Run command `npm run view-data ` to view table data, ModelName can be `Challenge`, `ChallengeType`, `AuditLog`, `Phase`, `TimelineTemplate`, `Attachment` or `ChallengeTimelineTemplate` +## PostgreSQL Verification + +You can use any Postgresql client to view data in database. ## S3 Verification Login to AWS Console, S3 service, view the bucket content. -## ElasticSearch Verification - -Run command `npm run view-es-data` to view data store in ES. - ## Bus Event Verification - login `https://lauscher.topcoder-dev.com/` with credential `tonyj / appirio123` diff --git a/app-constants.js b/app-constants.js index 718e2e9c..2a084fb4 100644 --- a/app-constants.js +++ b/app-constants.js @@ -139,6 +139,27 @@ const SelfServiceNotificationSettings = { }, }; +const PhaseFact = { + PHASE_FACT_UNSPECIFIED: 0, + PHASE_FACT_REGISTRATION: 1, + PHASE_FACT_SUBMISSION: 2, + PHASE_FACT_REVIEW: 3, + PHASE_FACT_ITERATIVE_REVIEW: 4, + PHASE_FACT_CHECKPOINT_SUBMISSION: 5, + PHASE_FACT_CHECKPOINT_SCREENING: 6, + PHASE_FACT_CHECKPOINT_REVIEW: 7, + PHASE_FACT_CHECKPOINT_ITERATIVE_REVIEW: 8, + PHASE_FACT_FINAL_FIX: 9, + PHASE_FACT_FINAL_REVIEW: 10, + PHASE_FACT_APPEALS: 11, + PHASE_FACT_APPEALS_RESPONSE: 12, + UNRECOGNIZED: -1 +} + +const auditFields = [ + 'createdAt', 'createdBy', 'updatedAt', 'updatedBy' +] + module.exports = { UserRoles, prizeSetTypes, @@ -154,4 +175,6 @@ module.exports = { reviewTypes, SelfServiceNotificationTypes, SelfServiceNotificationSettings, + PhaseFact, + auditFields, }; diff --git a/config/default.js b/config/default.js index 4727e58e..15cb364a 100644 --- a/config/default.js +++ b/config/default.js @@ -32,23 +32,10 @@ module.exports = { // AWS_ACCESS_KEY_ID: process.env.AWS_FAKE_ID || 'FAKE_ACCESS_KEY', // AWS_SECRET_ACCESS_KEY: process.env.AWS_FAKE_KEY || 'FAKE_SECRET_ACCESS_KEY', AWS_REGION: process.env.AWS_REGION || "ap-northeast-1", - IS_LOCAL_DB: process.env.IS_LOCAL_DB || true, - DYNAMODB_URL: process.env.DYNAMODB_URL || "http://localhost:7777", S3_API_VERSION: process.env.S3_API_VERSION || "2006-03-01", BUCKET_WHITELIST: process.env.BUCKET_WHITELIST || "topcoder_01, topcoder_02", }, - ES: { - // above AWS_REGION is used if we use AWS ES - HOST: process.env.ES_HOST || "localhost:9200", - API_VERSION: process.env.ES_API_VERSION || "6.8", - OPENSEARCH: process.env.OPENSEARCH || "false", - ES_INDEX: process.env.ES_INDEX || "challenge", - ES_TYPE: process.env.ES_TYPE || "_doc", - ES_REFRESH: process.env.ES_REFRESH || "true", - TEMP_REINDEXING: process.env.TEMP_REINDEXING || true, // if true, it won't delete the existing index when reindexing data - }, - // in bytes FILE_UPLOAD_SIZE_LIMIT: process.env.FILE_UPLOAD_SIZE_LIMIT ? Number(process.env.FILE_UPLOAD_SIZE_LIMIT) @@ -127,10 +114,6 @@ module.exports = { ZENDESK_CUSTOM_FIELD_TAG_ID: process.env.ZENDESK_CUSTOM_FIELD_TAG_ID, ZENDESK_DEFAULT_PRIORITY: process.env.ZENDESK_DEFAULT_PRIORITY || "high", INTERNAL_CACHE_TTL: process.env.INTERNAL_CACHE_TTL || 1800, - GRPC_CHALLENGE_SERVER_HOST: process.env.GRPC_DOMAIN_CHALLENGE_SERVER_HOST || "localhost", - GRPC_CHALLENGE_SERVER_PORT: process.env.GRPC_DOMAIN_CHALLENGE_SERVER_PORT || 8888, - GRPC_ACL_SERVER_HOST: process.env.GRPC_ACL_SERVER_HOST || "localhost", - GRPC_ACL_SERVER_PORT: process.env.GRPC_ACL_SERVER_PORT || 40020, SKIP_PROJECT_ID_BY_TIMLINE_TEMPLATE_ID: process.env.SKIP_PROJECT_ID_BY_TIMLINE_TEMPLATE_ID || "517e76b0-8824-4e72-9b48-a1ebde1793a8", diff --git a/config/test.js b/config/test.js index 09c8959e..c1b93ad5 100644 --- a/config/test.js +++ b/config/test.js @@ -16,5 +16,9 @@ module.exports = { AUTH0_CLIENT_ID: '8QovDh27SrDu1XSs68m21A1NBP8isvOt', AUTH0_CLIENT_SECRET: '3QVxxu20QnagdH-McWhVz0WfsQzA1F8taDdGDI4XphgpEYZPcMTF4lX3aeOIeCzh', AUTH0_URL: 'https://topcoder-dev.auth0.com/oauth/token', - AUTH0_AUDIENCE: 'https://m2m.topcoder-dev.com/' + AUTH0_AUDIENCE: 'https://m2m.topcoder-dev.com/', + // mock API to get M2M token + AUTH0_PROXY_SERVER_URL: 'http://localhost:4000/v5/auth0', + // mock API to post bus event + BUSAPI_URL: "http://localhost:4000/v5" } diff --git a/docs/dev.env b/docs/dev.env index 23cea869..af9e3971 100644 --- a/docs/dev.env +++ b/docs/dev.env @@ -2,3 +2,4 @@ AUTH0_CLIENT_ID=8QovDh27SrDu1XSs68m21A1NBP8isvOt AUTH0_CLIENT_SECRET=3QVxxu20QnagdH-McWhVz0WfsQzA1F8taDdGDI4XphgpEYZPcMTF4lX3aeOIeCzh AUTH0_URL=https://topcoder-dev.auth0.com/oauth/token AUTH0_AUDIENCE=https://m2m.topcoder-dev.com/ +DATABASE_URL="postgresql://johndoe:mypassword@localhost:5432/resourcedb?schema=public" diff --git a/docs/prod.env b/docs/prod.env index 7c022cd8..06eb6cb4 100644 --- a/docs/prod.env +++ b/docs/prod.env @@ -7,16 +7,11 @@ BUSAPI_URL= AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_REGION= -IS_LOCAL_DB=false -DYNAMODB_URL= ATTACHMENT_S3_BUCKET= S3_API_VERSION= -ES_HOST= -ES_API_VERSION= -ES_INDEX= -ES_REFRESH=true RESOURCES_API_URL= GROUPS_API_URL= PROJECTS_API_URL= COPILOT_RESOURCE_ROLE_IDS= M2M_AUDIT_HANDLE= +DATABASE_URL= diff --git a/local/docker-compose.yml b/local/docker-compose.yml index b5e97b5f..c031c41c 100644 --- a/local/docker-compose.yml +++ b/local/docker-compose.yml @@ -5,12 +5,14 @@ services: # ports: # - "8000:8000" # command: "-inMemory -port 8000" - esearch: - image: "docker.elastic.co/elasticsearch/elasticsearch:6.8.0" + postgres: + image: "postgres:16.8-alpine3.20" ports: - - "9200:9200" + - "5432:5432" environment: - - "discovery.type=single-node" + - "POSTGRES_USER=johndoe" + - "POSTGRES_DB=challengedb" + - "POSTGRES_PASSWORD=mypassword" # minio1: # image: minio/minio # ports: @@ -26,8 +28,5 @@ services: # dockerfile: mock-api/Dockerfile # volumes: # - ../mock-api:/challenge-api/mock-api - # environment: - # DYNAMODB_URL: http://dynamodb:7777 - # IS_LOCAL_DB: "true" # ports: # - "4000:4000" diff --git a/mock-api/app.js b/mock-api/app.js index ac97e1f4..08530a92 100755 --- a/mock-api/app.js +++ b/mock-api/app.js @@ -7,7 +7,7 @@ const cors = require('cors') const config = require('config') const winston = require('winston') const _ = require('lodash') -const helper = require('../src/common/helper') +const prisma = require('../src/common/prisma').getClient() const app = express() app.set('port', config.PORT) @@ -33,6 +33,24 @@ const groups = { } } +// create resources +app.post('/v5/resources', (req, res) => { + // let's directly return 200 now. + winston.debug(`creating challenge resources`) + res.json({}) +}) + +// get resource roles. Return roles with full write access +app.get('/v5/resource-roles', (req, res) => { + res.json([{ + id: '10ba038e-48da-487b-96e8-8d3b99b6d18a', + fullWriteAccess: true + }, { + id: '10ba038e-48da-487b-96e8-8d3b99b6d18a', + fullWriteAccess: true + }]) +}) + // get challenge resources app.get('/v5/resources', (req, res) => { winston.debug(`query: ${JSON.stringify(req.query, null, 2)}`) @@ -43,6 +61,8 @@ app.get('/v5/resources', (req, res) => { const challengeId = req.query.challengeId winston.info(`Get resources of challenge id ${challengeId}`) + const memberId = req.query.memberId + const resources = [{ id: '22ba038e-48da-487b-96e8-8d3b99b6d181', challengeId, @@ -55,17 +75,32 @@ app.get('/v5/resources', (req, res) => { memberId: '151743', memberHandle: 'Ghostar', // copilot roleId: '10ba038e-48da-487b-96e8-8d3b99b6d18b' + }, { + // submitter & winner + id: '22ba038e-48da-487b-96e8-8d3b99b6d183', + challengeId, + memberId: '12345678', + memberHandle: 'thomaskranitsas', + roleId: '732339e7-8e30-49d7-9198-cccf9451e221' }] + let ret + if (memberId) { + // filter with memberId + ret = _.filter(resources, r => r.memberId === memberId) + } else { + ret = resources + } + winston.info(`Challenge resources: ${JSON.stringify(resources, null, 4)}`) - res.json(resources) + res.json(ret) }) // get challenges member can access to app.get('/v5/resources/:memberId/challenges', (req, res) => { const memberId = req.params.memberId if (memberId === '40309246' || memberId === '151743') { - helper.scan('Challenge') + prisma.challenge.findMany() .then(result => { const ret = [] for (const element of result) { @@ -88,12 +123,21 @@ app.get('/v5/resources/:memberId/challenges', (req, res) => { } }) +let projectIdSeed = 3456; +// create project +app.post('/v5/projects', (req, res) => { + // directly return result with id + projectIdSeed += 1 + res.json({ id: projectIdSeed }) +}) + // get project by id app.get('/v5/projects/:projectId', (req, res) => { const projectId = req.params.projectId - if (projectId === '111' || projectId === '123' || projectId === '112233') { + if (projectId === '111' || projectId === '123' || projectId === '112233' || projectId === '16531') { res.json({ projectId, + directProjectId: parseInt(projectId) + 1, terms: ['0fcb41d1-ec7c-44bb-8f3b-f017a61cd708', 'be0652ae-8b28-4e91-9b42-8ad00b31e9cb'] }) } else if (projectId === '200') { @@ -110,6 +154,15 @@ app.get('/v5/projects/:projectId', (req, res) => { } }) +// get project billing info +app.get('/v5/projects/:projectId/billingAccount', (req, res) => { + // let's return same billing info for now + res.json({ + markup: 1, + tcBillingAccountId: 'test-billing-account' + }) +}) + // search groups app.get('/v5/groups', (req, res) => { const page = Number(req.query.page || 1) @@ -219,6 +272,18 @@ app.get('/v5/terms/:termId', (req, res) => { } }) +// Event Bus API +app.post('/v5/bus/events', (req, res) => { + winston.info('Received bus events') + res.status(200).json({}) +}) + +app.post('/v5/auth0', (req, res) => { + winston.info('Received Auth0 request') + // return config/test.js#M2M_FULL_ACCESS_TOKEN + res.status(200).json({ access_token: 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL3RvcGNvZGVyLWRldi5hdXRoMC5jb20vIiwic3ViIjoiZW5qdzE4MTBlRHozWFR3U08yUm4yWTljUVRyc3BuM0JAY2xpZW50cyIsImF1ZCI6Imh0dHBzOi8vbTJtLnRvcGNvZGVyLWRldi5jb20vIiwiaWF0IjoxNTUwOTA2Mzg4LCJleHAiOjE4ODA5OTI3ODgsImF6cCI6ImVuancxODEwZUR6M1hUd1NPMlJuMlk5Y1FUcnNwbjNCIiwiaXNNYWNoaW5lIjp0cnVlLCJzY29wZSI6ImFsbDpjaGFsbGVuZ2VzIGFsbDpjaGFsbGVuZ2VfdHlwZXMgYWxsOmNoYWxsZW5nZV9zZXR0aW5ncyByZWFkOmNoYWxsZW5nZV9hdWRpdF9sb2dzIGFsbDpjaGFsbGVuZ2VfcGhhc2VzIGFsbDp0aW1lbGluZV90ZW1wbGF0ZXMgYWxsOmNoYWxsZW5nZV9hdHRhY2htZW50cyBhbGw6Y2hhbGxlbmdlX3R5cGVfdGltZWxpbmVfdGVtcGxhdGVzIiwiZ3R5IjoiY2xpZW50LWNyZWRlbnRpYWxzIn0.On-x52qiJJyaLfljBUOYCU1bHWTy9I4CLIIJVyFS-l4' }) +}) + app.use((req, res) => { res.status(404).json({ error: 'route not found' }) }) diff --git a/mock-api/config/default.js b/mock-api/config/default.js index 509243c6..addec325 100755 --- a/mock-api/config/default.js +++ b/mock-api/config/default.js @@ -8,12 +8,6 @@ module.exports = { AMAZON: { AWS_ACCESS_KEY_ID: process.env.AWS_ACCESS_KEY_ID || 'FAKE_ACCESS_KEY', AWS_SECRET_ACCESS_KEY: process.env.AWS_SECRET_ACCESS_KEY || 'FAKE_SECRET_ACCESS_KEY', - AWS_REGION: process.env.AWS_REGION || 'ap-northeast-1', - IS_LOCAL_DB: process.env.IS_LOCAL_DB ? process.env.IS_LOCAL_DB === 'true' : true, - DYNAMODB_URL: process.env.DYNAMODB_URL || 'http://localhost:7777' - }, - - ES: { - ES_REFRESH: process.env.ES_REFRESH || 'true' + AWS_REGION: process.env.AWS_REGION || 'ap-northeast-1' }, }; diff --git a/mock-api/package-lock.json b/mock-api/package-lock.json index c733aa8a..723aaff0 100755 --- a/mock-api/package-lock.json +++ b/mock-api/package-lock.json @@ -1,33 +1,47 @@ { "name": "mock-tc-api", "version": "1.0.0", - "lockfileVersion": 1, + "lockfileVersion": 3, "requires": true, - "dependencies": { - "accepts": { + "packages": { + "": { + "name": "mock-tc-api", + "version": "1.0.0", + "license": "none", + "dependencies": { + "config": "^1.21.0", + "cors": "^2.7.1", + "express": "^4.14.0", + "winston": "^2.2.0" + } + }, + "node_modules/accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "requires": { + "dependencies": { "mime-types": "~2.1.24", "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" } }, - "array-flatten": { + "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, - "async": { + "node_modules/async": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=" }, - "body-parser": { + "node_modules/body-parser": { "version": "1.18.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", - "requires": { + "dependencies": { "bytes": "3.0.0", "content-type": "~1.0.4", "debug": "2.6.9", @@ -38,103 +52,139 @@ "qs": "6.5.2", "raw-body": "2.3.3", "type-is": "~1.6.16" + }, + "engines": { + "node": ">= 0.8" } }, - "bytes": { + "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "engines": { + "node": ">= 0.8" + } }, - "colors": { + "node_modules/colors": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", + "engines": { + "node": ">=0.1.90" + } }, - "config": { + "node_modules/config": { "version": "1.31.0", "resolved": "https://registry.npmjs.org/config/-/config-1.31.0.tgz", "integrity": "sha512-Ep/l9Rd1J9IPueztJfpbOqVzuKHQh4ZODMNt9xqTYdBBNRXbV4oTu34kCkkfdRVcDq0ohtpaeXGgb+c0LQxFRA==", - "requires": { + "dependencies": { "json5": "^1.0.1" + }, + "engines": { + "node": ">= 4.0.0" } }, - "content-disposition": { + "node_modules/content-disposition": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "engines": { + "node": ">= 0.6" + } }, - "content-type": { + "node_modules/content-type": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } }, - "cookie": { + "node_modules/cookie": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "engines": { + "node": ">= 0.6" + } }, - "cookie-signature": { + "node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, - "cors": { + "node_modules/cors": { "version": "2.8.5", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "requires": { + "dependencies": { "object-assign": "^4", "vary": "^1" + }, + "engines": { + "node": ">= 0.10" } }, - "cycle": { + "node_modules/cycle": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", - "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=" + "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=", + "engines": { + "node": ">=0.4.0" + } }, - "debug": { + "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { + "dependencies": { "ms": "2.0.0" } }, - "depd": { + "node_modules/depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "engines": { + "node": ">= 0.6" + } }, - "destroy": { + "node_modules/destroy": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, - "ee-first": { + "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, - "encodeurl": { + "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "engines": { + "node": ">= 0.8" + } }, - "escape-html": { + "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" }, - "etag": { + "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "engines": { + "node": ">= 0.6" + } }, - "express": { + "node_modules/express": { "version": "4.16.4", "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", - "requires": { + "dependencies": { "accepts": "~1.3.5", "array-flatten": "1.1.1", "body-parser": "1.18.3", @@ -165,18 +215,24 @@ "type-is": "~1.6.16", "utils-merge": "1.0.1", "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" } }, - "eyes": { + "node_modules/eyes": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=" + "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=", + "engines": { + "node": "> 0.1.90" + } }, - "finalhandler": { + "node_modules/finalhandler": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "requires": { + "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", @@ -184,176 +240,236 @@ "parseurl": "~1.3.2", "statuses": "~1.4.0", "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "forwarded": { + "node_modules/forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "engines": { + "node": ">= 0.6" + } }, - "fresh": { + "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "engines": { + "node": ">= 0.6" + } }, - "http-errors": { + "node_modules/http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { + "dependencies": { "depd": "~1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.0", "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" } }, - "iconv-lite": { + "node_modules/iconv-lite": { "version": "0.4.23", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "requires": { + "dependencies": { "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" } }, - "inherits": { + "node_modules/inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, - "ipaddr.js": { + "node_modules/ipaddr.js": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", - "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" + "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==", + "engines": { + "node": ">= 0.10" + } }, - "isstream": { + "node_modules/isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, - "json5": { + "node_modules/json5": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { + "dependencies": { "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" } }, - "media-typer": { + "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "engines": { + "node": ">= 0.6" + } }, - "merge-descriptors": { + "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, - "methods": { + "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "engines": { + "node": ">= 0.6" + } }, - "mime": { + "node_modules/mime": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "bin": { + "mime": "cli.js" + } }, - "mime-db": { + "node_modules/mime-db": { "version": "1.40.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", + "engines": { + "node": ">= 0.6" + } }, - "mime-types": { + "node_modules/mime-types": { "version": "2.1.24", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", - "requires": { + "dependencies": { "mime-db": "1.40.0" + }, + "engines": { + "node": ">= 0.6" } }, - "minimist": { + "node_modules/minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, - "ms": { + "node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "negotiator": { + "node_modules/negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "engines": { + "node": ">= 0.6" + } }, - "object-assign": { + "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } }, - "on-finished": { + "node_modules/on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { + "dependencies": { "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" } }, - "parseurl": { + "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } }, - "path-to-regexp": { + "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, - "proxy-addr": { + "node_modules/proxy-addr": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", - "requires": { + "dependencies": { "forwarded": "~0.1.2", "ipaddr.js": "1.9.0" + }, + "engines": { + "node": ">= 0.10" } }, - "qs": { + "node_modules/qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "engines": { + "node": ">=0.6" + } }, - "range-parser": { + "node_modules/range-parser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "engines": { + "node": ">= 0.6" + } }, - "raw-body": { + "node_modules/raw-body": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "requires": { + "dependencies": { "bytes": "3.0.0", "http-errors": "1.6.3", "iconv-lite": "0.4.23", "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "safe-buffer": { + "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==" }, - "safer-buffer": { + "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "send": { + "node_modules/send": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "requires": { + "dependencies": { "debug": "2.6.9", "depd": "~1.1.2", "destroy": "~1.0.4", @@ -367,69 +483,96 @@ "on-finished": "~2.3.0", "range-parser": "~1.2.0", "statuses": "~1.4.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "serve-static": { + "node_modules/serve-static": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "requires": { + "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.2", "send": "0.16.2" + }, + "engines": { + "node": ">= 0.8.0" } }, - "setprototypeof": { + "node_modules/setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, - "stack-trace": { + "node_modules/stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "engines": { + "node": "*" + } }, - "statuses": { + "node_modules/statuses": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "engines": { + "node": ">= 0.6" + } }, - "type-is": { + "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { + "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" } }, - "unpipe": { + "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "engines": { + "node": ">= 0.8" + } }, - "utils-merge": { + "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "engines": { + "node": ">= 0.4.0" + } }, - "vary": { + "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "engines": { + "node": ">= 0.8" + } }, - "winston": { + "node_modules/winston": { "version": "2.4.4", "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.4.tgz", "integrity": "sha512-NBo2Pepn4hK4V01UfcWcDlmiVTs7VTB1h7bgnB0rgP146bYhMxX0ypCz3lBOfNxCO4Zuek7yeT+y/zM1OfMw4Q==", - "requires": { + "dependencies": { "async": "~1.0.0", "colors": "1.0.x", "cycle": "1.0.x", "eyes": "0.1.x", "isstream": "0.1.x", "stack-trace": "0.0.x" + }, + "engines": { + "node": ">= 0.10.0" } } } diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..49cb702b --- /dev/null +++ b/package-lock.json @@ -0,0 +1,11571 @@ +{ + "name": "topcoder-challenges-api", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "topcoder-challenges-api", + "version": "1.0.0", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@prisma/client": "^6.4.1", + "aws-sdk": "^2.1145.0", + "axios": "^1.8.2", + "axios-retry": "^3.4.0", + "bluebird": "^3.5.1", + "body-parser": "^1.15.1", + "compare-versions": "^6.1.0", + "config": "^3.0.1", + "cors": "^2.8.5", + "decimal.js": "^10.4.3", + "deep-equal": "^2.2.0", + "dompurify": "^3.0.2", + "dotenv": "^8.2.0", + "elasticsearch": "^16.7.3", + "express": "^4.15.4", + "express-fileupload": "^1.1.6", + "express-interceptor": "^1.2.0", + "get-parameter-names": "^0.3.0", + "http-status-codes": "^1.3.0", + "joi": "^14.0.0", + "jsdom": "^21.1.2", + "json-rules-engine": "^7.3.1", + "jsonwebtoken": "^9.0.2", + "lodash": "^4.17.19", + "markdown-it": "^13.0.1", + "moment": "^2.24.0", + "node-cache": "^5.1.2", + "swagger-ui-express": "^4.1.3", + "topcoder-bus-api-wrapper": "topcoder-platform/tc-bus-api-wrapper.git", + "uuid": "^3.3.2", + "winston": "^3.8.2", + "xss": "^1.0.8", + "yamljs": "^0.3.0" + }, + "devDependencies": { + "chai": "^4.2.0", + "chai-http": "^4.2.1", + "mocha": "^11.1.0", + "mocha-prepare": "^0.1.0", + "nodemon": "^3.1.9", + "nyc": "^17.1.0", + "prettier": "^2.8.1", + "prisma": "^6.4.1", + "standard": "^17.1.0" + }, + "engines": { + "node": "18.x" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", + "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz", + "integrity": "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.9", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.9", + "@babel/parser": "^7.26.9", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.9", + "@babel/types": "^7.26.9", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/core/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/core/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.9.tgz", + "integrity": "sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.26.9", + "@babel/types": "^7.26.9", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", + "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.9.tgz", + "integrity": "sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz", + "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.9" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.9.tgz", + "integrity": "sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", + "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.26.9", + "@babel/types": "^7.26.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.9.tgz", + "integrity": "sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.9", + "@babel/parser": "^7.26.9", + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.9", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/traverse/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/types": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz", + "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "license": "MIT", + "dependencies": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.1.tgz", + "integrity": "sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.1.tgz", + "integrity": "sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.1.tgz", + "integrity": "sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.1.tgz", + "integrity": "sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.1.tgz", + "integrity": "sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.1.tgz", + "integrity": "sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.1.tgz", + "integrity": "sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.1.tgz", + "integrity": "sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.1.tgz", + "integrity": "sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.1.tgz", + "integrity": "sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.1.tgz", + "integrity": "sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.1.tgz", + "integrity": "sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.1.tgz", + "integrity": "sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.1.tgz", + "integrity": "sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.1.tgz", + "integrity": "sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.1.tgz", + "integrity": "sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.1.tgz", + "integrity": "sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.1.tgz", + "integrity": "sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.1.tgz", + "integrity": "sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.1.tgz", + "integrity": "sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.1.tgz", + "integrity": "sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.1.tgz", + "integrity": "sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.1.tgz", + "integrity": "sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.1.tgz", + "integrity": "sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.1.tgz", + "integrity": "sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "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, + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "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, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jsep-plugin/assignment": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@jsep-plugin/assignment/-/assignment-1.3.0.tgz", + "integrity": "sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ==", + "license": "MIT", + "engines": { + "node": ">= 10.16.0" + }, + "peerDependencies": { + "jsep": "^0.4.0||^1.0.0" + } + }, + "node_modules/@jsep-plugin/regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@jsep-plugin/regex/-/regex-1.0.4.tgz", + "integrity": "sha512-q7qL4Mgjs1vByCaTnDFcBnV9HS7GVPJX5vyVoCgZHNSC9rjwIlmbXG5sUuorR5ndfHAIlJ8pVStxvjXHbNvtUg==", + "license": "MIT", + "engines": { + "node": ">= 10.16.0" + }, + "peerDependencies": { + "jsep": "^0.4.0||^1.0.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@prisma/client": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-6.4.1.tgz", + "integrity": "sha512-A7Mwx44+GVZVexT5e2GF/WcKkEkNNKbgr059xpr5mn+oUm2ZW1svhe+0TRNBwCdzhfIZ+q23jEgsNPvKD9u+6g==", + "hasInstallScript": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "peerDependencies": { + "prisma": "*", + "typescript": ">=5.1.0" + }, + "peerDependenciesMeta": { + "prisma": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/@prisma/debug": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.4.1.tgz", + "integrity": "sha512-Q9xk6yjEGIThjSD8zZegxd5tBRNHYd13GOIG0nLsanbTXATiPXCLyvlYEfvbR2ft6dlRsziQXfQGxAgv7zcMUA==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@prisma/engines": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.4.1.tgz", + "integrity": "sha512-KldENzMHtKYwsOSLThghOIdXOBEsfDuGSrxAZjMnimBiDKd3AE4JQ+Kv+gBD/x77WoV9xIPf25GXMWffXZ17BA==", + "devOptional": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "6.4.1", + "@prisma/engines-version": "6.4.0-29.a9055b89e58b4b5bfb59600785423b1db3d0e75d", + "@prisma/fetch-engine": "6.4.1", + "@prisma/get-platform": "6.4.1" + } + }, + "node_modules/@prisma/engines-version": { + "version": "6.4.0-29.a9055b89e58b4b5bfb59600785423b1db3d0e75d", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.4.0-29.a9055b89e58b4b5bfb59600785423b1db3d0e75d.tgz", + "integrity": "sha512-Xq54qw55vaCGrGgIJqyDwOq0TtjZPJEWsbQAHugk99hpDf2jcEeQhUcF+yzEsSqegBaDNLA4IC8Nn34sXmkiTQ==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@prisma/fetch-engine": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.4.1.tgz", + "integrity": "sha512-uZ5hVeTmDspx7KcaRCNoXmcReOD+84nwlO2oFvQPRQh9xiFYnnUKDz7l9bLxp8t4+25CsaNlgrgilXKSQwrIGQ==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "6.4.1", + "@prisma/engines-version": "6.4.0-29.a9055b89e58b4b5bfb59600785423b1db3d0e75d", + "@prisma/get-platform": "6.4.1" + } + }, + "node_modules/@prisma/get-platform": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.4.1.tgz", + "integrity": "sha512-gXqZaDI5scDkBF8oza7fOD3Q3QMD0e0rBynlzDDZdTWbWmzjuW58PRZtj+jkvKje2+ZigCWkH8SsWZAsH6q1Yw==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "6.4.1" + } + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@scarf/scarf": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.4.0.tgz", + "integrity": "sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==", + "hasInstallScript": true, + "license": "Apache-2.0" + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/chai": { + "version": "4.3.20", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.20.tgz", + "integrity": "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cookiejar": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz", + "integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.0.tgz", + "integrity": "sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==", + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^5.0.0", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-jwt": { + "version": "0.0.42", + "resolved": "https://registry.npmjs.org/@types/express-jwt/-/express-jwt-0.0.42.tgz", + "integrity": "sha512-WszgUddvM1t5dPpJ3LhWNH8kfNN8GPIBrAGxgIYXVCEGx6Bx4A036aAuf/r5WH9DIEdlmp7gHOYvSM6U87B0ag==", + "license": "MIT", + "dependencies": { + "@types/express": "*", + "@types/express-unless": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz", + "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/express-unless": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@types/express-unless/-/express-unless-0.5.3.tgz", + "integrity": "sha512-TyPLQaF6w8UlWdv4gj8i46B+INBVzURBNRahCozCSXfsK2VTlL1wNyTlMKw817VHygBtlcl5jfnPadlydr06Yw==", + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.13.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.10.tgz", + "integrity": "sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@types/qs": { + "version": "6.9.18", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz", + "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==", + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/superagent": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.13.tgz", + "integrity": "sha512-YIGelp3ZyMiH0/A09PMAORO0EBGlF5xIKfDpK74wdYvWUs2o96b5CItJcWPdH409b7SAXIIG6p8NdU/4U2Maww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/cookiejar": "*", + "@types/node": "*" + } + }, + "node_modules/@types/triple-beam": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", + "license": "MIT" + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT", + "optional": true + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true, + "license": "ISC" + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", + "license": "BSD-3-Clause" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", + "license": "MIT", + "dependencies": { + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/agentkeepalive": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.3.tgz", + "integrity": "sha512-yqXL+k5rr8+ZRpOAntkaaRgWgE5o8ESAj5DyRmVTCSoZxXmqemb9Dd7T4i5UzwuERdLAJUy6XzR9zFVuf0kzkw==", + "license": "MIT", + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-require-extensions": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sdk": { + "version": "2.1692.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1692.0.tgz", + "integrity": "sha512-x511uiJ/57FIsbgUe5csJ13k3uzu25uWQE+XqfBis/sB0SFoiElJWXRkgEAUh0U6n40eT3ay5Ue4oPkRMu1LYw==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.16.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "util": "^0.12.4", + "uuid": "8.0.0", + "xml2js": "0.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/aws-sdk/node_modules/uuid": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", + "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.2.tgz", + "integrity": "sha512-ls4GYBm5aig9vWx8AWDSGLpnpDQRtWAfrjU+EuytuODrFBkqesN2RkOQCBzrA1RQNHw1SmRMSDDDSwzNAYQ6Rg==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios-retry": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/axios-retry/-/axios-retry-3.9.1.tgz", + "integrity": "sha512-8PJDLJv7qTTMMwdnbMvrLYuvB47M81wRtxQmEdV5w4rgbTXTt+vtPkXwajOfOdSyv/wZICJOC+/UhXH4aQ/R+w==", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.15.4", + "is-retry-allowed": "^2.2.0" + } + }, + "node_modules/babel-runtime": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.6.1.tgz", + "integrity": "sha512-5pdhO3jaxqh9L42oBfbrqy58swDhciM47sRGoODURdRxwfiqttEvK87LX27W/PYY6f4cJt2mEdyoLcr/+cM/iw==", + "license": "MIT", + "dependencies": { + "core-js": "^2.1.0" + } + }, + "node_modules/backoff": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz", + "integrity": "sha512-wC5ihrnUXmR2douXmXLCe5O3zg3GKIyvRi/hi58a/XyRxVI+3/yM0PYueQOZXPXQ9pxBislYkw+sF9b7C/RuMA==", + "license": "MIT", + "dependencies": { + "precond": "0.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true, + "license": "ISC" + }, + "node_modules/browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "license": "MIT", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" + }, + "node_modules/builtins": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", + "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/bunyan": { + "version": "1.8.15", + "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", + "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==", + "engines": [ + "node >=0.10.0" + ], + "license": "MIT", + "bin": { + "bunyan": "bin/bunyan" + }, + "optionalDependencies": { + "dtrace-provider": "~0.8", + "moment": "^2.19.3", + "mv": "~2", + "safe-json-stringify": "~1" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001703", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001703.tgz", + "integrity": "sha512-kRlAGTRWgPsOj7oARC9m1okJEXdL/8fekFVcxA8Hl7GH4r/sN4OJn/i6Flde373T50KS7Y37oFbMwlE8+F42kQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "license": "Apache-2.0" + }, + "node_modules/chai": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", + "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chai-http": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/chai-http/-/chai-http-4.4.0.tgz", + "integrity": "sha512-uswN3rZpawlRaa5NiDUHcDZ3v2dw5QgLyAwnQ2tnVNuP7CwIsOFuYJ0xR1WiR7ymD4roBnJIzOUep7w9jQMFJA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "4", + "@types/superagent": "4.1.13", + "charset": "^1.0.1", + "cookiejar": "^2.1.4", + "is-ip": "^2.0.0", + "methods": "^1.1.2", + "qs": "^6.11.2", + "superagent": "^8.0.9" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/charset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/charset/-/charset-1.0.1.tgz", + "integrity": "sha512-6dVyOOYjpfFcL1Y4qChrAoQLRHvj2ziyhcm0QJlhOcAhykL/k1kTUPbeo+87MNRTRdk2OIIsIXbuF3x2wi5EXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/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, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/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, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cliui/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/node_modules/string-width": { + "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, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/codependency": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/codependency/-/codependency-0.1.4.tgz", + "integrity": "sha512-26yAvd3+17xSfDADtnzpnL5GK+8+x4QeZ3DegekkHyno6LWeHqXuSU7q8w/IrAur7SY6ISPApOWtWTfuIF0Xpg==", + "license": "MIT", + "dependencies": { + "semver": "5.0.1" + } + }, + "node_modules/codependency/node_modules/semver": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.1.tgz", + "integrity": "sha512-Ne6/HdGZvvpXBdjW3o8J0pvxC2jnmVNBK7MKkMgsOBfrsIdTXfA5x+H9DUbQ2xzyvnLv0A0v9x8R4B40xNZIRQ==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/colorspace": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "license": "MIT", + "dependencies": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true, + "license": "MIT" + }, + "node_modules/compare-versions": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz", + "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==", + "license": "MIT" + }, + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/config": { + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/config/-/config-3.3.12.tgz", + "integrity": "sha512-Vmx389R/QVM3foxqBzXO8t2tUikYZP64Q6vQxGrsMpREeJc/aWRnPRERXWsYzOHAumx/AOoILWe6nU3ZJL+6Sw==", + "license": "MIT", + "dependencies": { + "json5": "^2.2.3" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "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, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "license": "MIT" + }, + "node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "hasInstallScript": true, + "license": "MIT" + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssfilter": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", + "integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==", + "license": "MIT" + }, + "node_modules/cssstyle": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz", + "integrity": "sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==", + "license": "MIT", + "dependencies": { + "rrweb-cssom": "^0.6.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-urls": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-4.0.0.tgz", + "integrity": "sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==", + "license": "MIT", + "dependencies": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^12.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz", + "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==", + "license": "MIT" + }, + "node_modules/deep-eql": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-equal": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-equal/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/default-require-extensions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", + "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "strip-bom": "^4.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "license": "ISC", + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "deprecated": "Use your platform's native DOMException instead", + "license": "MIT", + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dompurify": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.4.tgz", + "integrity": "sha512-ysFSFEDVduQpyhzAob/kkuJjf5zWkZD8/A9ywSp1byueyuCfHamrCBa14/Oc2iiB0e51B+NpxSl5gmzn+Ms/mg==", + "license": "(MPL-2.0 OR Apache-2.0)", + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } + }, + "node_modules/dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, + "node_modules/dtrace-provider": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", + "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", + "hasInstallScript": true, + "license": "BSD-2-Clause", + "optional": true, + "dependencies": { + "nan": "^2.14.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/elasticsearch": { + "version": "16.7.3", + "resolved": "https://registry.npmjs.org/elasticsearch/-/elasticsearch-16.7.3.tgz", + "integrity": "sha512-e9kUNhwnIlu47fGAr4W6yZJbkpsgQJB0TqNK8rCANe1J4P65B1sGnbCFTgcKY3/dRgCWnuP1AJ4obvzW604xEQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "license": "Apache-2.0", + "dependencies": { + "agentkeepalive": "^3.4.1", + "chalk": "^1.0.0", + "lodash": "^4.17.10" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.114", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.114.tgz", + "integrity": "sha512-DFptFef3iktoKlFQK/afbo274/XNWD00Am0xa7M8FZUepHlHT8PEuiNBoRfFHbH1okqN58AlhbJ4QTkcnXorjA==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "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, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.23.9", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", + "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.0", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-regex": "^1.2.1", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.0", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.18" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-get-iterator/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" + }, + "node_modules/es-iterator-helpers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.6", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.1.tgz", + "integrity": "sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==", + "devOptional": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.1", + "@esbuild/android-arm": "0.25.1", + "@esbuild/android-arm64": "0.25.1", + "@esbuild/android-x64": "0.25.1", + "@esbuild/darwin-arm64": "0.25.1", + "@esbuild/darwin-x64": "0.25.1", + "@esbuild/freebsd-arm64": "0.25.1", + "@esbuild/freebsd-x64": "0.25.1", + "@esbuild/linux-arm": "0.25.1", + "@esbuild/linux-arm64": "0.25.1", + "@esbuild/linux-ia32": "0.25.1", + "@esbuild/linux-loong64": "0.25.1", + "@esbuild/linux-mips64el": "0.25.1", + "@esbuild/linux-ppc64": "0.25.1", + "@esbuild/linux-riscv64": "0.25.1", + "@esbuild/linux-s390x": "0.25.1", + "@esbuild/linux-x64": "0.25.1", + "@esbuild/netbsd-arm64": "0.25.1", + "@esbuild/netbsd-x64": "0.25.1", + "@esbuild/openbsd-arm64": "0.25.1", + "@esbuild/openbsd-x64": "0.25.1", + "@esbuild/sunos-x64": "0.25.1", + "@esbuild/win32-arm64": "0.25.1", + "@esbuild/win32-ia32": "0.25.1", + "@esbuild/win32-x64": "0.25.1" + } + }, + "node_modules/esbuild-register": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.6.0.tgz", + "integrity": "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "peerDependencies": { + "esbuild": ">=0.12 <1" + } + }, + "node_modules/esbuild-register/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/esbuild-register/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-standard": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", + "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": "^8.0.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", + "eslint-plugin-promise": "^6.0.0" + } + }, + "node_modules/eslint-config-standard-jsx": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-11.0.0.tgz", + "integrity": "sha512-+1EV/R0JxEK1L0NGolAr8Iktm3Rgotx3BKwgaX+eAuSX8D952LULKtjgZD3F+e6SvibONnhLwoTi9DPxN5LvvQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "peerDependencies": { + "eslint": "^8.8.0", + "eslint-plugin-react": "^7.28.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-module-utils": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-es": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", + "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-es/node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-import/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-n": { + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz", + "integrity": "sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "builtins": "^5.0.1", + "eslint-plugin-es": "^4.1.0", + "eslint-utils": "^3.0.0", + "ignore": "^5.1.1", + "is-core-module": "^2.11.0", + "minimatch": "^3.1.2", + "resolve": "^1.22.1", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-n/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-n/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-promise": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.6.0.tgz", + "integrity": "sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.4.tgz", + "integrity": "sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/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, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/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, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter2": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", + "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==", + "license": "MIT" + }, + "node_modules/events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", + "license": "MIT", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-fileupload": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/express-fileupload/-/express-fileupload-1.5.1.tgz", + "integrity": "sha512-LsYG1ALXEB7vlmjuSw8ABeOctMp8a31aUC5ZF55zuz7O2jLFnmJYrCv10py357ky48aEoBQ/9bVXgFynjvaPmA==", + "license": "MIT", + "dependencies": { + "busboy": "^1.6.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/express-interceptor": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/express-interceptor/-/express-interceptor-1.2.0.tgz", + "integrity": "sha512-fCbcJv8ZwabDg0M/3PmHUxfr/WKHGMpAicR9TfGdhANV4M1GBDSrBTenHIK3aegyRN5S6eDwlvyNFiLynnc19w==", + "license": "MIT", + "dependencies": { + "debug": "^2.2.0" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", + "license": "MIT" + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", + "license": "MIT" + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formidable": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", + "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0", + "qs": "^6.11.0" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/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==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-parameter-names": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/get-parameter-names/-/get-parameter-names-0.3.0.tgz", + "integrity": "sha512-KkR1dX7U1TynXFkqveVE/XoRn9qRAsM2q4Eu2WsGTFzoaSdnNQEfxbcK+LMv8DcFoQQT9BFjNL+bf9ZyTLkWpg==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "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, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-it": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hash-it/-/hash-it-6.0.0.tgz", + "integrity": "sha512-KHzmSFx1KwyMPw0kXeeUD752q/Kfbzhy6dAZrjXV9kAIXGqzGvv8vhkUqj+2MGZldTo0IBpw6v7iWE7uxsvH0w==", + "license": "MIT" + }, + "node_modules/hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/hoek": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.4.tgz", + "integrity": "sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w==", + "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", + "license": "BSD-3-Clause", + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-agent/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/http-proxy-agent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/http-status-codes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-1.4.0.tgz", + "integrity": "sha512-JrT3ua+WgH8zBD3HEJYbeEgnuQaAnUeRRko/YojPAJjGmIfGD3KPU/asLdsLwKjfxOmQe5nXMQ0pt/7MyapVbQ==", + "license": "MIT" + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true, + "license": "ISC" + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arguments": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-2.0.0.tgz", + "integrity": "sha512-9MTn0dteHETtyUx8pxqMwg5hMBi3pvlyglJ+b79KOCca0po23337LbVV2Hl4xmMvfw++ljnO0/+5G6G+0Szh6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "ip-regex": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-retry-allowed": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz", + "integrity": "sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "license": "MIT" + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/isemail": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", + "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", + "license": "BSD-3-Clause", + "dependencies": { + "punycode": "2.x.x" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "license": "MIT" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "append-transform": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-processinfo": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", + "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", + "dev": true, + "license": "ISC", + "dependencies": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.3", + "istanbul-lib-coverage": "^3.2.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jmespath": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", + "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/joi": { + "version": "14.3.1", + "resolved": "https://registry.npmjs.org/joi/-/joi-14.3.1.tgz", + "integrity": "sha512-LQDdM+pkOrpAn4Lp+neNIFV3axv1Vna3j38bisbQhETPMANYRbFJFUyOZcOClYvM/hppMhGWuKSFEK9vjrB+bQ==", + "deprecated": "This module has moved and is now available at @hapi/joi. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues.", + "license": "BSD-3-Clause", + "dependencies": { + "hoek": "6.x.x", + "isemail": "3.x.x", + "topo": "3.x.x" + } + }, + "node_modules/joi/node_modules/hoek": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.3.tgz", + "integrity": "sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ==", + "deprecated": "This module has moved and is now available at @hapi/hoek. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues.", + "license": "BSD-3-Clause" + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "license": "MIT" + }, + "node_modules/jsdom": { + "version": "21.1.2", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-21.1.2.tgz", + "integrity": "sha512-sCpFmK2jv+1sjff4u7fzft+pUh2KSUbUrEHYHyfSIbGTIcmnjyp83qg6qLwdJ/I3LpTXx33ACxeRL7Lsyc6lGQ==", + "license": "MIT", + "dependencies": { + "abab": "^2.0.6", + "acorn": "^8.8.2", + "acorn-globals": "^7.0.0", + "cssstyle": "^3.0.0", + "data-urls": "^4.0.0", + "decimal.js": "^10.4.3", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.4", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.6.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^12.0.1", + "ws": "^8.13.0", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsep": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jsep/-/jsep-1.4.0.tgz", + "integrity": "sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==", + "license": "MIT", + "engines": { + "node": ">= 10.16.0" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-rules-engine": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/json-rules-engine/-/json-rules-engine-7.3.1.tgz", + "integrity": "sha512-NyRTQZllvAt7AQ3g9P7/t4nIwlEB+EyZV7y8/WgXfZWSlpcDryt1UH9CsoU+Z+MDvj8umN9qqEcbE6qnk9JAHw==", + "license": "ISC", + "dependencies": { + "clone": "^2.1.2", + "eventemitter2": "^6.4.4", + "hash-it": "^6.0.0", + "jsonpath-plus": "^10.3.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "license": "ISC" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonpath-plus": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-10.3.0.tgz", + "integrity": "sha512-8TNmfeTCk2Le33A3vRRwtuworG/L5RrgMvdjhKZxvyShO+mBu2fP50OWUjRLNtvw344DdDarFh9buFAZs5ujeA==", + "license": "MIT", + "dependencies": { + "@jsep-plugin/assignment": "^1.3.0", + "@jsep-plugin/regex": "^1.0.4", + "jsep": "^1.4.0" + }, + "bin": { + "jsonpath": "bin/jsonpath-cli.js", + "jsonpath-plus": "bin/jsonpath-cli.js" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "license": "MIT", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jwks-rsa": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-1.12.3.tgz", + "integrity": "sha512-cFipFDeYYaO9FhhYJcZWX/IyZgc0+g316rcHnDpT2dNRNIE/lMOmWKKqp09TkJoYlNFzrEVODsR4GgXJMgWhnA==", + "license": "MIT", + "dependencies": { + "@types/express-jwt": "0.0.42", + "axios": "^0.21.1", + "debug": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "jsonwebtoken": "^8.5.1", + "limiter": "^1.1.5", + "lru-memoizer": "^2.1.2", + "ms": "^2.1.2", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/jwks-rsa/node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/jwks-rsa/node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/jwks-rsa/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/jwks-rsa/node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "license": "MIT", + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jwks-rsa/node_modules/jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "license": "MIT", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=4", + "npm": ">=1.4.28" + } + }, + "node_modules/jwks-rsa/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/jwks-rsa/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "license": "MIT", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", + "license": "MIT" + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/limiter": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", + "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==" + }, + "node_modules/linkify-it": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", + "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", + "license": "MIT", + "dependencies": { + "uc.micro": "^1.0.1" + } + }, + "node_modules/load-json-file": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", + "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.15", + "parse-json": "^4.0.0", + "pify": "^4.0.1", + "strip-bom": "^3.0.0", + "type-fest": "^0.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/load-json-file/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=6" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "license": "MIT" + }, + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/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, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/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, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logform": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", + "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", + "license": "MIT", + "dependencies": { + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/logform/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.1" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lru-memoizer": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-2.3.0.tgz", + "integrity": "sha512-GXn7gyHAMhO13WSKrIiNfztwxodVsP8IoZ3XfrJV4yH2x0/OeTO/FIaAHTY5YekdGgW94njfuKmyyt1E0mR6Ug==", + "license": "MIT", + "dependencies": { + "lodash.clonedeep": "^4.5.0", + "lru-cache": "6.0.0" + } + }, + "node_modules/lru-memoizer/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lru-memoizer/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/make-dir": { + "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, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/markdown-it": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.2.tgz", + "integrity": "sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "~3.0.1", + "linkify-it": "^4.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "license": "MIT" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/millisecond": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/millisecond/-/millisecond-0.1.2.tgz", + "integrity": "sha512-BJ8XtxY+woL+5TkP6uS6XvOArm0JVrX2otkgtWZseHpIax0oOOPW3cnwhOjRqbEJg7YRO/BDF7fO/PTWNT3T9Q==", + "license": "MIT" + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "devOptional": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "optional": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mocha": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.1.0.tgz", + "integrity": "sha512-8uJR5RTC2NgpY3GrYcgpZrsEd9zKbPDpob1RezyR2upGHRQtHWofmzTMzTMSV6dru3tj5Ukt0+Vnq1qhFEEwAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^10.4.5", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1", + "yargs-unparser": "^2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/mocha-prepare": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/mocha-prepare/-/mocha-prepare-0.1.0.tgz", + "integrity": "sha512-ZSa/Zq+CQv9ZS7kfgsB3iRbfM4WBLn+Oy3EHDp3IXxbUVmVrcu+cs2YOELH77Gj3amkHjhCpM5CAZHV6jz6scg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "mocha": ">=1.0.0" + } + }, + "node_modules/mocha/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/mv": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", + "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", + "license": "MIT", + "optional": true, + "dependencies": { + "mkdirp": "~0.5.1", + "ncp": "~2.0.0", + "rimraf": "~2.4.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/mv/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", + "optional": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/mv/node_modules/glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "optional": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mv/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "optional": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mv/node_modules/rimraf": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "optional": true, + "dependencies": { + "glob": "^6.0.1" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/nan": { + "version": "2.22.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.2.tgz", + "integrity": "sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==", + "license": "MIT", + "optional": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", + "license": "MIT", + "optional": true, + "bin": { + "ncp": "bin/ncp" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-cache": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz", + "integrity": "sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==", + "license": "MIT", + "dependencies": { + "clone": "2.x" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "process-on-spawn": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/nodemon": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.9.tgz", + "integrity": "sha512-hdr1oIb2p6ZSxu3PB2JWWYS7ZQ0qvaZsc3hK8DR8f02kRzc8rjYmxAIvdz+aYC+8F2IjNaB7HMcSDg8nQpJxyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/nodemon/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/nodemon/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nodemon/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nwsapi": { + "version": "2.2.18", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.18.tgz", + "integrity": "sha512-p1TRH/edngVEHVbwqWnxUViEmq5znDvyB+Sik5cmuLpGOIfDf/39zLiq3swPF8Vakqn+gvNiOQAZu8djYlQILA==", + "license": "MIT" + }, + "node_modules/nyc": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-17.1.0.tgz", + "integrity": "sha512-U42vQ4czpKa0QdI1hu950XuNhYqgoM+ZF1HT+VuUHL9hPfDPVvNQyltmMqdE9bUHMVa+8yNbc3QKTj8zQhlVxQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^3.3.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^6.0.2", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "bin": { + "nyc": "bin/nyc.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/nyc/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/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, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/nyc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/nyc/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/nyc/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, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/nyc/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/nyc/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/nyc/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/nyc/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/nyc/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nyc/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/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==", + "dev": true, + "license": "ISC" + }, + "node_modules/nyc/node_modules/string-width": { + "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, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/nyc/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "license": "MIT", + "dependencies": { + "fn.name": "1.x.x" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-hash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parse5": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz", + "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", + "license": "MIT", + "dependencies": { + "entities": "^4.5.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=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==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-3.1.0.tgz", + "integrity": "sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^3.0.0", + "load-json-file": "^5.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-conf/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/precond": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", + "integrity": "sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prisma": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-6.4.1.tgz", + "integrity": "sha512-q2uJkgXnua/jj66mk6P9bX/zgYJFI/jn4Yp0aS6SPRrjH/n6VyOV7RDe1vHD0DX8Aanx4MvgmUPPoYnR6MJnPg==", + "devOptional": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/engines": "6.4.1", + "esbuild": ">=0.12 <1", + "esbuild-register": "3.6.0" + }, + "bin": { + "prisma": "build/index.js" + }, + "engines": { + "node": ">=18.18" + }, + "optionalDependencies": { + "fsevents": "2.3.3" + }, + "peerDependencies": { + "typescript": ">=5.1.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/process-on-spawn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.1.0.tgz", + "integrity": "sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "fromentries": "^1.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true, + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/r7insight_node": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/r7insight_node/-/r7insight_node-1.8.4.tgz", + "integrity": "sha512-6cQrzLkaOxdv/SRFXWRJjgFr8a3nXUOT/4IMFuBv+mWzBnu5DJl+HzONAsWYvclrlZnvfa54PaIPqPuPRSlbrQ==", + "license": "BSD-3-Clause", + "dependencies": { + "babel-runtime": "6.6.1", + "codependency": "0.1.4", + "json-stringify-safe": "5.0.1", + "lodash": "4.17.15", + "reconnect-core": "1.3.0", + "semver": "5.1.0" + }, + "engines": { + "iojs": ">=0.10", + "node": ">=0.8.0", + "npm": ">=1.4.6" + } + }, + "node_modules/r7insight_node/node_modules/lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "license": "MIT" + }, + "node_modules/r7insight_node/node_modules/semver": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.1.0.tgz", + "integrity": "sha512-sfKXKhcz5XVyfUZa2V4RbjK0xjOJCMLNF9H4p4v0UCo9wNHM/lH9RDuyDbGEtxWLMDlPBc8xI7AbbVLKXty+rQ==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reconnect-core": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/reconnect-core/-/reconnect-core-1.3.0.tgz", + "integrity": "sha512-+gLKwmyRf2tjl6bLR03DoeWELzyN6LW9Xgr3vh7NXHHwPi0JC0N2TwPyf90oUEBkCRcD+bgQ+s3HORoG3nwHDg==", + "license": "MIT", + "dependencies": { + "backoff": "~2.5.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "license": "MIT" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", + "dev": true, + "license": "ISC", + "dependencies": { + "es6-error": "^4.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "license": "Apache-2.0", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/request/node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true, + "license": "ISC" + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/rrweb-cssom": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", + "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", + "license": "MIT" + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-json-stringify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", + "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", + "license": "MIT", + "optional": true + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==", + "license": "ISC" + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true, + "license": "ISC" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/shebang-command": { + "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, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "license": "MIT" + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "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==", + "devOptional": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spawn-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/spawn-wrap/node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/spawn-wrap/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==", + "dev": true, + "license": "ISC" + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" + }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/standard": { + "version": "17.1.2", + "resolved": "https://registry.npmjs.org/standard/-/standard-17.1.2.tgz", + "integrity": "sha512-WLm12WoXveKkvnPnPnaFUUHuOB2cUdAsJ4AiGHL2G0UNMrcRAWY2WriQaV8IQ3oRmYr0AWUbLNr94ekYFAHOrA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "eslint": "^8.41.0", + "eslint-config-standard": "17.1.0", + "eslint-config-standard-jsx": "^11.0.0", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-n": "^15.7.0", + "eslint-plugin-promise": "^6.1.1", + "eslint-plugin-react": "^7.36.1", + "standard-engine": "^15.1.0", + "version-guard": "^1.1.1" + }, + "bin": { + "standard": "bin/cmd.cjs" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/standard-engine": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-15.1.0.tgz", + "integrity": "sha512-VHysfoyxFu/ukT+9v49d4BRXIokFRZuH3z1VRxzFArZdjSCFpro6rEIU3ji7e4AoAtuSfKBkiOmsrDqKW5ZSRw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "get-stdin": "^8.0.0", + "minimist": "^1.2.6", + "pkg-conf": "^3.1.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "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, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/superagent": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz", + "integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==", + "deprecated": "Please upgrade to v9.0.0+ as we have fixed a public vulnerability with formidable dependency. Note that v9.0.0+ requires Node.js v14.18.0+. See https://github.com/ladjs/superagent/pull/1800 for insight. This project is supported and maintained by the team at Forward Email @ https://forwardemail.net", + "dev": true, + "license": "MIT", + "dependencies": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.4", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^2.1.2", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.11.0", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=6.4.0 <13 || >=14" + } + }, + "node_modules/superagent/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/superagent/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/superagent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "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, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/swagger-ui-dist": { + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.20.1.tgz", + "integrity": "sha512-qBPCis2w8nP4US7SvUxdJD3OwKcqiWeZmjN2VWhq2v+ESZEXOP/7n4DeiOiiZcGYTKMHAHUUrroHaTsjUWTEGw==", + "license": "Apache-2.0", + "dependencies": { + "@scarf/scarf": "=1.4.0" + } + }, + "node_modules/swagger-ui-express": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-4.6.3.tgz", + "integrity": "sha512-CDje4PndhTD2HkgyKH3pab+LKspDeB/NhPN2OF1j+piYIamQqBYwAXWESOT1Yju2xFg51bRW9sUng2WxDjzArw==", + "license": "MIT", + "dependencies": { + "swagger-ui-dist": ">=4.11.0" + }, + "engines": { + "node": ">= v0.10.32" + }, + "peerDependencies": { + "express": ">=4.0.0 || >=5.0.0-beta" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "license": "MIT" + }, + "node_modules/tc-core-library-js": { + "version": "2.4.1", + "resolved": "git+ssh://git@github.com/appirio-tech/tc-core-library-js.git#df0b36c51cf80918194cbff777214b3c0cf5a151", + "license": "ISC", + "dependencies": { + "axios": "^0.19.0", + "bunyan": "^1.8.12", + "jsonwebtoken": "^8.5.1", + "jwks-rsa": "^1.6.0", + "lodash": "^4.17.15", + "millisecond": "^0.1.2", + "r7insight_node": "^1.8.4", + "request": "^2.88.0" + }, + "engines": { + "node": ">= 5" + } + }, + "node_modules/tc-core-library-js/node_modules/axios": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", + "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", + "deprecated": "Critical security vulnerability fixed in v0.21.1. For more information, see https://github.com/axios/axios/pull/3410", + "license": "MIT", + "dependencies": { + "follow-redirects": "1.5.10" + } + }, + "node_modules/tc-core-library-js/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/tc-core-library-js/node_modules/follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "license": "MIT", + "dependencies": { + "debug": "=3.1.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/tc-core-library-js/node_modules/jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "license": "MIT", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=4", + "npm": ">=1.4.28" + } + }, + "node_modules/tc-core-library-js/node_modules/jsonwebtoken/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/tc-core-library-js/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "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, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", + "license": "MIT" + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/topcoder-bus-api-wrapper": { + "name": "@topcoder-platform/topcoder-bus-api-wrapper", + "version": "1.2.0", + "resolved": "git+ssh://git@github.com/topcoder-platform/tc-bus-api-wrapper.git#f8cbd335a0e0b4d6edd7cae859473593271fd97f", + "license": "ISC", + "dependencies": { + "joi": "^13.4.0", + "lodash": "^4.17.15", + "superagent": "^3.8.3", + "tc-core-library-js": "appirio-tech/tc-core-library-js.git#v2.6.4" + } + }, + "node_modules/topcoder-bus-api-wrapper/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/topcoder-bus-api-wrapper/node_modules/form-data": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.3.tgz", + "integrity": "sha512-XHIrMD0NpDrNM/Ckf7XJiBbLl57KEhT3+i3yY+eWm+cqYZJQTZrKo8Y8AWKnuV5GT4scfuUGt9LzNoIx3dU1nQ==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.35", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/topcoder-bus-api-wrapper/node_modules/formidable": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", + "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==", + "deprecated": "Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau", + "license": "MIT", + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/topcoder-bus-api-wrapper/node_modules/joi": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-13.7.0.tgz", + "integrity": "sha512-xuY5VkHfeOYK3Hdi91ulocfuFopwgbSORmIwzcwHKESQhC7w1kD5jaVSPnqDxS2I8t3RZ9omCKAxNwXN5zG1/Q==", + "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", + "license": "BSD-3-Clause", + "dependencies": { + "hoek": "5.x.x", + "isemail": "3.x.x", + "topo": "3.x.x" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/topcoder-bus-api-wrapper/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/topcoder-bus-api-wrapper/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/topcoder-bus-api-wrapper/node_modules/readable-stream/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==", + "license": "MIT" + }, + "node_modules/topcoder-bus-api-wrapper/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/topcoder-bus-api-wrapper/node_modules/string_decoder/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==", + "license": "MIT" + }, + "node_modules/topcoder-bus-api-wrapper/node_modules/superagent": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", + "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", + "deprecated": "Please upgrade to v9.0.0+ as we have fixed a public vulnerability with formidable dependency. Note that v9.0.0+ requires Node.js v14.18.0+. See https://github.com/ladjs/superagent/pull/1800 for insight. This project is supported and maintained by the team at Forward Email @ https://forwardemail.net", + "license": "MIT", + "dependencies": { + "component-emitter": "^1.2.0", + "cookiejar": "^2.1.0", + "debug": "^3.1.0", + "extend": "^3.0.0", + "form-data": "^2.3.1", + "formidable": "^1.2.0", + "methods": "^1.1.1", + "mime": "^1.4.1", + "qs": "^6.5.1", + "readable-stream": "^2.3.5" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/topo": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz", + "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==", + "deprecated": "This module has moved and is now available at @hapi/topo. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues.", + "license": "BSD-3-Clause", + "dependencies": { + "hoek": "6.x.x" + } + }, + "node_modules/topo/node_modules/hoek": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.3.tgz", + "integrity": "sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ==", + "deprecated": "This module has moved and is now available at @hapi/hoek. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues.", + "license": "BSD-3-Clause" + }, + "node_modules/touch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", + "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", + "dev": true, + "license": "ISC", + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/triple-beam": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "license": "Unlicense" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "license": "MIT" + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true, + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "license": "MIT" + }, + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", + "license": "MIT", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", + "license": "MIT" + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/version-guard": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/version-guard/-/version-guard-1.1.3.tgz", + "integrity": "sha512-JwPr6erhX53EWH/HCSzfy1tTFrtPXUe927wdM1jqBBeYp1OM+qPHjWbsvv6pIBduqdgxxS+ScfG7S28pzyr2DQ==", + "dev": true, + "license": "0BSD", + "engines": { + "node": ">=0.10.48" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "license": "MIT", + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-12.0.1.tgz", + "integrity": "sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==", + "license": "MIT", + "dependencies": { + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/winston": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz", + "integrity": "sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==", + "license": "MIT", + "dependencies": { + "@colors/colors": "^1.6.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.7.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.9.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-transport": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", + "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", + "license": "MIT", + "dependencies": { + "logform": "^2.7.0", + "readable-stream": "^3.6.2", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workerpool": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/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, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/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, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "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, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/write-file-atomic/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==", + "dev": true, + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "license": "Apache-2.0", + "engines": { + "node": ">=12" + } + }, + "node_modules/xml2js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", + "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", + "license": "MIT", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "license": "MIT" + }, + "node_modules/xss": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.15.tgz", + "integrity": "sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg==", + "license": "MIT", + "dependencies": { + "commander": "^2.20.3", + "cssfilter": "0.0.10" + }, + "bin": { + "xss": "bin/xss" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yamljs": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz", + "integrity": "sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "glob": "^7.0.5" + }, + "bin": { + "json2yaml": "bin/json2yaml", + "yaml2json": "bin/yaml2json" + } + }, + "node_modules/yamljs/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/yamljs/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/yamljs/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/yamljs/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs-unparser/node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/yargs/node_modules/string-width": { + "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, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/package.json b/package.json index 9de7e6b2..20c12a40 100644 --- a/package.json +++ b/package.json @@ -6,50 +6,43 @@ "scripts": { "start": "node app.js", "dev": "nodemon app.js", + "postinstall": "npx prisma generate", "lint": "prettier src/**/*.js", "lint:fix": "prettier --write src/**/*.js", "standard-lint": "standard", "standard-lint:fix": "standard --fix", - "init-es": "node src/init-es.js", - "init-db": "node src/init-db.js", - "sync-es": "node src/scripts/sync-es.js", - "drop-tables": "node src/scripts/drop-tables.js", - "create-tables": "node src/scripts/create-tables.js", + "create-tables": "npx prisma migrate dev", "seed-tables": "node src/scripts/seed-tables.js", "check-timeline-templates": "node src/scripts/check-templates.js", - "view-data": "node src/scripts/view-data.js", - "view-es-data": "node src/scripts/view-es-data.js", - "test": "mocha --require test/prepare.js -t 20000 test/unit/*.test.js --exit", - "e2e": "mocha --require test/prepare.js -t 20000 test/e2e/*.test.js --exit", + "test": "NODE_ENV=test mocha test/unit/*.test.js --exit", + "e2e": "mocha test/e2e/*.test.js --exit", "test:cov": "nyc --reporter=html --reporter=text npm test", "e2e:cov": "nyc --reporter=html --reporter=text npm run e2e", "services:up": "docker-compose -f ./local/docker-compose.yml up -d", "services:down": "docker-compose -f ./local/docker-compose.yml down", "services:logs": "docker-compose -f ./local/docker-compose.yml logs", - "local:init": "npm run local:reset && npm run seed-tables && npm run sync-es", - "local:reset": "npm run init-es force && npm run init-db force" + "local:init": "npm run local:reset && npm run seed-tables", + "local:reset": "npx prisma migrate reset --force" }, "author": "TCSCODER", "license": "MIT", "repository": "https://github.com/topcoder-platform/challenge-api", "devDependencies": { + "aws-sdk-mock": "^6.2.1", "chai": "^4.2.0", "chai-http": "^4.2.1", - "mocha": "^6.1.4", + "mocha": "^11.1.0", "mocha-prepare": "^0.1.0", - "nodemon": "^2.0.20", - "nyc": "^14.0.0", + "nodemon": "^3.1.9", + "nyc": "^17.1.0", "prettier": "^2.8.1", + "prisma": "^6.4.1", "standard": "^17.1.0" }, "dependencies": { - "@grpc/grpc-js": "^1.8.12", - "@opensearch-project/opensearch": "^2.2.0", - "@topcoder-framework/domain-acl": "^0.24.0", - "@topcoder-framework/domain-challenge": "^0.24.1", - "@topcoder-framework/lib-common": "^0.24.1", + "@prisma/client": "^6.4.1", "aws-sdk": "^2.1145.0", - "axios": "^0.19.0", + "axios": "^1.8.2", "axios-retry": "^3.4.0", "bluebird": "^3.5.1", "body-parser": "^1.15.1", @@ -60,17 +53,15 @@ "deep-equal": "^2.2.0", "dompurify": "^3.0.2", "dotenv": "^8.2.0", - "elasticsearch": "^16.7.3", "express": "^4.15.4", "express-fileupload": "^1.1.6", "express-interceptor": "^1.2.0", "get-parameter-names": "^0.3.0", - "http-aws-es": "^6.0.0", "http-status-codes": "^1.3.0", "joi": "^14.0.0", "jsdom": "^21.1.2", - "json-rules-engine": "^6.1.2", - "jsonwebtoken": "^8.3.0", + "json-rules-engine": "^7.3.1", + "jsonwebtoken": "^9.0.2", "lodash": "^4.17.19", "markdown-it": "^13.0.1", "moment": "^2.24.0", diff --git a/prisma/migrations/20250322121900_init/migration.sql b/prisma/migrations/20250322121900_init/migration.sql new file mode 100644 index 00000000..e1cb0735 --- /dev/null +++ b/prisma/migrations/20250322121900_init/migration.sql @@ -0,0 +1,522 @@ +-- CreateEnum +CREATE TYPE "ChallengeTrackEnum" AS ENUM ('DEVELOP', 'DESIGN', 'DATA_SCIENCE', 'QA'); + +-- CreateEnum +CREATE TYPE "ReviewTypeEnum" AS ENUM ('COMMUNITY', 'INTERNAL'); + +-- CreateEnum +CREATE TYPE "DiscussionTypeEnum" AS ENUM ('CHALLENGE'); + +-- CreateEnum +CREATE TYPE "ChallengeStatusEnum" AS ENUM ('NEW', 'DRAFT', 'APPROVED', 'ACTIVE', 'COMPLETED', 'DELETED', 'CANCELLED', 'CANCELLED_FAILED_REVIEW', 'CANCELLED_FAILED_SCREENING', 'CANCELLED_ZERO_SUBMISSIONS', 'CANCELLED_WINNER_UNRESPONSIVE', 'CANCELLED_CLIENT_REQUEST', 'CANCELLED_REQUIREMENTS_INFEASIBLE', 'CANCELLED_ZERO_REGISTRATIONS', 'CANCELLED_PAYMENT_FAILED'); + +-- CreateEnum +CREATE TYPE "PrizeSetTypeEnum" AS ENUM ('PLACEMENT', 'COPILOT', 'REVIEWER', 'CHECKPOINT'); + +-- CreateTable +CREATE TABLE "Challenge" ( + "id" TEXT NOT NULL, + "name" TEXT NOT NULL, + "description" TEXT, + "privateDescription" TEXT, + "descriptionFormat" TEXT, + "projectId" INTEGER, + "typeId" TEXT NOT NULL, + "trackId" TEXT NOT NULL, + "timelineTemplateId" TEXT, + "overviewTotalPrizes" DOUBLE PRECISION, + "currentPhaseNames" TEXT[], + "tags" TEXT[], + "groups" TEXT[], + "taskIsTask" BOOLEAN NOT NULL DEFAULT false, + "taskIsAssigned" BOOLEAN NOT NULL DEFAULT false, + "taskMemberId" TEXT, + "submissionStartDate" TIMESTAMP(3), + "submissionEndDate" TIMESTAMP(3), + "registrationStartDate" TIMESTAMP(3), + "registrationEndDate" TIMESTAMP(3), + "startDate" TIMESTAMP(3), + "endDate" TIMESTAMP(3), + "legacyId" INTEGER, + "status" "ChallengeStatusEnum" NOT NULL DEFAULT 'NEW', + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdBy" TEXT NOT NULL, + "updatedAt" TIMESTAMP(3) NOT NULL, + "updatedBy" TEXT NOT NULL, + + CONSTRAINT "Challenge_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ChallengeType" ( + "id" TEXT NOT NULL, + "name" TEXT NOT NULL, + "description" TEXT, + "isActive" BOOLEAN NOT NULL DEFAULT true, + "isTask" BOOLEAN NOT NULL DEFAULT false, + "abbreviation" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdBy" TEXT NOT NULL, + "updatedAt" TIMESTAMP(3) NOT NULL, + "updatedBy" TEXT NOT NULL, + + CONSTRAINT "ChallengeType_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ChallengeTrack" ( + "id" TEXT NOT NULL, + "name" TEXT NOT NULL, + "description" TEXT, + "isActive" BOOLEAN NOT NULL, + "abbreviation" TEXT NOT NULL, + "legacyId" INTEGER, + "track" "ChallengeTrackEnum", + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdBy" TEXT NOT NULL, + "updatedAt" TIMESTAMP(3) NOT NULL, + "updatedBy" TEXT NOT NULL, + + CONSTRAINT "ChallengeTrack_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ChallengeTimelineTemplate" ( + "id" TEXT NOT NULL, + "typeId" TEXT NOT NULL, + "trackId" TEXT NOT NULL, + "timelineTemplateId" TEXT NOT NULL, + "isDefault" BOOLEAN NOT NULL DEFAULT false, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdBy" TEXT NOT NULL, + "updatedAt" TIMESTAMP(3) NOT NULL, + "updatedBy" TEXT NOT NULL, + + CONSTRAINT "ChallengeTimelineTemplate_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "AuditLog" ( + "id" TEXT NOT NULL, + "challengeId" TEXT, + "fieldName" TEXT NOT NULL, + "oldValue" TEXT, + "newValue" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdBy" TEXT NOT NULL, + "memberId" TEXT, + + CONSTRAINT "AuditLog_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Attachment" ( + "id" TEXT NOT NULL, + "challengeId" TEXT NOT NULL, + "name" TEXT NOT NULL, + "fileSize" INTEGER NOT NULL, + "url" TEXT NOT NULL, + "description" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdBy" TEXT NOT NULL, + "updatedAt" TIMESTAMP(3) NOT NULL, + "updatedBy" TEXT NOT NULL, + + CONSTRAINT "Attachment_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ChallengeMetadata" ( + "id" TEXT NOT NULL, + "challengeId" TEXT NOT NULL, + "name" TEXT NOT NULL, + "value" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdBy" TEXT NOT NULL, + "updatedAt" TIMESTAMP(3) NOT NULL, + "updatedBy" TEXT NOT NULL, + + CONSTRAINT "ChallengeMetadata_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Prize" ( + "id" TEXT NOT NULL, + "description" TEXT, + "prizeSetId" TEXT NOT NULL, + "type" TEXT NOT NULL, + "value" DOUBLE PRECISION NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdBy" TEXT NOT NULL, + "updatedAt" TIMESTAMP(3) NOT NULL, + "updatedBy" TEXT NOT NULL, + + CONSTRAINT "Prize_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ChallengeWinner" ( + "id" TEXT NOT NULL, + "challengeId" TEXT NOT NULL, + "userId" INTEGER NOT NULL, + "handle" TEXT NOT NULL, + "placement" INTEGER NOT NULL, + "type" "PrizeSetTypeEnum" NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdBy" TEXT NOT NULL, + "updatedAt" TIMESTAMP(3) NOT NULL, + "updatedBy" TEXT NOT NULL, + + CONSTRAINT "ChallengeWinner_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ChallengeTerm" ( + "id" TEXT NOT NULL, + "challengeId" TEXT NOT NULL, + "termId" TEXT NOT NULL, + "roleId" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdBy" TEXT NOT NULL, + "updatedAt" TIMESTAMP(3) NOT NULL, + "updatedBy" TEXT NOT NULL, + + CONSTRAINT "ChallengeTerm_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ChallengeSkill" ( + "id" TEXT NOT NULL, + "challengeId" TEXT NOT NULL, + "skillId" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdBy" TEXT NOT NULL, + "updatedAt" TIMESTAMP(3) NOT NULL, + "updatedBy" TEXT NOT NULL, + + CONSTRAINT "ChallengeSkill_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ChallengeBilling" ( + "id" TEXT NOT NULL, + "billingAccountId" TEXT, + "markup" DOUBLE PRECISION, + "clientBillingRate" DOUBLE PRECISION, + "challengeId" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdBy" TEXT NOT NULL, + "updatedAt" TIMESTAMP(3) NOT NULL, + "updatedBy" TEXT NOT NULL, + + CONSTRAINT "ChallengeBilling_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ChallengeLegacy" ( + "id" TEXT NOT NULL, + "reviewType" "ReviewTypeEnum" NOT NULL DEFAULT 'INTERNAL', + "confidentialityType" TEXT NOT NULL DEFAULT 'public', + "forumId" INTEGER, + "directProjectId" INTEGER, + "screeningScorecardId" INTEGER, + "reviewScorecardId" INTEGER, + "isTask" BOOLEAN NOT NULL DEFAULT false, + "useSchedulingAPI" BOOLEAN NOT NULL DEFAULT false, + "pureV5Task" BOOLEAN NOT NULL DEFAULT false, + "pureV5" BOOLEAN NOT NULL DEFAULT false, + "selfService" BOOLEAN NOT NULL DEFAULT false, + "selfServiceCopilot" TEXT, + "track" TEXT, + "subTrack" TEXT, + "legacySystemId" INTEGER, + "challengeId" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdBy" TEXT NOT NULL, + "updatedAt" TIMESTAMP(3) NOT NULL, + "updatedBy" TEXT NOT NULL, + + CONSTRAINT "ChallengeLegacy_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ChallengeEvent" ( + "id" TEXT NOT NULL, + "challengeId" TEXT NOT NULL, + "eventId" INTEGER NOT NULL, + "name" TEXT, + "key" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdBy" TEXT NOT NULL, + "updatedAt" TIMESTAMP(3) NOT NULL, + "updatedBy" TEXT NOT NULL, + + CONSTRAINT "ChallengeEvent_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ChallengeDiscussion" ( + "id" TEXT NOT NULL, + "challengeId" TEXT NOT NULL, + "discussionId" TEXT, + "name" TEXT NOT NULL, + "type" "DiscussionTypeEnum" NOT NULL, + "provider" TEXT NOT NULL, + "url" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdBy" TEXT NOT NULL, + "updatedAt" TIMESTAMP(3) NOT NULL, + "updatedBy" TEXT NOT NULL, + + CONSTRAINT "ChallengeDiscussion_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ChallengeDiscussionOption" ( + "id" TEXT NOT NULL, + "discussionId" TEXT NOT NULL, + "optionKey" TEXT NOT NULL, + "optionValue" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdBy" TEXT NOT NULL, + "updatedAt" TIMESTAMP(3) NOT NULL, + "updatedBy" TEXT NOT NULL, + + CONSTRAINT "ChallengeDiscussionOption_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ChallengeConstraint" ( + "id" TEXT NOT NULL, + "challengeId" TEXT NOT NULL, + "allowedRegistrants" TEXT[] DEFAULT ARRAY[]::TEXT[], + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdBy" TEXT NOT NULL, + "updatedAt" TIMESTAMP(3) NOT NULL, + "updatedBy" TEXT NOT NULL, + + CONSTRAINT "ChallengeConstraint_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Phase" ( + "id" TEXT NOT NULL, + "name" TEXT NOT NULL, + "description" TEXT, + "isOpen" BOOLEAN NOT NULL, + "duration" INTEGER NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdBy" TEXT NOT NULL, + "updatedAt" TIMESTAMP(3) NOT NULL, + "updatedBy" TEXT NOT NULL, + + CONSTRAINT "Phase_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ChallengePhase" ( + "id" TEXT NOT NULL, + "challengeId" TEXT NOT NULL, + "phaseId" TEXT NOT NULL, + "name" TEXT NOT NULL, + "description" TEXT, + "isOpen" BOOLEAN DEFAULT false, + "predecessor" TEXT, + "duration" INTEGER, + "scheduledStartDate" TIMESTAMP(3), + "scheduledEndDate" TIMESTAMP(3), + "actualStartDate" TIMESTAMP(3), + "actualEndDate" TIMESTAMP(3), + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdBy" TEXT NOT NULL, + "updatedAt" TIMESTAMP(3) NOT NULL, + "updatedBy" TEXT NOT NULL, + + CONSTRAINT "ChallengePhase_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ChallengePhaseConstraint" ( + "id" TEXT NOT NULL, + "challengePhaseId" TEXT NOT NULL, + "name" TEXT NOT NULL, + "value" INTEGER NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdBy" TEXT NOT NULL, + "updatedAt" TIMESTAMP(3) NOT NULL, + "updatedBy" TEXT NOT NULL, + + CONSTRAINT "ChallengePhaseConstraint_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ChallengePrizeSet" ( + "id" TEXT NOT NULL, + "challengeId" TEXT NOT NULL, + "type" "PrizeSetTypeEnum" NOT NULL, + "description" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdBy" TEXT NOT NULL, + "updatedAt" TIMESTAMP(3) NOT NULL, + "updatedBy" TEXT NOT NULL, + + CONSTRAINT "ChallengePrizeSet_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "TimelineTemplate" ( + "id" TEXT NOT NULL, + "name" TEXT NOT NULL, + "description" TEXT, + "isActive" BOOLEAN NOT NULL DEFAULT true, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdBy" TEXT NOT NULL, + "updatedAt" TIMESTAMP(3) NOT NULL, + "updatedBy" TEXT NOT NULL, + + CONSTRAINT "TimelineTemplate_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "TimelineTemplatePhase" ( + "id" TEXT NOT NULL, + "timelineTemplateId" TEXT NOT NULL, + "phaseId" TEXT NOT NULL, + "predecessor" TEXT, + "defaultDuration" INTEGER NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdBy" TEXT NOT NULL, + "updatedAt" TIMESTAMP(3) NOT NULL, + "updatedBy" TEXT NOT NULL, + + CONSTRAINT "TimelineTemplatePhase_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE INDEX "Challenge_projectId_idx" ON "Challenge"("projectId"); + +-- CreateIndex +CREATE INDEX "Challenge_status_idx" ON "Challenge"("status"); + +-- CreateIndex +CREATE INDEX "ChallengeType_abbreviation_idx" ON "ChallengeType"("abbreviation"); + +-- CreateIndex +CREATE INDEX "ChallengeTrack_legacyId_idx" ON "ChallengeTrack"("legacyId"); + +-- CreateIndex +CREATE INDEX "ChallengeTimelineTemplate_typeId_trackId_timelineTemplateId_idx" ON "ChallengeTimelineTemplate"("typeId", "trackId", "timelineTemplateId"); + +-- CreateIndex +CREATE INDEX "AuditLog_challengeId_idx" ON "AuditLog"("challengeId"); + +-- CreateIndex +CREATE INDEX "ChallengeMetadata_challengeId_idx" ON "ChallengeMetadata"("challengeId"); + +-- CreateIndex +CREATE INDEX "ChallengeWinner_challengeId_idx" ON "ChallengeWinner"("challengeId"); + +-- CreateIndex +CREATE UNIQUE INDEX "ChallengeBilling_challengeId_key" ON "ChallengeBilling"("challengeId"); + +-- CreateIndex +CREATE UNIQUE INDEX "ChallengeLegacy_challengeId_key" ON "ChallengeLegacy"("challengeId"); + +-- CreateIndex +CREATE INDEX "ChallengeEvent_challengeId_idx" ON "ChallengeEvent"("challengeId"); + +-- CreateIndex +CREATE INDEX "ChallengeDiscussion_challengeId_idx" ON "ChallengeDiscussion"("challengeId"); + +-- CreateIndex +CREATE UNIQUE INDEX "ChallengeConstraint_challengeId_key" ON "ChallengeConstraint"("challengeId"); + +-- CreateIndex +CREATE UNIQUE INDEX "Phase_name_key" ON "Phase"("name"); + +-- CreateIndex +CREATE INDEX "ChallengePhase_challengeId_idx" ON "ChallengePhase"("challengeId"); + +-- CreateIndex +CREATE INDEX "ChallengePhaseConstraint_challengePhaseId_idx" ON "ChallengePhaseConstraint"("challengePhaseId"); + +-- CreateIndex +CREATE INDEX "ChallengePrizeSet_challengeId_idx" ON "ChallengePrizeSet"("challengeId"); + +-- CreateIndex +CREATE UNIQUE INDEX "TimelineTemplate_name_key" ON "TimelineTemplate"("name"); + +-- CreateIndex +CREATE INDEX "TimelineTemplatePhase_timelineTemplateId_idx" ON "TimelineTemplatePhase"("timelineTemplateId"); + +-- AddForeignKey +ALTER TABLE "Challenge" ADD CONSTRAINT "Challenge_typeId_fkey" FOREIGN KEY ("typeId") REFERENCES "ChallengeType"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Challenge" ADD CONSTRAINT "Challenge_trackId_fkey" FOREIGN KEY ("trackId") REFERENCES "ChallengeTrack"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Challenge" ADD CONSTRAINT "Challenge_timelineTemplateId_fkey" FOREIGN KEY ("timelineTemplateId") REFERENCES "TimelineTemplate"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ChallengeTimelineTemplate" ADD CONSTRAINT "ChallengeTimelineTemplate_timelineTemplateId_fkey" FOREIGN KEY ("timelineTemplateId") REFERENCES "TimelineTemplate"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ChallengeTimelineTemplate" ADD CONSTRAINT "ChallengeTimelineTemplate_trackId_fkey" FOREIGN KEY ("trackId") REFERENCES "ChallengeTrack"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ChallengeTimelineTemplate" ADD CONSTRAINT "ChallengeTimelineTemplate_typeId_fkey" FOREIGN KEY ("typeId") REFERENCES "ChallengeType"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "AuditLog" ADD CONSTRAINT "AuditLog_challengeId_fkey" FOREIGN KEY ("challengeId") REFERENCES "Challenge"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Attachment" ADD CONSTRAINT "Attachment_challengeId_fkey" FOREIGN KEY ("challengeId") REFERENCES "Challenge"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ChallengeMetadata" ADD CONSTRAINT "ChallengeMetadata_challengeId_fkey" FOREIGN KEY ("challengeId") REFERENCES "Challenge"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Prize" ADD CONSTRAINT "Prize_prizeSetId_fkey" FOREIGN KEY ("prizeSetId") REFERENCES "ChallengePrizeSet"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ChallengeWinner" ADD CONSTRAINT "ChallengeWinner_challengeId_fkey" FOREIGN KEY ("challengeId") REFERENCES "Challenge"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ChallengeTerm" ADD CONSTRAINT "ChallengeTerm_challengeId_fkey" FOREIGN KEY ("challengeId") REFERENCES "Challenge"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ChallengeSkill" ADD CONSTRAINT "ChallengeSkill_challengeId_fkey" FOREIGN KEY ("challengeId") REFERENCES "Challenge"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ChallengeBilling" ADD CONSTRAINT "ChallengeBilling_challengeId_fkey" FOREIGN KEY ("challengeId") REFERENCES "Challenge"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ChallengeLegacy" ADD CONSTRAINT "ChallengeLegacy_challengeId_fkey" FOREIGN KEY ("challengeId") REFERENCES "Challenge"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ChallengeEvent" ADD CONSTRAINT "ChallengeEvent_challengeId_fkey" FOREIGN KEY ("challengeId") REFERENCES "Challenge"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ChallengeDiscussion" ADD CONSTRAINT "ChallengeDiscussion_challengeId_fkey" FOREIGN KEY ("challengeId") REFERENCES "Challenge"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ChallengeDiscussionOption" ADD CONSTRAINT "ChallengeDiscussionOption_discussionId_fkey" FOREIGN KEY ("discussionId") REFERENCES "ChallengeDiscussion"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ChallengeConstraint" ADD CONSTRAINT "ChallengeConstraint_challengeId_fkey" FOREIGN KEY ("challengeId") REFERENCES "Challenge"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ChallengePhase" ADD CONSTRAINT "ChallengePhase_challengeId_fkey" FOREIGN KEY ("challengeId") REFERENCES "Challenge"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ChallengePhase" ADD CONSTRAINT "ChallengePhase_phaseId_fkey" FOREIGN KEY ("phaseId") REFERENCES "Phase"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ChallengePhaseConstraint" ADD CONSTRAINT "ChallengePhaseConstraint_challengePhaseId_fkey" FOREIGN KEY ("challengePhaseId") REFERENCES "ChallengePhase"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ChallengePrizeSet" ADD CONSTRAINT "ChallengePrizeSet_challengeId_fkey" FOREIGN KEY ("challengeId") REFERENCES "Challenge"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "TimelineTemplatePhase" ADD CONSTRAINT "TimelineTemplatePhase_timelineTemplateId_fkey" FOREIGN KEY ("timelineTemplateId") REFERENCES "TimelineTemplate"("id") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/prisma/migrations/migration_lock.toml b/prisma/migrations/migration_lock.toml new file mode 100644 index 00000000..648c57fd --- /dev/null +++ b/prisma/migrations/migration_lock.toml @@ -0,0 +1,3 @@ +# Please do not edit this file manually +# It should be added in your version-control system (e.g., Git) +provider = "postgresql" \ No newline at end of file diff --git a/prisma/schema.prisma b/prisma/schema.prisma new file mode 100644 index 00000000..198c3d9c --- /dev/null +++ b/prisma/schema.prisma @@ -0,0 +1,588 @@ +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" + previewFeatures = ["fullTextSearchPostgres"] +} + +// Enum for allowed challenge track values (matches app-constants) +enum ChallengeTrackEnum { + DEVELOP + DESIGN + DATA_SCIENCE + QA +} + +enum ReviewTypeEnum { + COMMUNITY + INTERNAL +} + +enum DiscussionTypeEnum { + CHALLENGE +} + +enum ChallengeStatusEnum { + NEW + DRAFT + APPROVED + ACTIVE + COMPLETED + DELETED + CANCELLED + CANCELLED_FAILED_REVIEW + CANCELLED_FAILED_SCREENING + CANCELLED_ZERO_SUBMISSIONS + CANCELLED_WINNER_UNRESPONSIVE + CANCELLED_CLIENT_REQUEST + CANCELLED_REQUIREMENTS_INFEASIBLE + CANCELLED_ZERO_REGISTRATIONS + CANCELLED_PAYMENT_FAILED +} + +enum PrizeSetTypeEnum { + PLACEMENT + COPILOT + REVIEWER + CHECKPOINT +} + +////////////////////////////////////////// +// Main Challenge model +////////////////////////////////////////// + +model Challenge { + id String @id @default(uuid()) + name String + description String? + privateDescription String? + descriptionFormat String? + projectId Int? // frequently queried field + typeId String + trackId String // FK for relation in ChallengeTrack + timelineTemplateId String? // now used as foreign key to ChallengeTimelineTemplate + overviewTotalPrizes Float? // stored from overview.totalPrizes + currentPhaseNames String[] // current phase names + + // simple arrays for tags and groups (PostgreSQL native array type) + tags String[] + groups String[] + + // Task information (flattened from challenge.task) + taskIsTask Boolean @default(false) + taskIsAssigned Boolean @default(false) + taskMemberId String? + + // Dates for challenge lifecycle + submissionStartDate DateTime? + submissionEndDate DateTime? + registrationStartDate DateTime? + registrationEndDate DateTime? + startDate DateTime? + endDate DateTime? + + // Normalized billing and legacy information (one-to-one) + billingRecord ChallengeBilling? + legacyId Int? // Legacy system ID for searching + legacyRecord ChallengeLegacy? @relation("ChallengeLegacyRelation") + + // Additional fields from createChallenge schema + status ChallengeStatusEnum @default(NEW) // new challenges default to status "New" + // Normalized top‑level constraints (e.g. allowedRegistrants) for a challenge + constraintRecord ChallengeConstraint? + + // Additional normalized relations from createChallenge + events ChallengeEvent[] + discussions ChallengeDiscussion[] + + // Existing relations (one-to-many) for challenge metadata, phases, prize sets, winners, attachments, + // terms and skills + metadata ChallengeMetadata[] + phases ChallengePhase[] + prizeSets ChallengePrizeSet[] + winners ChallengeWinner[] + attachments Attachment[] + terms ChallengeTerm[] + skills ChallengeSkill[] + auditLogs AuditLog[] + + // Relation to ChallengeType (FK: typeId) + type ChallengeType @relation(fields: [typeId], references: [id]) + // Relation to ChallengeTrack (FK: trackId) + track ChallengeTrack @relation(fields: [trackId], references: [id]) + + timelineTemplate TimelineTemplate? @relation(fields: [timelineTemplateId], references: [id]) + + // Auditing fields (present in every table) + createdAt DateTime @default(now()) + createdBy String + updatedAt DateTime @updatedAt + updatedBy String + + @@index([projectId]) + @@index([status]) // index added for optimized search by status +} + +////////////////////////////////////////// +// ChallengeType model +////////////////////////////////////////// + +model ChallengeType { + id String @id @default(uuid()) + name String + description String? + isActive Boolean @default(true) + isTask Boolean @default(false) + abbreviation String + + challenges Challenge[] + timelineTemplates ChallengeTimelineTemplate[] + + createdAt DateTime @default(now()) + createdBy String + updatedAt DateTime @updatedAt + updatedBy String + + @@index([abbreviation]) +} + +////////////////////////////////////////// +// ChallengeTrack model +////////////////////////////////////////// + +model ChallengeTrack { + id String @id @default(uuid()) + name String + description String? + isActive Boolean + abbreviation String + legacyId Int? // numeric legacy system id (if provided) + track ChallengeTrackEnum? // enum value from ChallengeTrackEnum + challenges Challenge[] + // Opposite relation for ChallengeTimelineTemplate + timelineTemplates ChallengeTimelineTemplate[] + + createdAt DateTime @default(now()) + createdBy String + updatedAt DateTime @updatedAt + updatedBy String + + @@index([legacyId]) +} + +////////////////////////////////////////// +// ChallengeTimelineTemplate model +////////////////////////////////////////// + +model ChallengeTimelineTemplate { + id String @id @default(uuid()) + typeId String + trackId String + timelineTemplateId String // now required per Swagger spec + + // Link to the TimelineTemplate model via timelineTemplateId. + timelineTemplate TimelineTemplate @relation(fields: [timelineTemplateId], references: [id]) + // Link to the ChallengeTrack model via trackId. + track ChallengeTrack @relation(fields: [trackId], references: [id]) + // Link to the ChallengeType model via typeId. + type ChallengeType @relation(fields: [typeId], references: [id]) + + isDefault Boolean @default(false) + + createdAt DateTime @default(now()) + createdBy String + updatedAt DateTime @updatedAt + updatedBy String + + // Composite index to support searches/updates by typeId, trackId and timelineTemplateId. + @@index([typeId, trackId, timelineTemplateId]) +} + +////////////////////////////////////////// +// AuditLog model – tracks field changes +////////////////////////////////////////// + +model AuditLog { + id String @id @default(uuid()) + challengeId String? // optional association with a challenge + fieldName String + oldValue String? + newValue String? + createdAt DateTime @default(now()) + createdBy String + memberId String? + + // Relation field to connect AuditLog to Challenge. + challenge Challenge? @relation(fields: [challengeId], references: [id]) + + @@index([challengeId]) +} + +////////////////////////////////////////// +// Attachment model – for challenge attachments +////////////////////////////////////////// + +model Attachment { + id String @id @default(uuid()) + challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade) + challengeId String + name String + fileSize Int + url String + description String? + + createdAt DateTime @default(now()) + createdBy String + updatedAt DateTime @updatedAt + updatedBy String +} + +////////////////////////////////////////// +// ChallengeMetadata model – key/value metadata +////////////////////////////////////////// + +model ChallengeMetadata { + id String @id @default(uuid()) + challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade) + challengeId String + name String // name of the metadata + value String // value stored as string for flexibility + + createdAt DateTime @default(now()) + createdBy String + updatedAt DateTime @updatedAt + updatedBy String + + @@index([challengeId]) +} + +////////////////////////////////////////// +// Prize model – individual prize in a prize set +////////////////////////////////////////// + +model Prize { + id String @id @default(uuid()) + description String? + prizeSet ChallengePrizeSet @relation(fields: [prizeSetId], references: [id], onDelete: Cascade) + prizeSetId String + type String // e.g. "USD", "POINT" (could also be converted to enum later) + value Float + + createdAt DateTime @default(now()) + createdBy String + updatedAt DateTime @updatedAt + updatedBy String +} + +////////////////////////////////////////// +// ChallengeWinner model – record winners for a challenge +////////////////////////////////////////// + +model ChallengeWinner { + id String @id @default(uuid()) + challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade) + challengeId String + userId Int + handle String + placement Int + type PrizeSetTypeEnum + + createdAt DateTime @default(now()) + createdBy String + updatedAt DateTime @updatedAt + updatedBy String + + @@index([challengeId]) +} + +////////////////////////////////////////// +// ChallengeTerm model – association of challenge and terms +////////////////////////////////////////// + +model ChallengeTerm { + id String @id @default(uuid()) + challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade) + challengeId String + termId String // Terms API id + roleId String // UUID for the associated role + + createdAt DateTime @default(now()) + createdBy String + updatedAt DateTime @updatedAt + updatedBy String +} + +////////////////////////////////////////// +// ChallengeSkill model – linking challenges with skills +////////////////////////////////////////// + +model ChallengeSkill { + id String @id @default(uuid()) + challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade) + challengeId String + skillId String // Request provided skillId + + createdAt DateTime @default(now()) + createdBy String + updatedAt DateTime @updatedAt + updatedBy String +} + +////////////////////////////////////////// +// ChallengeBilling model – normalized billing info +////////////////////////////////////////// + +model ChallengeBilling { + id String @id @default(uuid()) + billingAccountId String? + markup Float? // in range [0, 100] + clientBillingRate Float? // in range [0, 100]. Supporting range on postgres is an open issue with prisma https://github.com/prisma/prisma/issues/3287. + challengeId String @unique + challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade) + createdAt DateTime @default(now()) + createdBy String + updatedAt DateTime @updatedAt + updatedBy String +} + +////////////////////////////////////////// +// ChallengeLegacy model – normalized legacy info +////////////////////////////////////////// + +model ChallengeLegacy { + id String @id @default(uuid()) + reviewType ReviewTypeEnum @default(INTERNAL) + confidentialityType String @default("public") + forumId Int? + directProjectId Int? + screeningScorecardId Int? + reviewScorecardId Int? + isTask Boolean @default(false) + useSchedulingAPI Boolean @default(false) + pureV5Task Boolean @default(false) + pureV5 Boolean @default(false) + selfService Boolean @default(false) + selfServiceCopilot String? + track String? // as provided in the legacy object + subTrack String? // as provided in the legacy object + legacySystemId Int? // represents the external "legacyId" + challengeId String @unique + challenge Challenge @relation("ChallengeLegacyRelation", fields: [challengeId], references: [id], onDelete: Cascade) + createdAt DateTime @default(now()) + createdBy String + updatedAt DateTime @updatedAt + updatedBy String +} + +////////////////////////////////////////// +// ChallengeEvent model – normalized challenge events +////////////////////////////////////////// + +model ChallengeEvent { + id String @id @default(uuid()) + challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade) + challengeId String + eventId Int + name String? + key String? + + createdAt DateTime @default(now()) + createdBy String + updatedAt DateTime @updatedAt + updatedBy String + + @@index([challengeId]) +} + +////////////////////////////////////////// +// ChallengeDiscussion and associated options – normalized discussion channels +////////////////////////////////////////// + +model ChallengeDiscussion { + id String @id @default(uuid()) + challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade) + challengeId String + discussionId String? + name String + type DiscussionTypeEnum // updated to use enum + provider String + url String? + options ChallengeDiscussionOption[] + + createdAt DateTime @default(now()) + createdBy String + updatedAt DateTime @updatedAt + updatedBy String + + @@index([challengeId]) +} + +model ChallengeDiscussionOption { + id String @id @default(uuid()) + discussion ChallengeDiscussion @relation(fields: [discussionId], references: [id], onDelete: Cascade) + discussionId String + optionKey String + optionValue String + + createdAt DateTime @default(now()) + createdBy String + updatedAt DateTime @updatedAt + updatedBy String +} + +////////////////////////////////////////// +// ChallengeConstraint model – top-level challenge constraints (e.g. allowed registrants) +////////////////////////////////////////// + +model ChallengeConstraint { + id String @id @default(uuid()) + challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade) + challengeId String @unique + allowedRegistrants String[] @default([]) + + createdAt DateTime @default(now()) + createdBy String + updatedAt DateTime @updatedAt + updatedBy String +} + +////////////////////////////////////////// +// New Model: ChallengePhase – to capture per-phase info from create/update challenge operations +// Each phase is linked with a challenge and holds a duration and any custom constraints. +////////////////////////////////////////// + +model Phase { + id String @id @default(uuid()) + name String + description String? + isOpen Boolean + duration Int + + createdAt DateTime @default(now()) + createdBy String + updatedAt DateTime @updatedAt + updatedBy String + + // Inverse relation for associated challenge phases + challengePhases ChallengePhase[] + + @@unique([name]) +} + +model ChallengePhase { + id String @id @default(uuid()) + challengeId String + phaseId String // foreign key to Phase + + name String // phase name + description String? // description + isOpen Boolean? @default(false) // if this phase is open + predecessor String? // predecessor of this phase + duration Int? // duration in seconds + scheduledStartDate DateTime? // when the phase is scheduled to start + scheduledEndDate DateTime? + actualStartDate DateTime? + actualEndDate DateTime? // when the phase actually ended + constraints ChallengePhaseConstraint[] + + // Relation fields + challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade) + phase Phase @relation(fields: [phaseId], references: [id]) + + createdAt DateTime @default(now()) + createdBy String + updatedAt DateTime @updatedAt + updatedBy String + + @@index([challengeId]) +} + +////////////////////////////////////////// +// New Model: ChallengePhaseConstraint – to capture custom constraints for each phase +////////////////////////////////////////// + +model ChallengePhaseConstraint { + id String @id @default(uuid()) + challengePhaseId String + name String // the name/key of the constraint + value Int // numeric value of the constraint (can be changed to Float if needed) + + // Relation to the phase + challengePhase ChallengePhase @relation(fields: [challengePhaseId], references: [id], onDelete: Cascade) + + createdAt DateTime @default(now()) + createdBy String + updatedAt DateTime @updatedAt + updatedBy String + + @@index([challengePhaseId]) +} + +////////////////////////////////////////// +// New Model: ChallengePrizeSet – to group prizes for a challenge +////////////////////////////////////////// + +model ChallengePrizeSet { + id String @id @default(uuid()) + challengeId String + type PrizeSetTypeEnum // using enum instead of string + description String? + prizes Prize[] + + // Relation to the challenge + challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade) + + createdAt DateTime @default(now()) + createdBy String + updatedAt DateTime @updatedAt + updatedBy String + + @@index([challengeId]) +} + +////////////////////////////////////////// +// TimelineTemplate model – defines timeline templates +////////////////////////////////////////// +model TimelineTemplate { + id String @id @default(uuid()) + name String + description String? + isActive Boolean @default(true) + phases TimelineTemplatePhase[] + + createdAt DateTime @default(now()) + createdBy String + updatedAt DateTime @updatedAt + updatedBy String + + // Opposite relation field, linking back to ChallengeTimelineTemplate. + challengeTimelineTemplates ChallengeTimelineTemplate[] + + // Opposite relation field for Challenge. + challenges Challenge[] + + @@unique([name]) +} + +////////////////////////////////////////// +// TimelineTemplatePhase model – phases associated with a timeline template +////////////////////////////////////////// +model TimelineTemplatePhase { + id String @id @default(uuid()) + timelineTemplateId String + phaseId String // identifier for the phase + predecessor String? // optional predecessor phase id + defaultDuration Int // duration (in minutes, hours, etc.) as per business rules + + createdAt DateTime @default(now()) + createdBy String + updatedAt DateTime @updatedAt + updatedBy String + + timelineTemplate TimelineTemplate @relation(fields: [timelineTemplateId], references: [id], onDelete: Cascade) + + @@index([timelineTemplateId]) +} \ No newline at end of file diff --git a/src/common/challenge-helper.js b/src/common/challenge-helper.js index 34e8f8c8..f524eb8f 100644 --- a/src/common/challenge-helper.js +++ b/src/common/challenge-helper.js @@ -122,7 +122,7 @@ class ChallengeHelper { * @param {oldChallenge} challenge the old challenge data */ async validateSkills(challenge, oldChallenge) { - if (!challenge.skills) { + if (!challenge.skills || _.isEmpty(challenge.skills)) { return; } @@ -335,101 +335,26 @@ class ChallengeHelper { } } - sanitizeRepeatedFieldsInUpdateRequest(data) { - if (data.winners != null) { - data.winnerUpdate = { - winners: data.winners, - }; - delete data.winners; - } - - if (data.discussions != null) { - data.discussionUpdate = { - discussions: data.discussions, - }; - delete data.discussions; - } - - if (data.metadata != null) { - data.metadataUpdate = { - metadata: data.metadata, - }; - delete data.metadata; - } - - if (data.phases != null) { - data.phaseUpdate = { - phases: data.phases, - }; - delete data.phases; - } - - if (data.events != null) { - data.eventUpdate = { - events: data.events, - }; - delete data.events; - } - - if (data.terms != null) { - data.termUpdate = { - terms: data.terms, - }; - delete data.terms; - } - - if (data.prizeSets != null) { - const type = data.prizeSets[0]?.prizes[0]?.type; - if (type === constants.prizeTypes.USD) { - ChallengeHelper.convertPSValuesToCents(data.prizeSets); - } - - data.prizeSetUpdate = { - prizeSets: [...data.prizeSets], - }; - delete data.prizeSets; - } - - if (data.tags != null) { - data.tagUpdate = { - tags: data.tags, - }; - delete data.tags; - } - - if (data.attachments != null) { - data.attachmentUpdate = { - attachments: data.attachments, - }; - delete data.attachments; - } - - if (data.groups != null) { - data.groupUpdate = { - groups: data.groups, - }; - delete data.groups; - } - - if (data.skills != null) { - data.skillUpdate = { - skills: data.skills, - }; - delete data.skills; - } - - return data; - } - enrichChallengeForResponse(challenge, track, type) { if (challenge.phases && challenge.phases.length > 0) { const registrationPhase = _.find(challenge.phases, (p) => p.name === "Registration"); const submissionPhase = _.find(challenge.phases, (p) => p.name === "Submission"); - challenge.currentPhase = challenge.phases - .slice() - .reverse() - .find((phase) => phase.isOpen); + // select last started open phase as current phase + _.forEach(challenge.phases, p => { + if (p.isOpen) { + if (!challenge.currentPhase) { + challenge.currentPhase = p; + } else { + const phaseStartDate = p.actualStartDate || p.scheduledStartDate; + const existStartDate = challenge.currentPhase.actualStartDate || + challenge.currentPhase.scheduledStartDate; + if (phaseStartDate > existStartDate) { + challenge.currentPhase = p; + } + } + } + }); challenge.currentPhaseNames = _.map( _.filter(challenge.phases, (p) => p.isOpen === true), @@ -467,15 +392,16 @@ class ChallengeHelper { if (type) { challenge.type = type.name; } - - challenge.metadata = challenge.metadata.map((m) => { - try { - m.value = JSON.stringify(JSON.parse(m.value)); // when we update how we index data, make this a JSON field - } catch (err) { - // do nothing - } - return m; - }); + if (challenge.metadata) { + challenge.metadata = challenge.metadata.map((m) => { + try { + m.value = JSON.stringify(JSON.parse(m.value)); // when we update how we index data, make this a JSON field + } catch (err) { + // do nothing + } + return m; + }); + } } static convertDateToISOString(startDate) { diff --git a/src/common/helper.js b/src/common/helper.js index eaaa0579..00be19e9 100644 --- a/src/common/helper.js +++ b/src/common/helper.js @@ -14,12 +14,8 @@ const axiosRetry = require("axios-retry"); const busApi = require("topcoder-bus-api-wrapper"); const NodeCache = require("node-cache"); const HttpStatus = require("http-status-codes"); -const xss = require("xss"); const logger = require("./logger"); -const { Client: OSClient } = require("@opensearch-project/opensearch"); -const elasticsearch = require("elasticsearch"); - const projectHelper = require("./project-helper"); const m2mHelper = require("./m2m-helper"); const { hasAdminRole } = require("./role-helper"); @@ -27,19 +23,22 @@ const { hasAdminRole } = require("./role-helper"); // Bus API Client let busApiClient; -// Elasticsearch client -let esClient; - -// validate ES refresh method -validateESRefreshMethod(config.ES.ES_REFRESH); - AWS.config.update({ s3: config.AMAZON.S3_API_VERSION, // accessKeyId: config.AMAZON.AWS_ACCESS_KEY_ID, // secretAccessKey: config.AMAZON.AWS_SECRET_ACCESS_KEY, region: config.AMAZON.AWS_REGION, }); -const s3 = new AWS.S3(); + +let s3 + +// lazy initialization of S3 instance +function getS3() { + if (!s3) { + s3 = new AWS.S3(); + } + return s3 +} /** * Wrap async function to standard express function @@ -204,7 +203,7 @@ async function downloadFromFileStack(url) { * @return {Promise} promise resolved to downloaded data */ async function downloadFromS3(bucket, key) { - const file = await s3.getObject({ Bucket: bucket, Key: key }).promise(); + const file = await getS3().getObject({ Bucket: bucket, Key: key }).promise(); return { data: file.Body, mimetype: file.ContentType, @@ -218,7 +217,7 @@ async function downloadFromS3(bucket, key) { * @return {Promise} promise resolved to deleted data */ async function deleteFromS3(bucket, key) { - return s3.deleteObject({ Bucket: bucket, Key: key }).promise(); + return getS3().deleteObject({ Bucket: bucket, Key: key }).promise(); } /** @@ -706,45 +705,6 @@ async function postBusEvent(topic, payload, options = {}) { await client.postEvent(message); } -/** - * Get ES Client - * @return {Object} Elasticsearch Client Instance - */ -function getESClient() { - if (esClient) { - return esClient; - } - const esHost = config.get("ES.HOST"); - - if (config.get("ES.OPENSEARCH") == "false") { - if (/.*amazonaws.*/.test(esHost)) { - esClient = elasticsearch.Client({ - apiVersion: config.get("ES.API_VERSION"), - hosts: esHost, - connectionClass: require("http-aws-es"), // eslint-disable-line global-require - amazonES: { - region: config.get("AMAZON.AWS_REGION"), - credentials: new AWS.EnvironmentCredentials("AWS"), - }, - }); - } else { - esClient = new elasticsearch.Client({ - apiVersion: config.get("ES.API_VERSION"), - hosts: esHost, - }); - } - } else { - esClient = new OSClient({ - node: esHost, - ssl: { - rejectUnauthorized: false, - }, - }); - } - - return esClient; -} - /** * Calculates challenge end date based on its phases * @param {any} challenge @@ -824,17 +784,6 @@ async function listResourcesByMemberAndChallenge(memberId, challengeId) { return result; } -/** - * Check if ES refresh method is valid. - * - * @param {String} method method to be tested - * @returns {String} method valid method - */ -async function validateESRefreshMethod(method) { - Joi.attempt(method, Joi.string().label("ES_REFRESH").valid(["true", "false", "wait_for"])); - return method; -} - /** * This functions gets the default terms of use for a given project id * @@ -866,6 +815,9 @@ async function getProjectDefaultTerms(projectId) { * @param {Array} terms The array of terms {id, roleId} to retrieve from terms API */ async function validateChallengeTerms(terms = []) { + if (terms.length === 0) { + return [] + } const listOfTerms = []; const token = await m2mHelper.getM2MToken(); for (let term of terms) { @@ -1242,12 +1194,6 @@ function flushInternalCache() { internalCache.flushAll(); } -function grpcErrorToHTTPCode(grpcErrorCode) { - if (grpcErrorCode == 2) return HttpStatus.NOT_FOUND; - - return HttpStatus.INTERNAL_SERVER_ERROR; -} - module.exports = { wrapExpress, autoWrapExpress, @@ -1263,11 +1209,9 @@ module.exports = { getUserGroups, ensureNoDuplicateOrNullElements, postBusEvent, - getESClient, calculateChallengeEndDate, listChallengesByMember, listResourcesByMemberAndChallenge, - validateESRefreshMethod, getProjectDefaultTerms, validateChallengeTerms, expandWithSubGroups, @@ -1298,7 +1242,6 @@ module.exports = { updateSelfServiceProjectInfo, getFromInternalCache, setToInternalCache, - grpcErrorToHTTPCode, flushInternalCache, }; diff --git a/src/common/phase-helper.js b/src/common/phase-helper.js index 259a6e20..87ba2091 100644 --- a/src/common/phase-helper.js +++ b/src/common/phase-helper.js @@ -1,11 +1,3 @@ -const { GRPC_CHALLENGE_SERVER_HOST, GRPC_CHALLENGE_SERVER_PORT } = process.env; - -const { - DomainHelper: { getScanCriteria }, -} = require("@topcoder-framework/lib-common"); - -const { PhaseDomain } = require("@topcoder-framework/domain-challenge"); - const _ = require("lodash"); const uuid = require("uuid/v4"); @@ -14,8 +6,7 @@ const moment = require("moment"); const errors = require("./errors"); const timelineTemplateService = require("../services/TimelineTemplateService"); - -const phaseDomain = new PhaseDomain(GRPC_CHALLENGE_SERVER_HOST, GRPC_CHALLENGE_SERVER_PORT); +const prisma = require('../common/prisma').getClient() class ChallengePhaseHelper { phaseDefinitionMap = {}; @@ -46,7 +37,7 @@ class ChallengePhaseHelper { actualStartDate: undefined, actualEndDate: undefined, }; - if (_.isUndefined(phase.predecessor)) { + if (_.isNil(phase.predecessor)) { let scheduledStartDate = _.defaultTo( _.get(phaseFromInput, "scheduledStartDate"), startDate @@ -75,15 +66,17 @@ class ChallengePhaseHelper { const precedecessorPhase = _.find(finalPhases, { phaseId: phase.predecessor, }); - if (phase.name === "Iterative Review") { - phase.scheduledStartDate = precedecessorPhase.scheduledStartDate; - } else { - phase.scheduledStartDate = precedecessorPhase.scheduledEndDate; + if (!_.isNil(precedecessorPhase)) { + if (phase.name === "Iterative Review") { + phase.scheduledStartDate = precedecessorPhase.scheduledStartDate; + } else { + phase.scheduledStartDate = precedecessorPhase.scheduledEndDate; + } + phase.scheduledEndDate = moment(phase.scheduledStartDate) + .add(phase.duration, "seconds") + .toDate() + .toISOString(); } - phase.scheduledEndDate = moment(phase.scheduledStartDate) - .add(phase.duration, "seconds") - .toDate() - .toISOString(); } return finalPhases; } @@ -109,16 +102,16 @@ class ChallengePhaseHelper { if (updatedPhase.name === "Post-Mortem") { updatedPhase.predecessor = "a93544bc-c165-4af4-b55e-18f3593b457a"; } - if (_.isUndefined(updatedPhase.actualEndDate)) { + if (_.isNil(updatedPhase.actualEndDate)) { updatedPhase.duration = _.defaultTo(_.get(newPhase, "duration"), updatedPhase.duration); } - if (_.isUndefined(updatedPhase.predecessor)) { + if (_.isNil(updatedPhase.predecessor)) { let scheduledStartDate = _.defaultTo( _.get(newPhase, "scheduledStartDate"), updatedPhase.scheduledStartDate ); if ( - !_.isUndefined(fixedStartDate) && + !_.isNil(fixedStartDate) && moment(scheduledStartDate).isSameOrBefore(moment(fixedStartDate)) ) { scheduledStartDate = moment(fixedStartDate).add(5, "minutes").toDate().toISOString(); @@ -127,7 +120,7 @@ class ChallengePhaseHelper { updatedPhase.isOpen = true; updatedPhase.scheduledStartDate = moment().toDate().toISOString(); updatedPhase.actualStartDate = updatedPhase.scheduledStartDate; - } else if (_.isUndefined(phase.actualStartDate)) { + } else if (_.isNil(phase.actualStartDate)) { updatedPhase.scheduledStartDate = moment(scheduledStartDate).toDate().toISOString(); } updatedPhase.scheduledEndDate = moment(updatedPhase.scheduledStartDate) @@ -136,20 +129,20 @@ class ChallengePhaseHelper { .toISOString(); } if ( - _.isUndefined(phase.actualEndDate) && - !_.isUndefined(newPhase) && - !_.isUndefined(newPhase.constraints) + _.isNil(phase.actualEndDate) && + !_.isNil(newPhase) && + !_.isNil(newPhase.constraints) ) { updatedPhase.constraints = newPhase.constraints; } - if (_.isUndefined(fixedStartDate)) { + if (_.isNil(fixedStartDate)) { fixedStartDate = updatedPhase.scheduledStartDate; } return updatedPhase; }); let iterativeReviewSet = false; for (let phase of updatedPhases) { - if (_.isUndefined(phase.predecessor)) { + if (_.isNil(phase.predecessor)) { continue; } const predecessorPhase = _.find(updatedPhases, { @@ -157,15 +150,15 @@ class ChallengePhaseHelper { }); if (phase.name === "Iterative Review") { if (!iterativeReviewSet) { - if (_.isUndefined(phase.actualStartDate)) { + if (_.isNil(phase.actualStartDate)) { phase.scheduledStartDate = predecessorPhase.scheduledStartDate; } iterativeReviewSet = true; } - } else if (_.isUndefined(phase.actualStartDate)) { + } else if (_.isNil(phase.actualStartDate)) { phase.scheduledStartDate = predecessorPhase.scheduledEndDate; } - if (_.isUndefined(phase.actualEndDate)) { + if (_.isNil(phase.actualEndDate)) { phase.scheduledEndDate = moment(phase.scheduledStartDate) .add(phase.duration, "seconds") .toDate() @@ -209,7 +202,7 @@ class ChallengePhaseHelper { async getPhaseDefinitionsAndMap() { if (_.isEmpty(this.phaseDefinitionMap)) { - const { items: records } = await phaseDomain.scan({ criteria: getScanCriteria({}) }); + const records = await prisma.phase.findMany({}) const map = new Map(); _.each(records, (r) => { diff --git a/src/common/prisma-helper.js b/src/common/prisma-helper.js new file mode 100644 index 00000000..f45e3841 --- /dev/null +++ b/src/common/prisma-helper.js @@ -0,0 +1,323 @@ +const _ = require('lodash'); +const Decimal = require("decimal.js"); +const constants = require('../../app-constants'); + +/** + * Convert phases data to prisma model. + * + * @param {Object} challenge challenge data + * @param {Object} result result + * @param {Object} auditFields createdBy and updatedBy + */ +function convertChallengePhaseSchema(challenge, result, auditFields) { + // keep phase data + const phaseFields = ['name', 'description', 'isOpen', 'predecessor', 'duration', + 'scheduledStartDate', 'scheduledEndDate', 'actualStartDate', 'actualEndDate']; + // current phase names + result.currentPhaseNames = _.map( + _.filter(challenge.phases, (p) => p.isOpen === true), "name" + ); + // get registration date and submission date + _.forEach(challenge.phases, p => { + if (p.name === 'Registration') { + result.registrationStartDate = p.actualStartDate || p.scheduledStartDate + result.registrationEndDate = p.actualEndDate || p.scheduledEndDate + } else if (p.name === 'Submission') { + result.submissionStartDate = p.actualStartDate || p.scheduledStartDate + result.submissionEndDate = p.actualEndDate || p.scheduledEndDate + } + }) + // set phases array data + if (!_.isEmpty(challenge.phases)) { + result.phases = { + create: _.map(challenge.phases, p => { + const phaseData = { + phase: { connect: { id: p.phaseId } }, + ..._.pick(p, phaseFields), + ...auditFields + } + if (!_.isEmpty(p.constraints)) { + phaseData.constraints = { create: _.map(p.constraints, c => ({ ...c, ...auditFields })) } + } + return phaseData + }) + } + } +} + +/** + * Convert challenge data to prisma model. + * + * @param {Object} currentUser current user + * @param {Object} challenge challenge schema + * @returns prisma model data to create/update challenge + */ +function convertChallengeSchemaToPrisma(currentUser, challenge) { + // used id used in createdBy and updatedBy + const userId = _.toString(currentUser.userId) + const auditFields = { + createdBy: userId, + updatedBy: userId + } + // keep primitive data + const result = _.pick(challenge, [ + 'name', 'description', 'privateDescription', 'descriptionFormat', 'tags', 'projectId', + 'startDate', 'groups', 'legacyId', + ]) + // set legacy data + if (!_.isNil(challenge.legacy)) { + result.legacyRecord = { + create: { + ...challenge.legacy, + ...auditFields + } + } + } + // set billing + if (!_.isNil(challenge.billing)) { + result.billingRecord = { + create: { + ...challenge.billing, + ...auditFields + } + } + } + // set task + if (!_.isNil(challenge.task)) { + result.taskIsTask = _.get(challenge, 'task.isTask') + result.taskIsAssigned = _.get(challenge, 'task.isAssigned') + const taskMemberId = _.get(challenge, 'task.memberId', null); + if (!_.isNil(taskMemberId)) { + result.taskMemberId = String(taskMemberId) + } + } + // set metadata + if (!_.isNil(challenge.metadata)) { + result.metadata = { create: _.map(challenge.metadata, m => ({ ...m, ...auditFields })) } + } + convertChallengePhaseSchema(challenge, result, auditFields) + // set events + if (!_.isNil(challenge.events)) { + result.events = { + create: _.map(challenge.events, e => { + const ret = _.pick(e, ['name', 'key']) + _.assignIn(ret, auditFields) + ret.eventId = e.id + return ret + }) + } + } + // discussions + if (!_.isNil(challenge.discussions)) { + result.discussions = { + create: _.map(challenge.discussions, d => { + const dissData = _.pick(d, ['name', 'provider', 'url']) + dissData.discussionId = d.id + dissData.type = d.type.toUpperCase() + _.assignIn(dissData, auditFields) + if (!_.isEmpty(d.options)) { + dissData.options = { create: [] } + _.forEach(d.options, o => { + _.forIn(o, (v, k) => { + dissData.options.create.push({ + optionKey: k, + optionValue: v, + ...auditFields + }) + }) + }) + } + return dissData + }) + } + } + let totalPrizesInCents = 0 + // prize sets + if (!_.isNil(challenge.prizeSets)) { + result.prizeSets = { + create: _.map(challenge.prizeSets, s => { + const setData = _.pick(s, 'description') + setData.type = s.type.toUpperCase() + _.assignIn(setData, auditFields) + setData.prizes = { + create: _.map(s.prizes, p => { + const prizeData = _.pick(p, 'type', 'description') + _.assignIn(prizeData, auditFields) + prizeData.value = p.amountInCents || p.value + // calculate only placement and checkpoint prizes + if ((s.type === constants.prizeSetTypes.ChallengePrizes + || s.type === constants.prizeSetTypes.CheckpointPrizes) + && p.type === constants.prizeTypes.USD) { + totalPrizesInCents += (p.amountInCents || new Decimal(p.value).mul(100).toNumber()) + } + return prizeData + }) + } + return setData + }) + } + result.overviewTotalPrizes = parseFloat(new Decimal(totalPrizesInCents).div(100).toFixed(2)) + } + // constraints + if (!_.isNil(_.get(challenge, 'constraints.allowedRegistrants'))) { + result.constraintRecord = { + create: { + allowedRegistrants: _.get(challenge, 'constraints.allowedRegistrants'), + ...auditFields + } + } + } + // status + if (challenge.status) { + result.status = challenge.status.toUpperCase() + } + // terms + if (!_.isNil(challenge.terms)) { + result.terms = { + create: _.map(challenge.terms, t => ({ + ...auditFields, + roleId: t.roleId, + termId: t.id + })) + } + } + // skills + if (!_.isNil(challenge.skills)) { + result.skills = { + create: _.map(challenge.skills, s => ({ + ...auditFields, + skillId: s.id + })) + } + } + // winners + if (!_.isNil(challenge.winners)) { + result.winners = { + create: _.map(challenge.winners, w => { + const t = { + ...auditFields, + ..._.pick(w, ['userId', 'handle', 'placement', 'type']) + } + if (_.isNil(t.type)) { + t.type = constants.prizeSetTypes.ChallengePrizes.toUpperCase() + } else { + t.type = t.type.toUpperCase() + } + return t; + }) + } + } + // relations + if (challenge.typeId) { + result.type = { connect: { id: challenge.typeId } } + } + if (challenge.trackId) { + result.track = { connect: { id: challenge.trackId } } + } + if (challenge.timelineTemplateId) { + result.timelineTemplate = { connect: { id: challenge.timelineTemplateId } } + } + _.assignIn(result, auditFields) + // keep createdAt to allow test data + if (challenge.created) { + result.createdAt = challenge.created || new Date() + } + result.updatedAt = new Date() + return result +} + +/** + * Convert prisma model to response data + * + * @param {Object} ret prisma model data + * @returns response data + */ +function convertModelToResponse(ret) { + ret.status = _.capitalize(ret.status.toLowerCase()) + ret.legacy = _.omit(ret.legacyRecord, 'id', constants.auditFields) + delete ret.legacyRecord + delete ret.legacy.challengeId + // billing info is not returned in response + // ret.billing = _.omit(ret.billingRecord, 'id', constants.auditFields) + delete ret.billingRecord + + ret.task = { + isTask: ret.taskIsTask, + isAssigned: ret.taskIsAssigned, + memberId: ret.taskMemberId + } + delete ret.taskIsTask + delete ret.taskIsAssigned + delete ret.taskMemberId + + // use original date field + ret.created = ret.createdAt + ret.updated = ret.updatedAt + delete ret.createdAt + delete ret.updatedAt + + // convert metadata + ret.metadata = _.map(ret.metadata, m => _.pick(m, ['name', 'value'])) + // convert phases + ret.phases = _.map(ret.phases, p => { + const t = _.omit(p, 'challengeId', constants.auditFields) + t.constraints = _.map(p.constraints, c => _.pick(c, 'name', 'value')) + return t + }) + // convert events + ret.events = _.map(ret.events, e => ({ id: e.eventId, name: e.name, key: e.key })) + // convert discussions + ret.discussions = _.map(ret.discussions, d => { + const r = _.pick(d, ['name', 'type', 'provider', 'url']) + r.id = d.discussionId + r.options = _.map(d.options, o => { + const x = {} + x[o.optionKey] = o.optionValue + return x + }) + return r + }) + // convert prize sets + let prizeType; + ret.prizeSets = _.map(ret.prizeSets, s => { + const ss = _.pick(s, ['type', 'description']) + ss.type = ss.type.toLowerCase() + ss.prizes = _.map(s.prizes, p => { + prizeType = p.type + if (prizeType === constants.prizeTypes.USD) { + // convert cents to value + p.value = parseFloat(new Decimal(p.value).div(100).toFixed(2)) + } + return _.pick(p, ['type', 'description', 'value']) + }) + return ss + }) + ret.overview = { totalPrizes: ret.overviewTotalPrizes }; + if (prizeType) { + ret.overview.type = prizeType; + } + delete ret.overviewTotalPrizes + + // convert terms + ret.terms = _.map(ret.terms, t => ({ id: t.termId, roleId: t.roleId })) + // convert skills + ret.skills = _.map(ret.skills, s => ({ id: s.skillId, name: s.name })) + // convert attachments + ret.attachments = _.map(ret.attachments, r => _.omit(r, constants.auditFields, 'challengeId')) + // convert winners + ret.winners = _.map(ret.winners, w => { + const winner = _.pick(w, ['userId', 'handle', 'placement']) + winner.type = w.type.toLowerCase() + return winner + }) + // TODO: Set data from other API + ret.numOfSubmissions = 0 + ret.numOfCheckpointSubmissions = 0 + ret.numOfRegistrants = 0 +} + +module.exports = { + convertChallengePhaseSchema, + convertChallengeSchemaToPrisma, + convertModelToResponse, +}; diff --git a/src/common/prisma.js b/src/common/prisma.js new file mode 100644 index 00000000..14d3bd8e --- /dev/null +++ b/src/common/prisma.js @@ -0,0 +1,19 @@ +const { PrismaClient } = require('@prisma/client') + +const prisma = new PrismaClient({ + log: [ + { level: 'query', emit: 'event' }, + { level: 'info', emit: 'event' }, + { level: 'warn', emit: 'event' }, + { level: 'error', emit: 'event' } + ] +}) + +// By running the first query, prisma calls $connect() under the hood +module.exports.prismaConnect = () => { + prisma.$connect() +} + +module.exports.getClient = () => { + return prisma +} diff --git a/src/common/srm-helper.js b/src/common/srm-helper.js deleted file mode 100644 index a87791e0..00000000 --- a/src/common/srm-helper.js +++ /dev/null @@ -1,251 +0,0 @@ -const _ = require("lodash"); -const moment = require("moment"); - -const SRMScheduleKeyMappings = _.reduce( - [ - "roundId", - "name", - "shortName", - "contestName", - "roundType", - "status", - "registrationStartTime", - "registrationEndTime", - "codingStartTime", - "codingEndTime", - "intermissionStartTime", - "intermissionEndTime", - "challengeStartTime", - "challengeEndTime", - "systestStartTime", - "systestEndTime", - ], - (acc, field) => ({ ...acc, [_.toLower(field)]: field }), - {} -); - -const PracticeProblemsKeyMappings = _.reduce( - [ - "problemId", - "componentId", - "roomId", - "roundId", - "divisionId", - "problemName", - "problemType", - "difficulty", - "status", - "points", - "myPoints", - ], - (acc, field) => ({ ...acc, [_.toLower(field)]: field }), - {} -); - -/** - * Get schedule query - * @param {Object} filter the query filter - * @param {Array} filter.statuses the statues - * @param {Date} filter.registrationStartTimeAfter the start of the registration time - * @param {Date=} filter.registrationStartTimeBefore the end of the registration time - * @param {String} filter.sortBy the sort field - * @param {String} filter.sortOrder the sort order - * @param {Number} filter.page the sort order - * @param {Number} filter.perPage the sort order - */ -function getSRMScheduleQuery(filter) { - const offset = (filter.page - 1) * filter.perPage; - let sortBy = filter.sortBy; - if (filter.sortBy === "registrationStartTime") { - sortBy = "reg.start_time"; - } else if (filter.sortBy === "codingStartTime") { - sortBy = "coding.start_time"; - } else if (filter.sortBy === "challengeStartTime") { - sortBy = "challenge.start_time"; - } - const statuses = _.join( - _.map(filter.statuses, (s) => `'${_.toUpper(s)}'`), - "," - ); - const registrationTimeFilter = `reg.start_time >= '${moment( - filter.registrationStartTimeAfter - ).format("yyyy-MM-DD HH:mm:ss")}'${ - filter.registrationStartTimeBefore - ? ` AND reg.start_time <= '${moment(filter.registrationStartTimeBefore).format( - "yyyy-MM-DD HH:mm:ss" - )}'` - : "" - }`; - - const query = `SELECT - SKIP ${offset} - FIRST ${filter.perPage} - r.round_id AS roundId - , r.name AS name - , r.short_name AS shortName - , c.name AS contestName - , rt.round_type_desc AS roundType - , r.status AS status - , reg.start_time AS registrationStartTime - , reg.end_time AS registrationEndTime - , coding.start_time AS codingStartTime - , coding.end_time AS codingEndTime - , intermission.start_time AS intermissionStartTime - , intermission.end_time AS intermissionEndTime - , challenge.start_time AS challengeStartTime - , challenge.end_time AS challengeEndTime - , systest.start_time AS systestStartTime - , systest.end_time AS systestEndTime - FROM - informixoltp:contest AS c - INNER JOIN informixoltp:round AS r ON r.contest_id = c.contest_id - INNER JOIN informixoltp:round_type_lu AS rt ON rt.round_type_id = r.round_type_id - LEFT JOIN informixoltp:round_segment AS reg ON reg.round_id = r.round_id AND reg.segment_id = 1 - LEFT JOIN informixoltp:round_segment AS coding ON coding.round_id = r.round_id AND coding.segment_id = 2 - LEFT JOIN informixoltp:round_segment AS intermission ON intermission.round_id = r.round_id AND intermission.segment_id = 3 - LEFT JOIN informixoltp:round_segment AS challenge ON challenge.round_id = r.round_id AND challenge.segment_id = 4 - LEFT JOIN informixoltp:round_segment AS systest ON systest.round_id = r.round_id AND systest.segment_id = 5 - WHERE - r.round_type_id in (1,2,10) AND - UPPER(r.status) in (${statuses}) AND - ${registrationTimeFilter} - ORDER BY ${sortBy} ${filter.sortOrder}`; - return query; -} - -/** - * Get schedule query - * @param {Object} criteria the query criteria - * @param {String} criteria.userId the user id - * @param {String} criteria.sortBy the sort field - * @param {String} criteria.sortOrder the sort order - * @param {Number} criteria.page the sort order - * @param {Number} criteria.perPage the sort order - * @param {String=} criteria.difficulty the sort order - * @param {String=} criteria.status the sort order - * @param {Number=} criteria.pointsLowerBound the sort order - * @param {Number=} criteria.pointsUpperBound the statues - * @param {String=} criteria.problemName the start of the registration time - */ -function getPracticeProblemsQuery(criteria) { - const offset = (criteria.page - 1) * criteria.perPage; - let sortBy = criteria.sortBy; - if (criteria.sortBy === "problemId") { - sortBy = "p.problem_id"; - } else if (criteria.sortBy === "problemName") { - sortBy = "p.name"; - } else if (criteria.sortBy === "problemType") { - sortBy = "ptl.problem_type_desc"; - } else if (criteria.sortBy === "points") { - sortBy = "rc.points"; - } else if (criteria.sortBy === "difficulty") { - sortBy = "p.proposed_difficulty_id"; - } else if (criteria.sortBy === "status") { - sortBy = "pcs.status_id"; - } else if (criteria.sortBy === "myPoints") { - sortBy = "NVL(pcs.points, 0)"; - } - const filters = []; - if (criteria.difficulty) { - if (criteria.difficulty === "easy") { - filters.push(`p.proposed_difficulty_id=1`); - } else if (criteria.difficulty === "medium") { - filters.push(`p.proposed_difficulty_id=2`); - } else if (criteria.difficulty === "hard") { - filters.push(`p.proposed_difficulty_id=3`); - } - } - if (criteria.status) { - if (criteria.status === "new") { - filters.push("NVL(pcs.status_id, 0) < 120"); - } else if (criteria.status === "viewed") { - filters.push("pcs.status_id >= 120 AND pcs.status_id != 150"); - } else if (criteria.status === "solved") { - filters.push("pcs.status_id = 150"); - } - } - if (criteria.pointsLowerBound) { - filters.push(`rc.points >= ${criteria.pointsLowerBound}`); - } - if (criteria.pointsUpperBound) { - filters.push(`rc.points <= ${criteria.pointsUpperBound}`); - } - if (criteria.problemName) { - filters.push( - `lower(p.name) like '%${_.toLower(_.replace(criteria.problemName, /[^a-z0-9]/gi, ""))}%'` - ); - } - - const queryCount = `SELECT count(*) AS count`; - - const querySelect = `SELECT - SKIP ${offset} - FIRST ${criteria.perPage} - p.problem_id AS problemId - , c.component_id AS componentId - , ro.room_id AS roomId - , rc.round_id AS roundId - , rc.division_id AS divisionId - , p.name AS problemName - , ptl.problem_type_desc AS problemType - , CASE WHEN (p.problem_type_id = 1 AND p.proposed_difficulty_id = 1) THEN 'Easy'::nvarchar(50) - WHEN (p.problem_type_id = 1 AND p.proposed_difficulty_id = 2) THEN 'Medium'::nvarchar(50) - WHEN (p.problem_type_id = 1 AND p.proposed_difficulty_id = 3) THEN 'Hard'::nvarchar(50) - END AS difficulty - , rc.points AS points - , CASE WHEN NVL(pcs.status_id, 0) < 120 THEN 'New'::nvarchar(50) - WHEN pcs.status_id = 150 THEN 'Solved'::nvarchar(50) - WHEN pcs.status_id >= 120 AND pcs.status_id != 150 THEN 'Viewed'::nvarchar(50) - END AS status - , NVL(pcs.points, 0) AS myPoints`; - - const queryFrom = `FROM informixoltp:problem p - INNER JOIN informixoltp:problem_type_lu ptl ON ptl.problem_type_id = p.problem_type_id - INNER JOIN informixoltp:component c ON c.problem_id = p.problem_id - INNER JOIN informixoltp:round_component rc ON rc.component_id = c.component_id - INNER JOIN informixoltp:round r ON r.round_id = rc.round_id AND r.status = 'A' AND r.round_type_id = 3 - INNER JOIN informixoltp:room ro ON ro.round_id = rc.round_id AND ro.room_type_id = 3 - LEFT JOIN informixoltp:component_state pcs ON pcs.round_id = rc.round_id AND pcs.component_id = c.component_id AND pcs.coder_id = ${criteria.userId}`; - - const queryWhere = filters.length ? `WHERE ${_.join(filters, " AND ")}` : ""; - - const queryOrder = `ORDER BY ${sortBy} ${criteria.sortOrder}`; - - const query = `${querySelect} ${queryFrom} ${queryWhere} ${queryOrder}`; - const countQuery = `${queryCount} ${queryFrom} ${queryWhere}`; - return { query, countQuery }; -} - -function convertSRMScheduleQueryOutput(queryOutput) { - return transformDatabaseResponse(queryOutput, SRMScheduleKeyMappings); -} - -function convertPracticeProblemsQueryOutput(queryOutput) { - return transformDatabaseResponse(queryOutput, PracticeProblemsKeyMappings); -} - -function transformDatabaseResponse(databaseResponse, keyMappings) { - const transformedData = []; - - if (databaseResponse && databaseResponse.rows && Array.isArray(databaseResponse.rows)) { - databaseResponse.rows.forEach((row) => { - const record = {}; - if (row.fields && Array.isArray(row.fields)) { - row.fields.forEach((field) => { - const lowercaseKey = field.key.toLowerCase(); - const mappedKey = keyMappings[lowercaseKey] || lowercaseKey; - record[mappedKey] = field.value; - }); - } - transformedData.push(record); - }); - } - return transformedData; -} - -module.exports = { - getSRMScheduleQuery, - convertSRMScheduleQueryOutput, - getPracticeProblemsQuery, - convertPracticeProblemsQueryOutput, -}; diff --git a/src/common/transformer.js b/src/common/transformer.js deleted file mode 100644 index 86861f76..00000000 --- a/src/common/transformer.js +++ /dev/null @@ -1,88 +0,0 @@ -const _ = require("lodash"); -const { compareVersions } = require("compare-versions"); -const challengeService = require("../services/ChallengeService"); - -function transformData(data, fieldsToDelete) { - if (!fieldsToDelete || !fieldsToDelete.length) { - return data; - } - - if (_.isArray(data)) { - _.each(data, (item, index) => { - data[index] = transformData(item, fieldsToDelete); - }); - } else if (_.isObject(data)) { - for (const field of fieldsToDelete) { - delete data[field]; - } - if (data.result) { - data.result = transformData(data.result, fieldsToDelete); - } - } - - return data; -} - -function transformServices() { - _.each(services, (service, serviceName) => { - const serviceConfig = servicesConfig[serviceName]; - if (!serviceConfig) { - return; - } - - _.each(service, (method, methodName) => { - service[methodName] = async function () { - const args = Array.prototype.slice.call(arguments); - - // No transform need for this method - if (!serviceConfig.methods.includes(methodName)) { - return await method.apply(this, args.slice(1)); - } - - // args[0] is request, get version header - const request = args[0]; - const apiVersion = request.headers["app-version"] || "1.0.0"; - - const fieldsToDelete = []; - _.each(serviceConfig.fieldsVersion, (version, field) => { - // If input version less than required version, delete fields - if (compareVersions(apiVersion, version) < 0) { - fieldsToDelete.push(field); - } - }); - - // Transform request body by deleting fields - if (_.isArray(request.body) || _.isObject(request.body)) { - transformData(request.body, fieldsToDelete); - } - - const data = await method.apply(this, args.slice(1)); - - // Transform response data by deleting fields - return transformData(data, fieldsToDelete); - }; - service[methodName].params = ["req", ...method.params]; - }); - }); -} - -// Define the version config for services -const servicesConfig = { - challengeService: { - methods: ["searchChallenges", "getChallenge", "createChallenge", "updateChallenge"], - fieldsVersion: { - skills: "1.1.0", - payments: "2.0.0", - }, - }, -}; - -// Define the services to export -const services = { - challengeService, -}; - -// Transform services before export -transformServices(); - -module.exports = services; diff --git a/src/controllers/ChallengeController.js b/src/controllers/ChallengeController.js index 2d726578..ec8a31d1 100644 --- a/src/controllers/ChallengeController.js +++ b/src/controllers/ChallengeController.js @@ -2,7 +2,7 @@ * Controller for challenge endpoints */ const HttpStatus = require("http-status-codes"); -const { challengeService: service } = require("../common/transformer"); +const service = require("../services/ChallengeService"); const helper = require("../common/helper"); const logger = require("../common/logger"); @@ -12,7 +12,7 @@ const logger = require("../common/logger"); * @param {Object} res the response */ async function searchChallenges(req, res) { - let result = await service.searchChallenges(req, req.authUser, { + let result = await service.searchChallenges(req.authUser, { ...req.query, ...req.body, }); @@ -50,7 +50,7 @@ async function createChallenge(req, res) { logger.debug( `createChallenge User: ${JSON.stringify(req.authUser)} - Body: ${JSON.stringify(req.body)}` ); - const result = await service.createChallenge(req, req.authUser, req.body, req.userToken); + const result = await service.createChallenge(req.authUser, req.body, req.userToken); res.status(HttpStatus.CREATED).send(result); } @@ -60,7 +60,7 @@ async function createChallenge(req, res) { * @param {Object} res the response */ async function sendNotifications(req, res) { - const result = await service.sendNotifications(req, req.authUser, req.params.challengeId); + const result = await service.sendNotifications(req.authUser, req.params.challengeId); res.status(HttpStatus.CREATED).send(result); } @@ -71,7 +71,6 @@ async function sendNotifications(req, res) { */ async function getChallenge(req, res) { const result = await service.getChallenge( - req, req.authUser, req.params.challengeId, req.query.checkIfExists @@ -85,7 +84,7 @@ async function getChallenge(req, res) { * @param {Object} res the response */ async function getChallengeStatistics(req, res) { - const result = await service.getChallengeStatistics(req, req.authUser, req.params.challengeId); + const result = await service.getChallengeStatistics(req.authUser, req.params.challengeId); res.send(result); } @@ -100,27 +99,7 @@ async function updateChallenge(req, res) { req.params.challengeId } - Body: ${JSON.stringify(req.body)}` ); - const result = await service.updateChallenge(req, req.authUser, req.params.challengeId, req.body); - res.send(result); -} - -/** - * Update Legacy Payout (Updates informixoltp:payment_detail) - * This has no effect other than to keep DW in sync for looker with - * Updates that happen in Wallet - */ -async function updateLegacyPayout(req, res) { - logger.debug( - `updateLegacyPayout User: ${JSON.stringify(req.authUser)} - ChallengeID: ${ - req.params.challengeId - } - Body: ${JSON.stringify(req.body)}` - ); - const result = await service.updateLegacyPayout( - req, - req.authUser, - req.params.challengeId, - req.body - ); + const result = await service.updateChallenge(req.authUser, req.params.challengeId, req.body); res.send(result); } @@ -133,7 +112,7 @@ async function deleteChallenge(req, res) { logger.debug( `deleteChallenge User: ${JSON.stringify(req.authUser)} - ChallengeID: ${req.params.challengeId}` ); - const result = await service.deleteChallenge(req, req.authUser, req.params.challengeId); + const result = await service.deleteChallenge(req.authUser, req.params.challengeId); res.send(result); } @@ -146,37 +125,13 @@ async function advancePhase(req, res) { res.send(await service.advancePhase(req, req.authUser, req.params.challengeId, req.body)); } -/** - * Get SRM Schedule - * @param {Object} req the request - * @param {Object} res the response - */ -async function getSRMSchedule(req, res) { - const result = await service.getSRMSchedule(req, req.query); - res.send(result); -} - -/** - * Get Practice Problems - * @param {Object} req the request - * @param {Object} res the response - */ -async function getPracticeProblems(req, res) { - const result = await service.getPracticeProblems(req, req.authUser, req.query); - helper.setResHeaders(req, res, result); - res.send(result.result); -} - module.exports = { searchChallenges, createChallenge, getChallenge, updateChallenge, - updateLegacyPayout, deleteChallenge, getChallengeStatistics, sendNotifications, advancePhase, - getSRMSchedule, - getPracticeProblems, }; diff --git a/src/controllers/ChallengePhaseController.js b/src/controllers/ChallengePhaseController.js index b68914be..3c327bbc 100644 --- a/src/controllers/ChallengePhaseController.js +++ b/src/controllers/ChallengePhaseController.js @@ -22,7 +22,7 @@ async function searchPhases(req, res) { * @param {Object} res the response */ async function createPhase(req, res) { - const result = await service.createPhase(req.body); + const result = await service.createPhase(req.authUser, req.body); res.status(HttpStatus.CREATED).send(result); } @@ -42,7 +42,7 @@ async function getPhase(req, res) { * @param {Object} res the response */ async function fullyUpdatePhase(req, res) { - const result = await service.fullyUpdatePhase(req.params.challengePhaseId, req.body); + const result = await service.fullyUpdatePhase(req.authUser, req.params.challengePhaseId, req.body); res.send(result); } @@ -52,7 +52,7 @@ async function fullyUpdatePhase(req, res) { * @param {Object} res the response */ async function partiallyUpdatePhase(req, res) { - const result = await service.partiallyUpdatePhase(req.params.challengePhaseId, req.body); + const result = await service.partiallyUpdatePhase(req.authUser, req.params.challengePhaseId, req.body); res.send(result); } diff --git a/src/controllers/ChallengeTimelineTemplateController.js b/src/controllers/ChallengeTimelineTemplateController.js index ae69740e..cacc8070 100644 --- a/src/controllers/ChallengeTimelineTemplateController.js +++ b/src/controllers/ChallengeTimelineTemplateController.js @@ -22,7 +22,7 @@ async function searchChallengeTimelineTemplates(req, res) { * @param {Object} res the response */ async function createChallengeTimelineTemplate(req, res) { - const result = await service.createChallengeTimelineTemplate(req.body); + const result = await service.createChallengeTimelineTemplate(req.authUser, req.body); res.status(HttpStatus.CREATED).send(result); } @@ -43,6 +43,7 @@ async function getChallengeTimelineTemplate(req, res) { */ async function fullyUpdateChallengeTimelineTemplate(req, res) { const result = await service.fullyUpdateChallengeTimelineTemplate( + req.authUser, req.params.challengeTimelineTemplateId, req.body ); diff --git a/src/controllers/ChallengeTrackController.js b/src/controllers/ChallengeTrackController.js index cac350f1..768badea 100644 --- a/src/controllers/ChallengeTrackController.js +++ b/src/controllers/ChallengeTrackController.js @@ -22,7 +22,7 @@ async function searchChallengeTracks(req, res) { * @param {Object} res the response */ async function createChallengeTrack(req, res) { - const result = await service.createChallengeTrack(req.body); + const result = await service.createChallengeTrack(req.authUser, req.body); res.status(HttpStatus.CREATED).send(result); } @@ -42,7 +42,7 @@ async function getChallengeTrack(req, res) { * @param {Object} res the response */ async function fullyUpdateChallengeTrack(req, res) { - const result = await service.fullyUpdateChallengeTrack(req.params.challengeTrackId, req.body); + const result = await service.fullyUpdateChallengeTrack(req.authUser, req.params.challengeTrackId, req.body); res.send(result); } @@ -52,7 +52,7 @@ async function fullyUpdateChallengeTrack(req, res) { * @param {Object} res the response */ async function partiallyUpdateChallengeTrack(req, res) { - const result = await service.partiallyUpdateChallengeTrack(req.params.challengeTrackId, req.body); + const result = await service.partiallyUpdateChallengeTrack(req.authUser, req.params.challengeTrackId, req.body); res.send(result); } diff --git a/src/controllers/ChallengeTypeController.js b/src/controllers/ChallengeTypeController.js index dd6b6fc2..161952eb 100644 --- a/src/controllers/ChallengeTypeController.js +++ b/src/controllers/ChallengeTypeController.js @@ -22,7 +22,7 @@ async function searchChallengeTypes(req, res) { * @param {Object} res the response */ async function createChallengeType(req, res) { - const result = await service.createChallengeType(req.body); + const result = await service.createChallengeType(req.authUser, req.body); res.status(HttpStatus.CREATED).send(result); } @@ -42,7 +42,7 @@ async function getChallengeType(req, res) { * @param {Object} res the response */ async function fullyUpdateChallengeType(req, res) { - const result = await service.fullyUpdateChallengeType(req.params.challengeTypeId, req.body); + const result = await service.fullyUpdateChallengeType(req.authUser, req.params.challengeTypeId, req.body); res.send(result); } @@ -52,7 +52,7 @@ async function fullyUpdateChallengeType(req, res) { * @param {Object} res the response */ async function partiallyUpdateChallengeType(req, res) { - const result = await service.partiallyUpdateChallengeType(req.params.challengeTypeId, req.body); + const result = await service.partiallyUpdateChallengeType(req.authUser, req.params.challengeTypeId, req.body); res.send(result); } diff --git a/src/controllers/TimelineTemplateController.js b/src/controllers/TimelineTemplateController.js index 8dcbd0f4..f2a12b8a 100644 --- a/src/controllers/TimelineTemplateController.js +++ b/src/controllers/TimelineTemplateController.js @@ -22,7 +22,7 @@ async function searchTimelineTemplates(req, res) { * @param {Object} res the response */ async function createTimelineTemplate(req, res) { - const result = await service.createTimelineTemplate(req.body); + const result = await service.createTimelineTemplate(req.authUser, req.body); res.status(HttpStatus.CREATED).send(result); } @@ -42,7 +42,7 @@ async function getTimelineTemplate(req, res) { * @param {Object} res the response */ async function fullyUpdateTimelineTemplate(req, res) { - const result = await service.fullyUpdateTimelineTemplate(req.params.timelineTemplateId, req.body); + const result = await service.fullyUpdateTimelineTemplate(req.authUser, req.params.timelineTemplateId, req.body); res.send(result); } @@ -53,6 +53,7 @@ async function fullyUpdateTimelineTemplate(req, res) { */ async function partiallyUpdateTimelineTemplate(req, res) { const result = await service.partiallyUpdateTimelineTemplate( + req.authUser, req.params.timelineTemplateId, req.body ); diff --git a/src/init-db.js b/src/init-db.js deleted file mode 100644 index 505aa8e7..00000000 --- a/src/init-db.js +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Initialize database tables. All data will be cleared. - */ -require('../app-bootstrap') -const logger = require('./common/logger') -const helper = require('./common/helper') - -logger.info('Initialize database.') - -const initDB = async () => { - const auditLogs = await helper.scan('AuditLog') - for (const auditLog of auditLogs) { - await auditLog.delete() - } - const challenges = await helper.scan('Challenge') - for (const challenge of challenges) { - await challenge.delete() - } - const challengeTimelineTemplates = await helper.scan('ChallengeTimelineTemplate') - for (const challengeTT of challengeTimelineTemplates) { - await challengeTT.delete() - } - const types = await helper.scan('ChallengeType') - for (const type of types) { - await type.delete() - } - const phases = await helper.scan('Phase') - for (const phase of phases) { - await phase.delete() - } - const timelineTemplates = await helper.scan('TimelineTemplate') - for (const timelineTemplate of timelineTemplates) { - await timelineTemplate.delete() - } - const attachments = await helper.scan('Attachment') - for (const attachment of attachments) { - await attachment.delete() - } -} - -initDB().then(() => { - logger.info('Done!') - process.exit() -}).catch((e) => { - logger.logFullError(e) - process.exit(1) -}) diff --git a/src/init-es.js b/src/init-es.js deleted file mode 100644 index e0f055d9..00000000 --- a/src/init-es.js +++ /dev/null @@ -1,116 +0,0 @@ -/** - * Initialize elastic search. - * It will create configured index in elastic search if it is not present. - * It can delete and re-create index if providing an extra 'force' argument. - * Usage: - * node src/init-es - * node src/init-es force - */ -const config = require("config"); -const logger = require("./common/logger"); -const helper = require("./common/helper"); - -const client = helper.getESClient(); - -const initES = async () => { - if (process.argv.length === 3 && process.argv[2] === "force") { - logger.info(`Delete index ${config.ES.ES_INDEX} if any.`); - try { - await client.indices.delete({ index: config.ES.ES_INDEX }); - } catch (err) { - // ignore - } - } - - const { body: exists } = await client.indices.exists({ index: config.ES.ES_INDEX }); - if (exists) { - logger.info(`The index ${config.ES.ES_INDEX} exists.`); - } else { - logger.info(`The index ${config.ES.ES_INDEX} will be created.`); - - const body = { - mappings: { - // properties: { - properties: { - id: { type: "keyword" }, - name: { - type: "keyword", - fields: { - text: { - type: "text", - }, - }, - normalizer: "custom_sort_normalizer", - }, - status: { - type: "keyword", - fields: { - text: { - type: "text", - }, - }, - normalizer: "custom_sort_normalizer", - }, - type: { - type: "keyword", - fields: { - text: { - type: "text", - }, - }, - normalizer: "custom_sort_normalizer", - }, - prizeSets: { - properties: { - type: { type: "text" }, - prizes: { - properties: { - type: { type: "text" }, - value: { type: "float" }, - }, - }, - }, - }, - }, - dynamic_templates: [ - { - metadata: { - path_match: "metadata.*", - mapping: { - type: "text", - }, - }, - }, - ], - //} - }, - }; - - body.settings = { - analysis: { - normalizer: { - custom_sort_normalizer: { - type: "custom", - char_filter: [], - filter: ["lowercase", "asciifolding"], - }, - }, - }, - }; - - await client.indices.create({ - index: config.ES.ES_INDEX, - body, - }); - } -}; - -initES() - .then(() => { - logger.info("Done!"); - process.exit(); - }) - .catch((e) => { - logger.logFullError(e); - process.exit(); - }); diff --git a/src/phase-management/PhaseAdvancer.js b/src/phase-management/PhaseAdvancer.js index 3a50ba66..34916519 100644 --- a/src/phase-management/PhaseAdvancer.js +++ b/src/phase-management/PhaseAdvancer.js @@ -6,7 +6,7 @@ const rulesJSON = require("./phase-rules.json"); const errors = require("../common/errors"); const helper = require("../common/helper"); -const { PhaseFact } = require("@topcoder-framework/lib-common"); +const { PhaseFact } = require('../../app-constants'); // Helper functions diff --git a/src/routes.js b/src/routes.js index 8adb7d2a..74e571c8 100644 --- a/src/routes.js +++ b/src/routes.js @@ -4,7 +4,7 @@ const constants = require("../app-constants"); const { - SCOPES: { PAYMENT, READ, CREATE, UPDATE, DELETE, ALL }, + SCOPES: { READ, CREATE, UPDATE, DELETE, ALL }, } = require("config"); module.exports = { @@ -40,19 +40,6 @@ module.exports = { method: "createRequest", }, }, - "/challenges/srms/schedule": { - get: { - controller: "ChallengeController", - method: "getSRMSchedule", - }, - }, - "/challenges/srms/practice/problems": { - get: { - controller: "ChallengeController", - method: "getPracticeProblems", - auth: "jwt", - }, - }, "/challenges/health": { get: { controller: "HealthController", @@ -112,14 +99,6 @@ module.exports = { scopes: [UPDATE, ALL], }, }, - "/challenges/:challengeId/legacy-payment": { - patch: { - controller: "ChallengeController", - method: "updateLegacyPayout", - auth: "jwt", - scopes: [PAYMENT], - }, - }, "/challenges/:challengeId/statistics": { get: { controller: "ChallengeController", diff --git a/src/scripts/check-templates.js b/src/scripts/check-templates.js index b8e50e00..e8b67b59 100644 --- a/src/scripts/check-templates.js +++ b/src/scripts/check-templates.js @@ -1,22 +1,22 @@ -const _ = require("lodash"); -const axios = require("axios"); -const TEMPLATE_ID = "2d0807fa-ece1-4328-a260-76f5f6b559e0"; // RUX challenge +const _ = require('lodash') +const axios = require('axios') +const TEMPLATE_ID = '2d0807fa-ece1-4328-a260-76f5f6b559e0' // RUX challenge // const TEMPLATE_ID = '7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c' // dev challenge // const TEMPLATE_ID = 'd4201ca4-8437-4d63-9957-3f7708184b07' // design with checkpoint -async function main() { - let res; - res = await axios.get("http://api.topcoder-dev.com/v5/timeline-templates"); - const template = _.find(res.data, (entry) => entry.id === TEMPLATE_ID); - res = await axios.get("http://api.topcoder-dev.com/v5/challenge-phases"); - const phases = res.data; +async function main () { + let res + res = await axios.get('http://api.topcoder-dev.com/v5/timeline-templates') + const template = _.find(res.data, (entry) => entry.id === TEMPLATE_ID) + res = await axios.get('http://api.topcoder-dev.com/v5/challenge-phases') + const phases = res.data _.each(template.phases, (phase) => { - const phaseInstance = _.find(phases, (p) => p.id === phase.phaseId); - const pred = phase.predecessor ? _.find(phases, (p) => p.id === phase.predecessor) : null; + const phaseInstance = _.find(phases, (p) => p.id === phase.phaseId) + const pred = phase.predecessor ? _.find(phases, (p) => p.id === phase.predecessor) : null console.log( `Phase Length: ${phase.defaultDuration / 60 / 60} hrs \t ${phaseInstance.name} - Depends on ${ - pred ? pred.name : "nothing" + pred ? pred.name : 'nothing' }` - ); - }); + ) + }) } -main(); +main() diff --git a/src/scripts/create-tables.js b/src/scripts/create-tables.js deleted file mode 100644 index 6496b4e6..00000000 --- a/src/scripts/create-tables.js +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Create table schemes in database - */ - -const models = require("../models"); -const { includes } = require("lodash"); -const logger = require("../common/logger"); - -logger.info("Requesting to create tables..."); - -const promises = []; -const skipModels = ["DynamoDB"]; - -Object.keys(models).forEach((modelName) => { - if (!includes(skipModels, modelName)) { - promises.push(models[modelName].$__.table.create()); - } else { - logger.info(`Skipping ${modelName}`); - } -}); - -Promise.all(promises) - .then(() => { - logger.info( - "All tables have been requested to be created. Creating processes is run asynchronously" - ); - process.exit(); - }) - .catch((err) => { - logger.logFullError(err); - process.exit(1); - }); diff --git a/src/scripts/drop-tables.js b/src/scripts/drop-tables.js deleted file mode 100644 index 412c864e..00000000 --- a/src/scripts/drop-tables.js +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Drop tables in database. All data will be cleared. - */ - -const models = require("../models"); -const { includes } = require("lodash"); -const logger = require("../common/logger"); - -logger.info("Requesting to delete tables..."); - -const promises = []; -const skipModels = ["DynamoDB"]; - -Object.keys(models).forEach((modelName) => { - if (!includes(skipModels, modelName)) { - promises.push(models[modelName].$__.table.delete()); - } else { - logger.info(`Skipping ${modelName}`); - } -}); - -Promise.all(promises) - .then(() => { - logger.info( - "All tables have been requested to be deleted. Deleting processes is run asynchronously" - ); - process.exit(); - }) - .catch((err) => { - logger.logFullError(err); - process.exit(1); - }); diff --git a/src/scripts/seed-tables.js b/src/scripts/seed-tables.js index 8a259fd6..245ba1dd 100644 --- a/src/scripts/seed-tables.js +++ b/src/scripts/seed-tables.js @@ -1,36 +1,71 @@ /** * Insert seed data to tables in database */ +const _ = require('lodash'); +const util = require('util') +const uuid = require('uuid/v4') +const logger = require('../common/logger') +const prismaHelper = require("../common/prisma-helper"); -const { get, includes } = require("lodash"); -const models = require("../models"); -const logger = require("../common/logger"); +logger.info('Requesting to insert seed data to the tables...') -logger.info("Requesting to insert seed data to the tables..."); +const { getClient } = require('../common/prisma') -const promises = []; -const skipModels = []; +const prisma = getClient() -Object.keys(models).forEach((modelName) => { - if (includes(skipModels, modelName)) { - logger.warn(`Skipping Seed Model ${modelName}`); - return; - } - try { - const data = require(`./seed/${modelName}.json`); - logger.info(`Inserting ${get(data, "length")} records in table ${modelName}`); - promises.push(models[modelName].batchPut(data)); - } catch (e) { - logger.warn(`No records will be inserted in table ${modelName}`); - } -}); +async function importModel (filename, model) { + const data = require(`./seed/${filename}.json`) + await model.createMany({ data }) + logger.info(`Importing ${filename} complete`) +} -Promise.all(promises) - .then(() => { - logger.info("All tables have been inserted with the data. The processes is run asynchronously"); - process.exit(); +async function importTimelineTemplate () { + const data = require('./seed/TimelineTemplate.json') + let allPhases = [] + data.forEach(d => { + const phases = d.phases + delete d.phases + phases.forEach(p => { + p.timelineTemplateId = d.id + Object.assign(p, { + createdAt: '2025-03-10T13:08:02.378Z', + createdBy: 'topcoder user', + updatedAt: '2025-03-10T13:08:02.378Z', + updatedBy: 'topcoder user' + }) + }) + allPhases = allPhases.concat(phases) }) - .catch((err) => { - logger.logFullError(err); - process.exit(1); + await prisma.timelineTemplate.createMany({ data }) + logger.info('Importing TimelineTemplate complete') + await prisma.timelineTemplatePhase.createMany({ data: allPhases }) + logger.info('Importing TimelineTemplatePhase complete') +} + +async function importChallenge () { + await prisma.challenge.deleteMany() + const data = require('./seed/Challenge.json') + let prismaData = _.map(data, d => { + return prismaHelper.convertChallengeSchemaToPrisma({userId: 'topcoder user'}, d); }); + for (let d of prismaData) { + await prisma.challenge.create({data: d}) + } +} + +async function main () { + await importModel('ChallengeTrack', prisma.challengeTrack) + await importModel('ChallengeType', prisma.challengeType) + await importModel('Phase', prisma.phase) + await importTimelineTemplate() + await importModel('ChallengeTimelineTemplate', prisma.challengeTimelineTemplate) + await importChallenge() +} + +main().then(() => { + logger.info('All tables have been inserted with the data. The processes is run asynchronously') + process.exit(0) +}).catch(err => { + logger.logFullError(err) + process.exit(1) +}) diff --git a/src/scripts/seed/Challenge.json b/src/scripts/seed/Challenge.json new file mode 100644 index 00000000..880c6b7d --- /dev/null +++ b/src/scripts/seed/Challenge.json @@ -0,0 +1,3331 @@ +[ + { + "id": "54f5ed28-6acf-4f25-a8b0-e529150adf79", + "name": "Marathon Match Leaderboard Test challenge", + "typeId": "929bc408-9cf2-4b3e-ba71-adfbf693046c", + "trackId": "9b6fc876-f4d9-4ccb-9dfd-419247628825", + "legacy": { + "track": "DATA_SCIENCE", + "subTrack": "MARATHON_MATCH", + "forumId": 0, + "directProjectId": 33413, + "reviewType": "COMMUNITY", + "confidentialityType": "public", + "pureV5Task": false, + "reviewScorecardId": 30001610 + }, + "description": "Test", + "descriptionFormat": "markdown", + "metadata": [ + { + "name": "show_data_dashboard", + "value": "false" + } + ], + "timelineTemplateId": "6969125a-a12f-4b89-8de6-e66b0056f36b", + "phases": [ + { + "duration": 1209600, + "scheduledEndDate": "2025-04-04T04:29:00.000Z", + "isOpen": true, + "name": "Registration", + "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", + "actualStartDate": "2025-03-21T04:29:51.000Z", + "description": "Registration Phase", + "id": "20eeece9-4ee0-4531-8ff4-a97ed6ca9762", + "constraints": [ + { + "name": "Number of Registrants", + "value": 1 + } + ], + "scheduledStartDate": "2025-03-21T04:29:51.000Z" + }, + { + "duration": 1209600, + "scheduledEndDate": "2025-04-04T04:38:00.000Z", + "isOpen": true, + "name": "Submission", + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "actualStartDate": "2025-03-21T04:38:22.000Z", + "description": "Submission Phase", + "id": "fe6e484b-ec8c-412d-a88c-73c26756d0be", + "constraints": [], + "scheduledStartDate": "2025-03-21T04:38:22.000Z" + }, + { + "duration": 604800, + "scheduledEndDate": "2025-04-11T04:38:00.000Z", + "isOpen": false, + "name": "Review", + "phaseId": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "description": "Review Phase", + "id": "cdb8b363-34ac-4f29-a3bb-0b23142beb2b", + "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "constraints": [ + { + "name": "Scorecard", + "value": 30001610 + }, + { + "name": "Number of Reviewers", + "value": 2 + } + ], + "scheduledStartDate": "2025-04-04T04:38:00.000Z" + } + ], + "events": [{ + "id": 2025, + "name": "TCO25", + "key": "TCO25" + }], + "terms": [ + { + "roleId": "732339e7-8e30-49d7-9198-cccf9451e221", + "id": "317cd8f9-d66c-4f2a-8774-63c612d99cd4" + } + ], + "prizeSets": [ + { + "prizes": [ + { + "type": "USD", + "value": 1 + } + ], + "type": "placement" + } + ], + "tags": [], + "projectId": 100315, + "startDate": "2025-03-21T04:29:51.000Z", + "endDate": "2025-04-11T04:38:00.000Z", + "status": "Active", + "attachments": [], + "groups": [], + "discussions": [ + { + "provider": "vanilla", + "name": "Marathon Match Leaderboard Test challenge Discussion", + "id": "fac1678e-952e-4afc-8ee7-e7fcfaa2fa2d", + "type": "challenge" + } + ], + "createdBy": "mess", + "updatedBy": "tcwebservice", + "created": "2025-03-21T04:27:23.771Z", + "updated": "2025-03-21T04:38:23.116Z", + "overview": { + "totalPrizes": 1, + "type": "USD" + }, + "numOfSubmissions": 30, + "numOfRegistrants": 28, + "currentPhaseNames": [ + "Registration", + "Submission" + ], + "registrationStartDate": "2025-03-21T04:29:51.228Z", + "registrationEndDate": "2025-04-04T04:29:00.000Z", + "submissionStartDate": "2025-03-21T04:38:22.000Z", + "submissionEndDate": "2025-04-04T04:38:00.000Z", + "track": "Development", + "type": "Marathon Match", + "legacyId": 30096757, + "currentPhase": { + "duration": 1209600, + "scheduledEndDate": "2025-04-04T04:38:00.000Z", + "isOpen": true, + "name": "Submission", + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "actualStartDate": "2025-03-21T04:38:22.000Z", + "description": "Submission Phase", + "id": "fe6e484b-ec8c-412d-a88c-73c26756d0be", + "constraints": [], + "scheduledStartDate": "2025-03-21T04:38:22.000Z" + }, + "numOfCheckpointSubmissions": 0 + }, + { + "id": "3f5a35ea-ff30-45e8-b9f2-6c7546497bb5", + "name": "Artifcat MM", + "typeId": "929bc408-9cf2-4b3e-ba71-adfbf693046c", + "trackId": "c0f5d461-8219-4c14-878a-c3a3f356466d", + "legacy": { + "track": "DATA_SCIENCE", + "subTrack": "MARATHON_MATCH", + "forumId": 0, + "directProjectId": 33413, + "reviewType": "COMMUNITY", + "confidentialityType": "public", + "pureV5Task": false, + "reviewScorecardId": 30001610 + }, + "description": "test", + "descriptionFormat": "markdown", + "metadata": [], + "timelineTemplateId": "6969125a-a12f-4b89-8de6-e66b0056f36b", + "phases": [ + { + "duration": 1209600, + "scheduledEndDate": "2025-04-01T07:03:00.000Z", + "isOpen": true, + "name": "Registration", + "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", + "actualStartDate": "2025-03-18T07:03:23.000Z", + "description": "Registration Phase", + "id": "d73119be-bb12-457d-86cb-af35fb99751e", + "constraints": [ + { + "name": "Number of Registrants", + "value": 1 + } + ], + "scheduledStartDate": "2025-03-18T07:03:23.000Z" + }, + { + "duration": 1209600, + "scheduledEndDate": "2025-04-01T07:07:00.000Z", + "isOpen": true, + "name": "Submission", + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "actualStartDate": "2025-03-18T07:07:50.000Z", + "description": "Submission Phase", + "id": "eaec2745-cd8f-4d72-af51-52f3a3a41cc1", + "constraints": [], + "scheduledStartDate": "2025-03-18T07:07:50.000Z" + }, + { + "duration": 604800, + "scheduledEndDate": "2025-04-08T07:07:00.000Z", + "isOpen": false, + "name": "Review", + "phaseId": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "description": "Review Phase", + "id": "5f961e34-5339-4c76-bd85-435c7d3405a8", + "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "constraints": [ + { + "name": "Scorecard", + "value": 30001031 + }, + { + "name": "Number of Reviewers", + "value": 2 + } + ], + "scheduledStartDate": "2025-04-01T07:07:00.000Z" + } + ], + "events": [], + "terms": [ + { + "roleId": "732339e7-8e30-49d7-9198-cccf9451e221", + "id": "317cd8f9-d66c-4f2a-8774-63c612d99cd4" + } + ], + "prizeSets": [ + { + "prizes": [ + { + "type": "USD", + "value": 1 + } + ], + "type": "placement" + }, + { + "prizes": [ + { + "type": "USD", + "value": 1 + } + ], + "type": "copilot" + } + ], + "tags": [], + "projectId": 100315, + "startDate": "2025-03-18T07:03:23.000Z", + "endDate": "2025-04-08T07:07:00.000Z", + "status": "Active", + "attachments": [], + "groups": [], + "discussions": [ + { + "provider": "vanilla", + "name": "Artifcat MM Discussion", + "id": "002e4c2a-70d2-49e4-af3f-111f032ff81f", + "type": "challenge" + } + ], + "createdBy": "jcori", + "updatedBy": "tcwebservice", + "created": "2025-03-18T07:02:57.590Z", + "updated": "2025-03-18T07:07:50.774Z", + "overview": { + "totalPrizes": 1, + "type": "USD" + }, + "numOfSubmissions": 3, + "numOfRegistrants": 2, + "currentPhaseNames": [ + "Registration", + "Submission" + ], + "registrationStartDate": "2025-03-18T07:03:23.498Z", + "registrationEndDate": "2025-04-01T07:03:00.000Z", + "submissionStartDate": "2025-03-18T07:07:50.000Z", + "submissionEndDate": "2025-04-01T07:07:00.000Z", + "track": "Data Science", + "type": "Marathon Match", + "legacyId": 30096756, + "currentPhase": { + "duration": 1209600, + "scheduledEndDate": "2025-04-01T07:07:00.000Z", + "isOpen": true, + "name": "Submission", + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "actualStartDate": "2025-03-18T07:07:50.000Z", + "description": "Submission Phase", + "id": "eaec2745-cd8f-4d72-af51-52f3a3a41cc1", + "constraints": [], + "scheduledStartDate": "2025-03-18T07:07:50.000Z" + }, + "numOfCheckpointSubmissions": 0 + }, + { + "id": "856139b6-29d7-42c8-995f-2bca5b7b31bb", + "name": "Artifact 1 dev chl", + "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", + "trackId": "9b6fc876-f4d9-4ccb-9dfd-419247628825", + "legacy": { + "track": "DEVELOP", + "subTrack": "CODE", + "forumId": 0, + "directProjectId": 33413, + "reviewType": "COMMUNITY", + "confidentialityType": "public", + "pureV5Task": false, + "reviewScorecardId": 30002133 + }, + "description": "test", + "descriptionFormat": "markdown", + "metadata": [ + { + "name": "show_data_dashboard", + "value": "false" + } + ], + "timelineTemplateId": "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c", + "phases": [ + { + "duration": 432000, + "scheduledEndDate": "2025-03-23T07:02:00.000Z", + "isOpen": true, + "name": "Registration", + "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", + "actualStartDate": "2025-03-18T07:02:33.000Z", + "description": "Registration Phase", + "id": "01e3965a-0291-4829-bc03-d969026d3dfa", + "constraints": [ + { + "name": "Number of Registrants", + "value": 1 + } + ], + "scheduledStartDate": "2025-03-18T07:02:33.000Z" + }, + { + "duration": 432000, + "scheduledEndDate": "2025-03-23T07:07:00.000Z", + "isOpen": true, + "name": "Submission", + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "actualStartDate": "2025-03-18T07:07:43.000Z", + "description": "Submission Phase", + "id": "9950bada-de11-455e-8aec-cc9726a1ef08", + "constraints": [], + "scheduledStartDate": "2025-03-18T07:07:43.000Z" + }, + { + "duration": 172800, + "scheduledEndDate": "2025-03-25T07:07:00.000Z", + "isOpen": false, + "name": "Review", + "phaseId": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "description": "Review Phase", + "id": "66306acc-bf1d-4650-bff5-1fe5c37ba5f1", + "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "constraints": [ + { + "name": "Scorecard", + "value": 30001031 + }, + { + "name": "Number of Reviewers", + "value": 2 + } + ], + "scheduledStartDate": "2025-03-23T07:07:00.000Z" + }, + { + "duration": 86400, + "scheduledEndDate": "2025-03-26T07:07:00.000Z", + "isOpen": false, + "name": "Appeals", + "phaseId": "1c24cfb3-5b0a-4dbd-b6bd-4b0dff5349c6", + "description": "Appeals Phase", + "id": "90466a31-e669-40f4-b5c0-d747b57f0eee", + "predecessor": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "constraints": [ + { + "name": "View Response During Appeals", + "value": 0 + } + ], + "scheduledStartDate": "2025-03-25T07:07:00.000Z" + }, + { + "duration": 43200, + "scheduledEndDate": "2025-03-26T19:07:00.000Z", + "isOpen": false, + "name": "Appeals Response", + "phaseId": "797a6af7-cd3f-4436-9fca-9679f773bee9", + "description": "Appeals Response Phase", + "id": "a1b5ba04-32a2-4700-9709-6c77c021c656", + "predecessor": "1c24cfb3-5b0a-4dbd-b6bd-4b0dff5349c6", + "constraints": [], + "scheduledStartDate": "2025-03-26T07:07:00.000Z" + } + ], + "events": [], + "terms": [ + { + "roleId": "732339e7-8e30-49d7-9198-cccf9451e221", + "id": "317cd8f9-d66c-4f2a-8774-63c612d99cd4" + } + ], + "prizeSets": [ + { + "prizes": [ + { + "type": "USD", + "value": 1 + } + ], + "type": "copilot" + }, + { + "prizes": [ + { + "type": "USD", + "value": 1 + } + ], + "type": "placement" + } + ], + "tags": [], + "projectId": 100315, + "startDate": "2025-03-18T07:02:33.000Z", + "endDate": "2025-03-26T19:07:00.000Z", + "status": "Active", + "attachments": [], + "groups": [], + "discussions": [ + { + "provider": "vanilla", + "name": "Artifact 1 dev chl Discussion", + "id": "bbf78e92-6214-4fae-bf45-5f27eda26b33", + "type": "challenge", + "url": "https://vanilla.topcoder-dev.com/categories/856139b6-29d7-42c8-995f-2bca5b7b31bb" + } + ], + "createdBy": "jcori", + "updatedBy": "tcwebservice", + "created": "2025-03-18T07:02:02.997Z", + "updated": "2025-03-18T07:07:43.917Z", + "overview": { + "totalPrizes": 1, + "type": "USD" + }, + "numOfSubmissions": 2, + "numOfRegistrants": 2, + "currentPhaseNames": [ + "Registration", + "Submission" + ], + "registrationStartDate": "2025-03-18T07:02:33.513Z", + "registrationEndDate": "2025-03-23T07:02:00.000Z", + "submissionStartDate": "2025-03-18T07:07:43.000Z", + "submissionEndDate": "2025-03-23T07:07:00.000Z", + "track": "Development", + "type": "Challenge", + "legacyId": 30096755, + "currentPhase": { + "duration": 432000, + "scheduledEndDate": "2025-03-23T07:07:00.000Z", + "isOpen": true, + "name": "Submission", + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "actualStartDate": "2025-03-18T07:07:43.000Z", + "description": "Submission Phase", + "id": "9950bada-de11-455e-8aec-cc9726a1ef08", + "constraints": [], + "scheduledStartDate": "2025-03-18T07:07:43.000Z" + }, + "numOfCheckpointSubmissions": 0 + }, + { + "id": "1278d9c9-b617-4292-a2f0-51d9bc172caa", + "name": "March 18 artifact test", + "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", + "trackId": "9b6fc876-f4d9-4ccb-9dfd-419247628825", + "legacy": { + "track": "DEVELOP", + "subTrack": "CODE", + "forumId": 0, + "directProjectId": 33413, + "reviewType": "COMMUNITY", + "confidentialityType": "public", + "pureV5Task": false, + "reviewScorecardId": 30002133 + }, + "description": "test", + "descriptionFormat": "markdown", + "metadata": [ + { + "name": "show_data_dashboard", + "value": "false" + } + ], + "timelineTemplateId": "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c", + "phases": [ + { + "duration": 432000, + "scheduledEndDate": "2025-03-23T03:46:00.000Z", + "isOpen": true, + "name": "Registration", + "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", + "actualStartDate": "2025-03-18T03:46:13.000Z", + "description": "Registration Phase", + "id": "cce3ac00-983d-4942-a9e5-e9cf48468d7c", + "constraints": [ + { + "name": "Number of Registrants", + "value": 1 + } + ], + "scheduledStartDate": "2025-03-18T03:46:13.000Z" + }, + { + "duration": 432000, + "scheduledEndDate": "2025-03-23T03:51:00.000Z", + "isOpen": true, + "name": "Submission", + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "actualStartDate": "2025-03-18T03:51:45.000Z", + "description": "Submission Phase", + "id": "89149e4f-84f0-43bd-8a08-c7dfeffeeeae", + "constraints": [], + "scheduledStartDate": "2025-03-18T03:51:45.000Z" + }, + { + "duration": 172800, + "scheduledEndDate": "2025-03-25T03:51:00.000Z", + "isOpen": false, + "name": "Review", + "phaseId": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "description": "Review Phase", + "id": "06717419-bd54-4c45-851b-539e5e5e2aa4", + "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "constraints": [ + { + "name": "Scorecard", + "value": 30001031 + }, + { + "name": "Number of Reviewers", + "value": 2 + } + ], + "scheduledStartDate": "2025-03-23T03:51:00.000Z" + }, + { + "duration": 86400, + "scheduledEndDate": "2025-03-26T03:51:00.000Z", + "isOpen": false, + "name": "Appeals", + "phaseId": "1c24cfb3-5b0a-4dbd-b6bd-4b0dff5349c6", + "description": "Appeals Phase", + "id": "91f058eb-917f-4cc5-8147-1c71c21eb1cc", + "predecessor": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "constraints": [ + { + "name": "View Response During Appeals", + "value": 0 + } + ], + "scheduledStartDate": "2025-03-25T03:51:00.000Z" + }, + { + "duration": 43200, + "scheduledEndDate": "2025-03-26T15:51:00.000Z", + "isOpen": false, + "name": "Appeals Response", + "phaseId": "797a6af7-cd3f-4436-9fca-9679f773bee9", + "description": "Appeals Response Phase", + "id": "64b8b922-2370-4404-a993-c4ca8cb16cb8", + "predecessor": "1c24cfb3-5b0a-4dbd-b6bd-4b0dff5349c6", + "constraints": [], + "scheduledStartDate": "2025-03-26T03:51:00.000Z" + } + ], + "events": [], + "terms": [ + { + "roleId": "732339e7-8e30-49d7-9198-cccf9451e221", + "id": "317cd8f9-d66c-4f2a-8774-63c612d99cd4" + } + ], + "prizeSets": [ + { + "prizes": [ + { + "type": "USD", + "value": 1 + } + ], + "type": "placement" + }, + { + "prizes": [ + { + "type": "USD", + "value": 1 + } + ], + "type": "copilot" + } + ], + "tags": [], + "projectId": 100315, + "startDate": "2025-03-18T03:46:13.000Z", + "endDate": "2025-03-26T15:51:00.000Z", + "status": "Active", + "attachments": [], + "groups": [], + "discussions": [ + { + "provider": "vanilla", + "name": "March 18 artifact test Discussion", + "id": "2d10f18d-82d0-4322-a17e-a84f5071c7eb", + "type": "challenge", + "url": "https://vanilla.topcoder-dev.com/categories/1278d9c9-b617-4292-a2f0-51d9bc172caa" + } + ], + "createdBy": "jcori", + "updatedBy": "tcwebservice", + "created": "2025-03-18T03:45:39.452Z", + "updated": "2025-03-18T03:51:45.272Z", + "overview": { + "totalPrizes": 1, + "type": "USD" + }, + "numOfSubmissions": 3, + "numOfRegistrants": 1, + "currentPhaseNames": [ + "Registration", + "Submission" + ], + "registrationStartDate": "2025-03-18T03:46:13.166Z", + "registrationEndDate": "2025-03-23T03:46:00.000Z", + "submissionStartDate": "2025-03-18T03:51:45.000Z", + "submissionEndDate": "2025-03-23T03:51:00.000Z", + "track": "Development", + "type": "Challenge", + "legacyId": 30096754, + "currentPhase": { + "duration": 432000, + "scheduledEndDate": "2025-03-23T03:51:00.000Z", + "isOpen": true, + "name": "Submission", + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "actualStartDate": "2025-03-18T03:51:45.000Z", + "description": "Submission Phase", + "id": "89149e4f-84f0-43bd-8a08-c7dfeffeeeae", + "constraints": [], + "scheduledStartDate": "2025-03-18T03:51:45.000Z" + }, + "numOfCheckpointSubmissions": 0 + }, + { + "id": "b5c2d356-b91e-49e0-a0f1-9476aea63a14", + "name": "Design CH Mar 18", + "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", + "trackId": "5fa04185-041f-49a6-bfd1-fe82533cd6c8", + "legacy": { + "track": "DESIGN", + "subTrack": "WEB_DESIGNS", + "forumId": 0, + "directProjectId": 33413, + "reviewType": "INTERNAL", + "confidentialityType": "public", + "pureV5Task": false, + "screeningScorecardId": 30001610, + "reviewScorecardId": 30001610 + }, + "description": "Test", + "descriptionFormat": "markdown", + "metadata": [], + "timelineTemplateId": "918f6a3e-1a63-4680-8b5e-deb95b1411e7", + "phases": [ + { + "duration": 518400, + "scheduledEndDate": "2025-03-24T03:06:00.000Z", + "isOpen": true, + "name": "Registration", + "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", + "actualStartDate": "2025-03-18T03:06:55.000Z", + "description": "Registration Phase", + "id": "8f257b77-79eb-4e08-b296-55800a45902b", + "constraints": [ + { + "name": "Number of Registrants", + "value": 1 + } + ], + "scheduledStartDate": "2025-03-18T03:06:55.000Z" + }, + { + "duration": 518400, + "scheduledEndDate": "2025-03-24T03:12:00.000Z", + "isOpen": true, + "name": "Submission", + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "actualStartDate": "2025-03-18T03:12:51.000Z", + "description": "Submission Phase", + "id": "b84e4278-a380-49cc-aa96-6ea1596f9ccc", + "constraints": [], + "scheduledStartDate": "2025-03-18T03:12:51.000Z" + }, + { + "duration": 14400, + "scheduledEndDate": "2025-03-24T07:12:00.000Z", + "isOpen": false, + "name": "Screening", + "phaseId": "2d7d3d85-0b29-4989-b3b4-be7f2b1d0aa6", + "description": "Screening Phase", + "id": "43b7c08e-adef-42ed-b0da-98019f02276d", + "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "constraints": [ + { + "name": "Scorecard", + "value": 30000344 + } + ], + "scheduledStartDate": "2025-03-24T03:12:00.000Z" + }, + { + "duration": 432000, + "scheduledEndDate": "2025-03-29T07:12:00.000Z", + "isOpen": false, + "name": "Review", + "phaseId": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "description": "Review Phase", + "id": "a4f4ad37-94f7-41d9-8c2b-13cf86a2a1fc", + "predecessor": "2d7d3d85-0b29-4989-b3b4-be7f2b1d0aa6", + "constraints": [ + { + "name": "Scorecard", + "value": 30000160 + }, + { + "name": "Number of Reviewers", + "value": 2 + } + ], + "scheduledStartDate": "2025-03-24T07:12:00.000Z" + }, + { + "duration": 172800, + "scheduledEndDate": "2025-03-31T07:12:00.000Z", + "isOpen": false, + "name": "Approval", + "phaseId": "ad985cff-ad3e-44de-b54e-3992505ba0ae", + "description": "Approval Phase", + "id": "453b9b67-a19c-4dab-99a7-601b7bba108f", + "predecessor": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "constraints": [ + { + "name": "Scorecard", + "value": 30000720 + }, + { + "name": "Number of Reviewers", + "value": 1 + } + ], + "scheduledStartDate": "2025-03-29T07:12:00.000Z" + } + ], + "events": [], + "terms": [ + { + "roleId": "732339e7-8e30-49d7-9198-cccf9451e221", + "id": "317cd8f9-d66c-4f2a-8774-63c612d99cd4" + } + ], + "prizeSets": [ + { + "prizes": [ + { + "type": "USD", + "value": 100 + } + ], + "type": "placement" + } + ], + "tags": [ + "Web Design" + ], + "projectId": 100315, + "startDate": "2025-03-18T03:06:55.000Z", + "endDate": "2025-03-31T07:12:00.000Z", + "status": "Active", + "attachments": [], + "groups": [], + "discussions": [ + { + "provider": "vanilla", + "name": "Design CH Mar 18 Discussion", + "id": "8617b8b1-646b-4596-a582-7bf110c2b0f8", + "type": "challenge", + "url": "https://vanilla.topcoder-dev.com/categories/b5c2d356-b91e-49e0-a0f1-9476aea63a14" + } + ], + "createdBy": "mess", + "updatedBy": "tcwebservice", + "created": "2025-03-18T03:05:03.386Z", + "updated": "2025-03-18T03:12:52.235Z", + "overview": { + "totalPrizes": 100, + "type": "USD" + }, + "numOfSubmissions": 2, + "numOfRegistrants": 2, + "currentPhaseNames": [ + "Registration", + "Submission" + ], + "registrationStartDate": "2025-03-18T03:05:00.000Z", + "registrationEndDate": "2025-03-24T03:06:00.000Z", + "submissionStartDate": "2025-03-18T03:12:51.000Z", + "submissionEndDate": "2025-03-24T03:12:00.000Z", + "track": "Design", + "type": "Challenge", + "legacyId": 30096753, + "currentPhase": { + "duration": 518400, + "scheduledEndDate": "2025-03-24T03:12:00.000Z", + "isOpen": true, + "name": "Submission", + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "actualStartDate": "2025-03-18T03:12:51.000Z", + "description": "Submission Phase", + "id": "b84e4278-a380-49cc-aa96-6ea1596f9ccc", + "constraints": [], + "scheduledStartDate": "2025-03-18T03:12:51.000Z" + }, + "numOfCheckpointSubmissions": 0 + }, + { + "id": "a537c08d-1e07-467e-8c1d-86fa7e6b0492", + "legacyId": 30096752, + "name": "Test Development - Task", + "typeId": "ecd58c69-238f-43a4-a4bb-d172719b9f31", + "trackId": "9b6fc876-f4d9-4ccb-9dfd-419247628825", + "legacy": { + "track": "DEVELOP", + "subTrack": "FIRST_2_FINISH", + "forumId": 0, + "directProjectId": 33413, + "reviewType": "COMMUNITY", + "confidentialityType": "public", + "reviewScorecardId": 30001551, + "pureV5Task": true + }, + "description": "description", + "descriptionFormat": "markdown", + "metadata": [], + "task": { + "isTask": true, + "isAssigned": false, + "memberId": 0 + }, + "timelineTemplateId": "53a307ce-b4b3-4d6f-b9a1-3741a58f77e6", + "phases": [ + { + "duration": 864000, + "scheduledStartDate": "2020-08-15T05:10:35.000Z", + "scheduledEndDate": "2020-08-25T05:10:35.000Z", + "name": "Registration", + "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", + "id": "42153912-1cba-4d89-b02a-27f19ec5c403", + "isOpen": false, + "constraints": [ + { + "name": "Number of Registrants", + "value": 1 + } + ], + "description": "Registration Phase" + }, + { + "duration": 86400, + "scheduledStartDate": "2020-08-15T05:15:35.000Z", + "scheduledEndDate": "2020-08-16T05:15:35.000Z", + "name": "Submission", + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "id": "efb2d97e-3891-4ffe-8f60-d89576700a87", + "isOpen": false, + "constraints": [], + "description": "Submission Phase" + }, + { + "duration": 86400, + "scheduledStartDate": "2020-08-15T05:15:35.000Z", + "scheduledEndDate": "2020-08-16T05:15:35.000Z", + "name": "Iterative Review", + "phaseId": "003a4b14-de5d-43fc-9e35-835dbeb6af1f", + "id": "f7e3daae-a98a-43bd-9d38-eca05996a679", + "isOpen": false, + "constraints": [ + { + "name": "Scorecard", + "value": 30001551 + }, + { + "name": "Number of Reviewers", + "value": 1 + } + ], + "description": "Iterative Review Phase", + "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49" + } + ], + "events": [], + "terms": [], + "prizeSets": [ + { + "type": "placement", + "description": "Challenge Prizes", + "prizes": [ + { + "value": 1, + "type": "USD" + } + ] + } + ], + "tags": [ + "Heroku" + ], + "projectId": 100315, + "startDate": "2020-08-15T05:10:35.000Z", + "endDate": "2020-08-16T05:15:35.000Z", + "status": "Draft", + "attachments": [], + "groups": [], + "discussions": [], + "createdBy": "mess", + "updatedBy": "mess", + "created": "2025-03-17T06:20:38.023Z", + "updated": "2025-03-17T06:20:38.023Z", + "overview": { + "totalPrizes": 1, + "type": "USD" + }, + "numOfSubmissions": 0, + "numOfRegistrants": 0, + "currentPhaseNames": [], + "registrationStartDate": "2020-08-15T05:10:35.000Z", + "registrationEndDate": "2020-08-25T05:10:35.000Z", + "submissionStartDate": "2020-08-15T05:15:35.000Z", + "submissionEndDate": "2020-08-16T05:15:35.000Z", + "track": "Development", + "type": "Task" + }, + { + "id": "5bfe6e95-8cec-4415-84aa-c9dc3a6565bb", + "name": "test", + "typeId": "dc876fa4-ef2d-4eee-b701-b555fcc6544c", + "trackId": "9b6fc876-f4d9-4ccb-9dfd-419247628825", + "legacy": { + "track": "DEVELOP", + "subTrack": "FIRST_2_FINISH", + "forumId": 0, + "directProjectId": 33413, + "reviewType": "COMMUNITY", + "confidentialityType": "public", + "pureV5Task": false, + "reviewScorecardId": 30001551 + }, + "description": "test", + "descriptionFormat": "markdown", + "metadata": [], + "timelineTemplateId": "0a0fed34-cb5a-47f5-b0cb-6e2ee7de8dcb", + "phases": [ + { + "duration": 2592000, + "scheduledEndDate": "2025-04-17T06:19:29.000Z", + "isOpen": false, + "name": "Registration", + "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", + "description": "Registration Phase", + "id": "f102636b-c072-4e0a-a47b-856f1c47cd5b", + "constraints": [ + { + "name": "Number of Registrants", + "value": 1 + } + ], + "scheduledStartDate": "2025-03-18T06:19:29.000Z" + }, + { + "duration": 2592000, + "scheduledEndDate": "2025-04-17T06:24:29.000Z", + "isOpen": false, + "name": "Submission", + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "description": "Submission Phase", + "id": "744fdf2f-88bc-47e9-98db-01b0f3e8017b", + "constraints": [], + "scheduledStartDate": "2025-03-18T06:24:29.000Z" + }, + { + "duration": 86400, + "scheduledEndDate": "2025-03-19T06:24:29.000Z", + "isOpen": false, + "name": "Iterative Review", + "phaseId": "003a4b14-de5d-43fc-9e35-835dbeb6af1f", + "description": "Iterative Review Phase", + "id": "f48da09c-3056-4f4c-9328-64c4031d6293", + "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "constraints": [ + { + "name": "Scorecard", + "value": 30001551 + }, + { + "name": "Number of Reviewers", + "value": 1 + } + ], + "scheduledStartDate": "2025-03-18T06:24:29.000Z" + } + ], + "events": [], + "terms": [ + { + "roleId": "732339e7-8e30-49d7-9198-cccf9451e221", + "id": "317cd8f9-d66c-4f2a-8774-63c612d99cd4" + } + ], + "prizeSets": [ + { + "prizes": [ + { + "type": "USD", + "value": 1 + } + ], + "type": "copilot" + }, + { + "prizes": [ + { + "type": "USD", + "value": 1 + } + ], + "type": "placement" + } + ], + "tags": [], + "projectId": 100315, + "startDate": "2025-03-18T06:19:29.000Z", + "endDate": "2025-03-19T06:24:29.000Z", + "status": "Draft", + "attachments": [], + "groups": [], + "discussions": [ + { + "provider": "vanilla", + "name": "test Discussion", + "id": "adbe7b8e-e3bc-4dee-8c11-c1b8204b7234", + "type": "challenge", + "url": "https://vanilla.topcoder-dev.com/categories/5bfe6e95-8cec-4415-84aa-c9dc3a6565bb" + } + ], + "createdBy": "mess", + "updatedBy": "mess", + "created": "2025-03-17T06:19:30.757Z", + "updated": "2025-03-17T06:19:30.757Z", + "overview": { + "totalPrizes": 1, + "type": "USD" + }, + "numOfSubmissions": 0, + "numOfRegistrants": 0, + "currentPhaseNames": [], + "registrationStartDate": "2025-03-18T06:19:29.000Z", + "registrationEndDate": "2025-04-17T06:19:29.000Z", + "submissionStartDate": "2025-03-18T06:24:29.000Z", + "submissionEndDate": "2025-04-17T06:24:29.000Z", + "track": "Development", + "type": "First2Finish", + "legacyId": 30096751 + }, + { + "id": "08cb4122-72c9-4757-8222-4a330f1d43ba", + "name": "Artifact test 17 Mar", + "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", + "trackId": "9b6fc876-f4d9-4ccb-9dfd-419247628825", + "legacy": { + "track": "DEVELOP", + "subTrack": "CODE", + "forumId": 0, + "directProjectId": 33413, + "reviewType": "COMMUNITY", + "confidentialityType": "public", + "pureV5Task": false, + "reviewScorecardId": 30002133 + }, + "description": "test", + "descriptionFormat": "markdown", + "metadata": [ + { + "name": "show_data_dashboard", + "value": "false" + } + ], + "timelineTemplateId": "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c", + "phases": [ + { + "duration": 432000, + "scheduledEndDate": "2025-03-22T04:18:00.000Z", + "isOpen": true, + "name": "Registration", + "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", + "actualStartDate": "2025-03-17T04:18:50.000Z", + "description": "Registration Phase", + "id": "b20f3520-b774-4185-b9b7-5a950ff0ad6d", + "constraints": [ + { + "name": "Number of Registrants", + "value": 1 + } + ], + "scheduledStartDate": "2025-03-17T04:18:50.000Z" + }, + { + "duration": 432000, + "scheduledEndDate": "2025-03-22T04:28:00.000Z", + "isOpen": true, + "name": "Submission", + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "actualStartDate": "2025-03-17T04:28:02.000Z", + "description": "Submission Phase", + "id": "f6a8b620-b878-49d9-901f-1ce0cc14c005", + "constraints": [], + "scheduledStartDate": "2025-03-17T04:28:02.000Z" + }, + { + "duration": 172800, + "scheduledEndDate": "2025-03-24T04:28:00.000Z", + "isOpen": false, + "name": "Review", + "phaseId": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "description": "Review Phase", + "id": "00a45e99-5c98-4b35-aaa0-77c688a2284c", + "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "constraints": [ + { + "name": "Scorecard", + "value": 30001031 + }, + { + "name": "Number of Reviewers", + "value": 2 + } + ], + "scheduledStartDate": "2025-03-22T04:28:00.000Z" + }, + { + "duration": 86400, + "scheduledEndDate": "2025-03-25T04:28:00.000Z", + "isOpen": false, + "name": "Appeals", + "phaseId": "1c24cfb3-5b0a-4dbd-b6bd-4b0dff5349c6", + "description": "Appeals Phase", + "id": "5df2614e-7073-4a34-a90c-71617f4bb91c", + "predecessor": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "constraints": [ + { + "name": "View Response During Appeals", + "value": 0 + } + ], + "scheduledStartDate": "2025-03-24T04:28:00.000Z" + }, + { + "duration": 43200, + "scheduledEndDate": "2025-03-25T16:28:00.000Z", + "isOpen": false, + "name": "Appeals Response", + "phaseId": "797a6af7-cd3f-4436-9fca-9679f773bee9", + "description": "Appeals Response Phase", + "id": "9e7d164a-9db3-46ef-928d-48e43e69130e", + "predecessor": "1c24cfb3-5b0a-4dbd-b6bd-4b0dff5349c6", + "constraints": [], + "scheduledStartDate": "2025-03-25T04:28:00.000Z" + } + ], + "events": [], + "terms": [ + { + "roleId": "732339e7-8e30-49d7-9198-cccf9451e221", + "id": "317cd8f9-d66c-4f2a-8774-63c612d99cd4" + } + ], + "prizeSets": [ + { + "prizes": [ + { + "type": "USD", + "value": 1 + } + ], + "type": "placement" + }, + { + "prizes": [ + { + "type": "USD", + "value": 1 + } + ], + "type": "copilot" + } + ], + "tags": [], + "projectId": 100315, + "startDate": "2025-03-17T04:18:50.000Z", + "endDate": "2025-03-25T16:28:00.000Z", + "status": "Active", + "attachments": [], + "groups": [], + "discussions": [ + { + "provider": "vanilla", + "name": "Artifact test 17 Mar Discussion", + "id": "c74cb08a-54bc-42da-bd4d-daf0035c4a6a", + "type": "challenge", + "url": "https://vanilla.topcoder-dev.com/categories/08cb4122-72c9-4757-8222-4a330f1d43ba" + } + ], + "createdBy": "jcori", + "updatedBy": "tcwebservice", + "created": "2025-03-17T04:18:17.418Z", + "updated": "2025-03-17T04:28:02.849Z", + "overview": { + "totalPrizes": 1, + "type": "USD" + }, + "numOfSubmissions": 3, + "numOfRegistrants": 2, + "currentPhaseNames": [ + "Registration", + "Submission" + ], + "registrationStartDate": "2025-03-17T04:18:50.783Z", + "registrationEndDate": "2025-03-22T04:18:00.000Z", + "submissionStartDate": "2025-03-17T04:28:02.000Z", + "submissionEndDate": "2025-03-22T04:28:00.000Z", + "track": "Development", + "type": "Challenge", + "legacyId": 30096750, + "currentPhase": { + "duration": 432000, + "scheduledEndDate": "2025-03-22T04:28:00.000Z", + "isOpen": true, + "name": "Submission", + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "actualStartDate": "2025-03-17T04:28:02.000Z", + "description": "Submission Phase", + "id": "f6a8b620-b878-49d9-901f-1ce0cc14c005", + "constraints": [], + "scheduledStartDate": "2025-03-17T04:28:02.000Z" + }, + "numOfCheckpointSubmissions": 0 + }, + { + "id": "ab8eb2f2-225f-48ae-b311-dcfa52525024", + "name": "DEV Ch Test reviewers 3", + "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", + "trackId": "9b6fc876-f4d9-4ccb-9dfd-419247628825", + "legacy": { + "track": "DEVELOP", + "subTrack": "CODE", + "forumId": 0, + "directProjectId": 31036, + "reviewType": "COMMUNITY", + "confidentialityType": "public", + "pureV5Task": false, + "reviewScorecardId": 30002133 + }, + "description": "Test", + "descriptionFormat": "markdown", + "metadata": [ + { + "name": "show_data_dashboard", + "value": "false" + } + ], + "timelineTemplateId": "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c", + "phases": [ + { + "duration": 432000, + "scheduledEndDate": "2025-03-19T06:18:51.000Z", + "actualEndDate": "2025-03-19T06:18:51.000Z", + "isOpen": false, + "name": "Registration", + "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", + "actualStartDate": "2025-03-14T06:14:21.000Z", + "description": "Registration Phase", + "id": "716c84fe-0fd2-4bdf-a2a7-23652165bf21", + "constraints": [ + { + "name": "Number of Registrants", + "value": 1 + } + ], + "scheduledStartDate": "2025-03-14T06:14:21.000Z" + }, + { + "duration": 432000, + "scheduledEndDate": "2025-03-19T06:31:35.000Z", + "actualEndDate": "2025-03-19T06:31:35.000Z", + "isOpen": false, + "name": "Submission", + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "actualStartDate": "2025-03-14T06:24:55.000Z", + "description": "Submission Phase", + "id": "24a26c9b-c619-4208-a824-7dc7709da85a", + "constraints": [], + "scheduledStartDate": "2025-03-14T06:24:55.000Z" + }, + { + "duration": 172800, + "scheduledEndDate": "2025-03-21T06:31:00.000Z", + "isOpen": true, + "name": "Review", + "phaseId": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "actualStartDate": "2025-03-19T06:31:36.000Z", + "description": "Review Phase", + "id": "bd1eb5ff-99d2-47a9-be1f-f0d645c008f8", + "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "constraints": [ + { + "name": "Scorecard", + "value": 30001031 + }, + { + "name": "Number of Reviewers", + "value": 2 + } + ], + "scheduledStartDate": "2025-03-19T06:31:36.000Z" + }, + { + "duration": 86400, + "scheduledEndDate": "2025-03-22T06:31:00.000Z", + "isOpen": false, + "name": "Appeals", + "phaseId": "1c24cfb3-5b0a-4dbd-b6bd-4b0dff5349c6", + "description": "Appeals Phase", + "id": "a21baa4f-0c51-4005-a1ca-3b24a68ce381", + "predecessor": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "constraints": [ + { + "name": "View Response During Appeals", + "value": 0 + } + ], + "scheduledStartDate": "2025-03-21T06:31:00.000Z" + }, + { + "duration": 43200, + "scheduledEndDate": "2025-03-22T18:31:00.000Z", + "isOpen": false, + "name": "Appeals Response", + "phaseId": "797a6af7-cd3f-4436-9fca-9679f773bee9", + "description": "Appeals Response Phase", + "id": "4d4f551f-c77e-4a10-8b0a-2c0f3040e414", + "predecessor": "1c24cfb3-5b0a-4dbd-b6bd-4b0dff5349c6", + "constraints": [], + "scheduledStartDate": "2025-03-22T06:31:00.000Z" + } + ], + "events": [], + "terms": [ + { + "roleId": "732339e7-8e30-49d7-9198-cccf9451e221", + "id": "317cd8f9-d66c-4f2a-8774-63c612d99cd4" + } + ], + "prizeSets": [ + { + "prizes": [ + { + "type": "USD", + "value": 30 + } + ], + "type": "placement" + } + ], + "tags": [], + "projectId": 22248, + "startDate": "2025-03-14T06:14:21.000Z", + "endDate": "2025-03-22T18:31:00.000Z", + "status": "Active", + "attachments": [], + "groups": [], + "discussions": [ + { + "provider": "vanilla", + "name": "DEV Ch Test reviewers 3 Discussion", + "id": "e6ab3d45-83f8-431a-bd7e-d8aec59d9279", + "type": "challenge" + } + ], + "createdBy": "mess", + "updatedBy": "tcwebservice", + "created": "2025-03-14T06:13:43.991Z", + "updated": "2025-03-19T06:31:36.388Z", + "overview": { + "totalPrizes": 30, + "type": "USD" + }, + "numOfSubmissions": 1, + "numOfRegistrants": 1, + "currentPhaseNames": [ + "Review" + ], + "registrationStartDate": "2025-03-14T06:14:21.106Z", + "registrationEndDate": "2025-03-19T06:18:51.000Z", + "submissionStartDate": "2025-03-14T06:24:55.000Z", + "submissionEndDate": "2025-03-19T06:31:35.000Z", + "track": "Development", + "type": "Challenge", + "legacyId": 30096749, + "currentPhase": { + "duration": 172800, + "scheduledEndDate": "2025-03-21T06:31:00.000Z", + "isOpen": true, + "name": "Review", + "phaseId": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "actualStartDate": "2025-03-19T06:31:36.000Z", + "description": "Review Phase", + "id": "bd1eb5ff-99d2-47a9-be1f-f0d645c008f8", + "constraints": [ + { + "name": "Scorecard", + "value": 30001031 + }, + { + "name": "Number of Reviewers", + "value": 2 + } + ], + "scheduledStartDate": "2025-03-19T06:31:36.000Z", + "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49" + }, + "numOfCheckpointSubmissions": 0 + }, + { + "id": "0b5b218c-09c1-4872-aad5-22f8779d009d", + "name": "DEV Ch test reviewers 2", + "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", + "trackId": "9b6fc876-f4d9-4ccb-9dfd-419247628825", + "legacy": { + "track": "DEVELOP", + "subTrack": "CODE", + "forumId": 0, + "directProjectId": 31036, + "reviewType": "COMMUNITY", + "confidentialityType": "public", + "pureV5Task": false, + "reviewScorecardId": 30002133 + }, + "description": "Test", + "descriptionFormat": "markdown", + "metadata": [ + { + "name": "show_data_dashboard", + "value": "false" + } + ], + "timelineTemplateId": "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c", + "phases": [ + { + "duration": 432000, + "scheduledEndDate": "2025-03-19T06:18:51.000Z", + "actualEndDate": "2025-03-19T06:18:51.000Z", + "isOpen": false, + "name": "Registration", + "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", + "actualStartDate": "2025-03-14T06:13:23.000Z", + "description": "Registration Phase", + "id": "cf8a5ad5-c5b0-4da6-9f57-d1024226aecf", + "constraints": [ + { + "name": "Number of Registrants", + "value": 1 + } + ], + "scheduledStartDate": "2025-03-14T06:13:23.000Z" + }, + { + "duration": 432000, + "scheduledEndDate": "2025-03-19T06:31:35.000Z", + "actualEndDate": "2025-03-19T06:31:35.000Z", + "isOpen": false, + "name": "Submission", + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "actualStartDate": "2025-03-14T06:24:34.000Z", + "description": "Submission Phase", + "id": "794cc14e-4cbf-4ace-ab7b-13fd9dc61c3f", + "constraints": [], + "scheduledStartDate": "2025-03-14T06:24:34.000Z" + }, + { + "duration": 172800, + "scheduledEndDate": "2025-03-21T06:31:00.000Z", + "isOpen": false, + "name": "Review", + "phaseId": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "description": "Review Phase", + "id": "60c50757-af90-4d7b-9681-64e47e598d0d", + "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "constraints": [ + { + "name": "Scorecard", + "value": 30001031 + }, + { + "name": "Number of Reviewers", + "value": 2 + } + ], + "scheduledStartDate": "2025-03-19T06:31:35.000Z" + }, + { + "duration": 86400, + "scheduledEndDate": "2025-03-22T06:31:00.000Z", + "isOpen": false, + "name": "Appeals", + "phaseId": "1c24cfb3-5b0a-4dbd-b6bd-4b0dff5349c6", + "description": "Appeals Phase", + "id": "5eda3bc3-ab66-468b-b61b-213ae5315942", + "predecessor": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "constraints": [ + { + "name": "View Response During Appeals", + "value": 0 + } + ], + "scheduledStartDate": "2025-03-21T06:31:00.000Z" + }, + { + "duration": 43200, + "scheduledEndDate": "2025-03-22T18:31:00.000Z", + "isOpen": false, + "name": "Appeals Response", + "phaseId": "797a6af7-cd3f-4436-9fca-9679f773bee9", + "description": "Appeals Response Phase", + "id": "39d4b0e3-b5b1-4867-82bc-a5c6242ddd3d", + "predecessor": "1c24cfb3-5b0a-4dbd-b6bd-4b0dff5349c6", + "constraints": [], + "scheduledStartDate": "2025-03-22T06:31:00.000Z" + }, + { + "duration": 86400, + "scheduledEndDate": "2025-03-20T06:31:00.000Z", + "isOpen": true, + "name": "Post-Mortem", + "phaseId": "f308bdb4-d3da-43d8-942b-134dfbaf5c45", + "actualStartDate": "2025-03-19T06:31:36.000Z", + "description": "Post-Mortem Phase", + "id": "798e811d-f006-4acb-85db-cafd3c0dab81", + "predecessor": "a93544bc-c165-4af4-b55e-18f3593b457a", + "constraints": [], + "scheduledStartDate": "2025-03-19T06:31:36.000Z" + } + ], + "events": [], + "terms": [ + { + "roleId": "732339e7-8e30-49d7-9198-cccf9451e221", + "id": "317cd8f9-d66c-4f2a-8774-63c612d99cd4" + } + ], + "prizeSets": [ + { + "prizes": [ + { + "type": "USD", + "value": 20 + } + ], + "type": "placement" + } + ], + "tags": [], + "projectId": 22248, + "startDate": "2025-03-14T06:13:23.000Z", + "endDate": "2025-03-22T18:31:00.000Z", + "status": "Active", + "attachments": [], + "groups": [], + "discussions": [ + { + "provider": "vanilla", + "name": "DEV Ch test reviewers 2 Discussion", + "id": "e039fea1-d690-4032-98ba-5fe7e7ab7235", + "type": "challenge" + } + ], + "createdBy": "mess", + "updatedBy": "tcwebservice", + "created": "2025-03-14T06:12:44.861Z", + "updated": "2025-03-19T06:31:36.526Z", + "overview": { + "totalPrizes": 20, + "type": "USD" + }, + "numOfSubmissions": 0, + "numOfRegistrants": 0, + "currentPhaseNames": [ + "Post-Mortem" + ], + "registrationStartDate": "2025-03-14T06:13:23.000Z", + "registrationEndDate": "2025-03-19T06:18:51.000Z", + "submissionStartDate": "2025-03-14T06:24:34.000Z", + "submissionEndDate": "2025-03-19T06:31:35.000Z", + "track": "Development", + "type": "Challenge", + "legacyId": 30096748, + "currentPhase": { + "duration": 86400, + "scheduledEndDate": "2025-03-20T06:31:00.000Z", + "isOpen": true, + "name": "Post-Mortem", + "phaseId": "f308bdb4-d3da-43d8-942b-134dfbaf5c45", + "actualStartDate": "2025-03-19T06:31:36.000Z", + "description": "Post-Mortem Phase", + "id": "798e811d-f006-4acb-85db-cafd3c0dab81", + "constraints": [], + "scheduledStartDate": "2025-03-19T06:31:36.000Z", + "predecessor": "a93544bc-c165-4af4-b55e-18f3593b457a" + } + }, + { + "id": "e032ace9-6784-49ee-a0c0-7675b18743ba", + "name": "QA Ch test reviewers", + "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", + "trackId": "36e6a8d0-7e1e-4608-a673-64279d99c115", + "legacy": { + "track": "DEVELOP", + "subTrack": "BUG_HUNT", + "forumId": 0, + "directProjectId": 31036, + "reviewType": "COMMUNITY", + "confidentialityType": "public", + "pureV5Task": false, + "reviewScorecardId": 30001610 + }, + "description": "Test", + "descriptionFormat": "markdown", + "metadata": [], + "timelineTemplateId": "f1bcb2c7-3ee4-4fb5-8d0b-efe52c015963", + "phases": [ + { + "duration": 86400, + "scheduledEndDate": "2025-03-17T05:27:00.000Z", + "isOpen": true, + "name": "Post-Mortem", + "phaseId": "f308bdb4-d3da-43d8-942b-134dfbaf5c45", + "actualStartDate": "2025-03-16T05:27:16.000Z", + "description": "Post-Mortem Phase", + "id": "f1480f8b-6489-4f34-887c-3fe0c291bbbc", + "predecessor": "a93544bc-c165-4af4-b55e-18f3593b457a", + "constraints": [], + "scheduledStartDate": "2025-03-16T05:27:16.000Z" + }, + { + "duration": 172800, + "scheduledEndDate": "2025-03-16T05:14:41.000Z", + "actualEndDate": "2025-03-16T05:14:41.000Z", + "isOpen": false, + "name": "Registration", + "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", + "actualStartDate": "2025-03-14T05:08:02.000Z", + "description": "Registration Phase", + "id": "1a3b45d3-8109-4c7b-8efc-e5e7cdec8e4b", + "constraints": [ + { + "name": "Number of Registrants", + "value": 1 + } + ], + "scheduledStartDate": "2025-03-14T05:08:02.000Z" + }, + { + "duration": 345600, + "scheduledEndDate": "2025-03-18T05:34:30.000Z", + "actualEndDate": "2025-03-18T05:34:30.000Z", + "isOpen": false, + "name": "Submission", + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "actualStartDate": "2025-03-14T05:22:53.000Z", + "description": "Submission Phase", + "id": "f0a3f04d-f39f-4cda-b557-2c58163e0afa", + "constraints": [], + "scheduledStartDate": "2025-03-14T05:22:53.000Z" + }, + { + "duration": 172800, + "scheduledEndDate": "2025-03-20T05:34:00.000Z", + "isOpen": false, + "name": "Review", + "phaseId": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "description": "Review Phase", + "id": "2c88494b-c4a5-4610-977e-3db932e6dea5", + "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "constraints": [ + { + "name": "Scorecard", + "value": 30001610 + }, + { + "name": "Number of Reviewers", + "value": 2 + } + ], + "scheduledStartDate": "2025-03-18T05:34:30.000Z" + } + ], + "events": [], + "terms": [ + { + "roleId": "732339e7-8e30-49d7-9198-cccf9451e221", + "id": "317cd8f9-d66c-4f2a-8774-63c612d99cd4" + } + ], + "prizeSets": [ + { + "prizes": [ + { + "type": "USD", + "value": 200 + } + ], + "type": "placement" + } + ], + "tags": [ + "QA" + ], + "projectId": 22248, + "startDate": "2025-03-14T05:08:02.000Z", + "endDate": "2025-03-20T05:34:00.000Z", + "status": "Active", + "attachments": [], + "groups": [], + "discussions": [ + { + "provider": "vanilla", + "name": "QA Ch test reviewers Discussion", + "id": "cf9828cf-ec4f-4d69-960c-30a79bab25ee", + "type": "challenge" + } + ], + "createdBy": "mess", + "updatedBy": "tcwebservice", + "created": "2025-03-14T05:06:36.160Z", + "updated": "2025-03-18T05:34:30.675Z", + "overview": { + "totalPrizes": 200, + "type": "USD" + }, + "numOfSubmissions": 0, + "numOfRegistrants": 0, + "currentPhaseNames": [ + "Post-Mortem" + ], + "registrationStartDate": "2025-03-14T05:08:02.492Z", + "registrationEndDate": "2025-03-16T05:14:41.000Z", + "submissionStartDate": "2025-03-14T05:22:53.000Z", + "submissionEndDate": "2025-03-18T05:34:30.000Z", + "track": "Quality Assurance", + "type": "Challenge", + "legacyId": 30096747, + "currentPhase": { + "duration": 86400, + "scheduledEndDate": "2025-03-17T05:27:00.000Z", + "isOpen": true, + "name": "Post-Mortem", + "phaseId": "f308bdb4-d3da-43d8-942b-134dfbaf5c45", + "actualStartDate": "2025-03-16T05:27:16.000Z", + "description": "Post-Mortem Phase", + "id": "f1480f8b-6489-4f34-887c-3fe0c291bbbc", + "constraints": [], + "scheduledStartDate": "2025-03-16T05:27:16.000Z", + "predecessor": "a93544bc-c165-4af4-b55e-18f3593b457a" + } + }, + { + "id": "e4ae360b-c855-4408-adc7-012d27822750", + "name": "DS CH test reviewers", + "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", + "trackId": "c0f5d461-8219-4c14-878a-c3a3f356466d", + "legacy": { + "track": "DEVELOP", + "subTrack": "CODE", + "forumId": 0, + "directProjectId": 31036, + "reviewType": "COMMUNITY", + "confidentialityType": "public", + "pureV5Task": false, + "reviewScorecardId": 30002133 + }, + "description": "test", + "descriptionFormat": "markdown", + "metadata": [ + { + "name": "show_data_dashboard", + "value": "false" + } + ], + "timelineTemplateId": "6969125a-a12f-4b89-8de6-e66b0056f36b", + "phases": [ + { + "duration": 1209600, + "scheduledEndDate": "2025-03-28T04:36:00.000Z", + "isOpen": true, + "name": "Registration", + "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", + "actualStartDate": "2025-03-14T04:36:56.000Z", + "description": "Registration Phase", + "id": "ed8ff82f-0748-4838-bbe3-1ec4d0a95195", + "constraints": [ + { + "name": "Number of Registrants", + "value": 1 + } + ], + "scheduledStartDate": "2025-03-14T04:36:56.000Z" + }, + { + "duration": 1209600, + "scheduledEndDate": "2025-03-28T05:10:00.000Z", + "isOpen": true, + "name": "Submission", + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "actualStartDate": "2025-03-14T05:10:20.000Z", + "description": "Submission Phase", + "id": "124e0004-8e8a-4ac0-8c45-43e2e11917ea", + "constraints": [], + "scheduledStartDate": "2025-03-14T05:10:20.000Z" + }, + { + "duration": 604800, + "scheduledEndDate": "2025-04-04T05:10:00.000Z", + "isOpen": false, + "name": "Review", + "phaseId": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "description": "Review Phase", + "id": "aa67693f-b06e-465c-8360-d192f4103a92", + "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "constraints": [ + { + "name": "Scorecard", + "value": 30001031 + }, + { + "name": "Number of Reviewers", + "value": 1 + } + ], + "scheduledStartDate": "2025-03-28T05:10:00.000Z" + } + ], + "events": [], + "terms": [ + { + "roleId": "732339e7-8e30-49d7-9198-cccf9451e221", + "id": "317cd8f9-d66c-4f2a-8774-63c612d99cd4" + } + ], + "prizeSets": [ + { + "prizes": [ + { + "type": "USD", + "value": 12 + } + ], + "type": "placement" + } + ], + "tags": [], + "projectId": 22248, + "startDate": "2025-03-14T04:36:56.000Z", + "endDate": "2025-04-04T05:10:00.000Z", + "status": "Active", + "attachments": [], + "groups": [], + "discussions": [ + { + "provider": "vanilla", + "name": "DS CH test reviewers Discussion", + "id": "a348b264-1129-4f3c-b994-efb7f58284b9", + "type": "challenge" + } + ], + "createdBy": "mess", + "updatedBy": "tcwebservice", + "created": "2025-03-14T04:36:15.155Z", + "updated": "2025-03-14T05:10:20.826Z", + "overview": { + "totalPrizes": 12, + "type": "USD" + }, + "numOfSubmissions": 1, + "numOfRegistrants": 1, + "currentPhaseNames": [ + "Registration", + "Submission" + ], + "registrationStartDate": "2025-03-14T04:36:56.028Z", + "registrationEndDate": "2025-03-28T04:36:00.000Z", + "submissionStartDate": "2025-03-14T05:10:20.000Z", + "submissionEndDate": "2025-03-28T05:10:00.000Z", + "track": "Data Science", + "type": "Challenge", + "legacyId": 30096746, + "currentPhase": { + "duration": 1209600, + "scheduledEndDate": "2025-03-28T05:10:00.000Z", + "isOpen": true, + "name": "Submission", + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "actualStartDate": "2025-03-14T05:10:20.000Z", + "description": "Submission Phase", + "id": "124e0004-8e8a-4ac0-8c45-43e2e11917ea", + "constraints": [], + "scheduledStartDate": "2025-03-14T05:10:20.000Z" + }, + "numOfCheckpointSubmissions": 0 + }, + { + "id": "430fa8d2-3cfe-4c8c-91a1-ae60748f2862", + "name": "F2f Test reviewers", + "typeId": "dc876fa4-ef2d-4eee-b701-b555fcc6544c", + "trackId": "9b6fc876-f4d9-4ccb-9dfd-419247628825", + "legacy": { + "track": "DEVELOP", + "subTrack": "FIRST_2_FINISH", + "forumId": 0, + "directProjectId": 31036, + "reviewType": "COMMUNITY", + "confidentialityType": "public", + "pureV5Task": false, + "reviewScorecardId": 30001551 + }, + "description": "Test", + "descriptionFormat": "markdown", + "metadata": [], + "timelineTemplateId": "0a0fed34-cb5a-47f5-b0cb-6e2ee7de8dcb", + "phases": [ + { + "duration": 2592000, + "scheduledEndDate": "2025-04-13T04:33:00.000Z", + "isOpen": true, + "name": "Registration", + "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", + "actualStartDate": "2025-03-14T04:33:54.000Z", + "description": "Registration Phase", + "id": "91e4552a-1d0b-408a-b27c-350d8d69101c", + "constraints": [ + { + "name": "Number of Registrants", + "value": 1 + } + ], + "scheduledStartDate": "2025-03-14T04:33:54.000Z" + }, + { + "duration": 2592000, + "scheduledEndDate": "2025-04-13T04:38:00.000Z", + "isOpen": false, + "name": "Submission", + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "description": "Submission Phase", + "id": "62b6329f-6624-4ca1-b3e5-33764747d648", + "constraints": [], + "scheduledStartDate": "2025-03-14T04:38:00.000Z" + }, + { + "duration": 86400, + "scheduledEndDate": "2025-03-15T04:38:00.000Z", + "isOpen": false, + "name": "Iterative Review", + "phaseId": "003a4b14-de5d-43fc-9e35-835dbeb6af1f", + "description": "Iterative Review Phase", + "id": "514d7c75-3209-4fb4-9462-9731ac4f5793", + "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "constraints": [ + { + "name": "Scorecard", + "value": 30001551 + }, + { + "name": "Number of Reviewers", + "value": 1 + } + ], + "scheduledStartDate": "2025-03-14T04:38:00.000Z" + } + ], + "events": [], + "terms": [ + { + "roleId": "732339e7-8e30-49d7-9198-cccf9451e221", + "id": "317cd8f9-d66c-4f2a-8774-63c612d99cd4" + } + ], + "prizeSets": [ + { + "prizes": [ + { + "type": "USD", + "value": 50 + } + ], + "type": "placement" + } + ], + "tags": [], + "projectId": 22248, + "startDate": "2025-03-14T04:33:54.000Z", + "endDate": "2025-04-13T04:38:00.000Z", + "status": "Active", + "attachments": [], + "groups": [], + "discussions": [ + { + "provider": "vanilla", + "name": "F2f Test reviewers Discussion", + "id": "18508889-b123-46ec-9ef9-4e7d71f6d0ed", + "type": "challenge" + } + ], + "createdBy": "mess", + "updatedBy": "tcwebservice", + "created": "2025-03-14T04:33:15.475Z", + "updated": "2025-03-14T05:08:37.938Z", + "overview": { + "totalPrizes": 50, + "type": "USD" + }, + "numOfSubmissions": 0, + "numOfRegistrants": 0, + "currentPhaseNames": [ + "Registration" + ], + "registrationStartDate": "2025-03-14T04:33:54.686Z", + "registrationEndDate": "2025-04-13T04:33:00.000Z", + "submissionStartDate": "2025-03-14T04:38:00.000Z", + "submissionEndDate": "2025-04-13T04:38:00.000Z", + "track": "Development", + "type": "First2Finish", + "legacyId": 30096744, + "currentPhase": { + "duration": 2592000, + "scheduledEndDate": "2025-04-13T04:33:00.000Z", + "isOpen": true, + "name": "Registration", + "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", + "actualStartDate": "2025-03-14T04:33:54.000Z", + "description": "Registration Phase", + "id": "91e4552a-1d0b-408a-b27c-350d8d69101c", + "constraints": [ + { + "name": "Number of Registrants", + "value": 1 + } + ], + "scheduledStartDate": "2025-03-14T04:33:54.000Z" + } + }, + { + "id": "0e819949-4fb3-4c5f-808f-cef3162495b8", + "name": "TEst SMTP", + "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", + "trackId": "9b6fc876-f4d9-4ccb-9dfd-419247628825", + "legacy": { + "track": "DEVELOP", + "subTrack": "CODE", + "forumId": 0, + "directProjectId": 31036, + "reviewType": "COMMUNITY", + "confidentialityType": "public", + "pureV5Task": false, + "reviewScorecardId": 30002133 + }, + "description": "test", + "descriptionFormat": "markdown", + "metadata": [ + { + "name": "show_data_dashboard", + "value": "false" + } + ], + "timelineTemplateId": "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c", + "phases": [ + { + "duration": 60, + "scheduledEndDate": "2025-03-12T06:56:49.000Z", + "actualEndDate": "2025-03-12T06:56:49.000Z", + "isOpen": false, + "name": "Registration", + "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", + "actualStartDate": "2025-03-12T06:40:52.000Z", + "description": "Registration Phase", + "id": "52e5836e-7e44-40a1-bb1d-8816b3941459", + "constraints": [ + { + "name": "Number of Registrants", + "value": 1 + } + ], + "scheduledStartDate": "2025-03-12T06:40:52.000Z" + }, + { + "duration": 432000, + "scheduledEndDate": "2025-03-17T06:58:49.000Z", + "actualEndDate": "2025-03-17T06:58:49.000Z", + "isOpen": false, + "name": "Submission", + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "actualStartDate": "2025-03-12T06:50:57.000Z", + "description": "Submission Phase", + "id": "77e84fd9-8a6f-4203-b7de-43458f0f13c9", + "constraints": [], + "scheduledStartDate": "2025-03-12T06:50:57.000Z" + }, + { + "duration": 172800, + "scheduledEndDate": "2025-03-19T06:58:00.000Z", + "isOpen": true, + "name": "Review", + "phaseId": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "actualStartDate": "2025-03-17T06:58:50.000Z", + "description": "Review Phase", + "id": "47138b42-cedb-482e-a2ab-2637bf8c7325", + "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "constraints": [ + { + "name": "Scorecard", + "value": 30001031 + }, + { + "name": "Number of Reviewers", + "value": 2 + } + ], + "scheduledStartDate": "2025-03-17T06:58:50.000Z" + }, + { + "duration": 86400, + "scheduledEndDate": "2025-03-20T06:58:00.000Z", + "isOpen": false, + "name": "Appeals", + "phaseId": "1c24cfb3-5b0a-4dbd-b6bd-4b0dff5349c6", + "description": "Appeals Phase", + "id": "10670635-42cd-480c-b2b2-2908e932a5f0", + "predecessor": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "constraints": [ + { + "name": "View Response During Appeals", + "value": 0 + } + ], + "scheduledStartDate": "2025-03-19T06:58:00.000Z" + }, + { + "duration": 43200, + "scheduledEndDate": "2025-03-20T18:58:00.000Z", + "isOpen": false, + "name": "Appeals Response", + "phaseId": "797a6af7-cd3f-4436-9fca-9679f773bee9", + "description": "Appeals Response Phase", + "id": "380e4428-62c2-449b-9e1d-209aac8abbe1", + "predecessor": "1c24cfb3-5b0a-4dbd-b6bd-4b0dff5349c6", + "constraints": [], + "scheduledStartDate": "2025-03-20T06:58:00.000Z" + } + ], + "events": [], + "terms": [ + { + "roleId": "732339e7-8e30-49d7-9198-cccf9451e221", + "id": "317cd8f9-d66c-4f2a-8774-63c612d99cd4" + } + ], + "prizeSets": [ + { + "prizes": [ + { + "type": "USD", + "value": 1 + } + ], + "type": "placement" + }, + { + "prizes": [ + { + "type": "USD", + "value": 1 + } + ], + "type": "copilot" + } + ], + "tags": [], + "projectId": 22248, + "startDate": "2025-03-12T06:40:52.000Z", + "endDate": "2025-03-20T18:58:00.000Z", + "status": "Active", + "attachments": [], + "groups": [], + "discussions": [ + { + "provider": "vanilla", + "name": "TEst SMTP Discussion", + "id": "d3b6327d-5cc3-4eaf-a015-22d65924094d", + "type": "challenge" + } + ], + "createdBy": "TCConnCopilot", + "updatedBy": "tcwebservice", + "created": "2025-03-12T06:40:17.364Z", + "updated": "2025-03-17T06:58:50.663Z", + "overview": { + "totalPrizes": 1, + "type": "USD" + }, + "numOfSubmissions": 1, + "numOfRegistrants": 1, + "currentPhaseNames": [ + "Review" + ], + "registrationStartDate": "2025-03-12T06:40:52.159Z", + "registrationEndDate": "2025-03-12T06:56:49.000Z", + "submissionStartDate": "2025-03-12T06:50:57.000Z", + "submissionEndDate": "2025-03-17T06:58:49.000Z", + "track": "Development", + "type": "Challenge", + "legacyId": 30096743, + "currentPhase": { + "duration": 172800, + "scheduledEndDate": "2025-03-19T06:58:00.000Z", + "isOpen": true, + "name": "Review", + "phaseId": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "actualStartDate": "2025-03-17T06:58:50.000Z", + "description": "Review Phase", + "id": "47138b42-cedb-482e-a2ab-2637bf8c7325", + "constraints": [ + { + "name": "Scorecard", + "value": 30001031 + }, + { + "name": "Number of Reviewers", + "value": 2 + } + ], + "scheduledStartDate": "2025-03-17T06:58:50.000Z", + "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49" + }, + "numOfCheckpointSubmissions": 0 + }, + { + "id": "d71503da-b9e1-4331-89be-c1665e8d5fd6", + "name": "Test reviewers", + "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", + "trackId": "9b6fc876-f4d9-4ccb-9dfd-419247628825", + "legacy": { + "track": "DEVELOP", + "subTrack": "CODE", + "forumId": 0, + "directProjectId": 31036, + "reviewType": "COMMUNITY", + "confidentialityType": "public", + "pureV5Task": false, + "reviewScorecardId": 30002133 + }, + "description": "Test", + "descriptionFormat": "markdown", + "metadata": [ + { + "name": "show_data_dashboard", + "value": "false" + } + ], + "timelineTemplateId": "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c", + "phases": [ + { + "duration": 432000, + "scheduledEndDate": "2025-03-16T09:00:28.000Z", + "actualEndDate": "2025-03-16T09:00:28.000Z", + "isOpen": false, + "name": "Registration", + "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", + "actualStartDate": "2025-03-11T08:55:20.000Z", + "description": "Registration Phase", + "id": "05b4bd83-141f-4584-bc4e-025fe2f7a45e", + "constraints": [ + { + "name": "Number of Registrants", + "value": 1 + } + ], + "scheduledStartDate": "2025-03-11T08:55:20.000Z" + }, + { + "duration": 432000, + "scheduledEndDate": "2025-03-17T09:05:34.000Z", + "actualEndDate": "2025-03-17T09:05:34.000Z", + "isOpen": false, + "name": "Submission", + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "actualStartDate": "2025-03-12T08:59:53.000Z", + "description": "Submission Phase", + "id": "6d986f13-76c0-413f-9bee-54818c5921d8", + "constraints": [], + "scheduledStartDate": "2025-03-12T08:59:53.000Z" + }, + { + "duration": 172800, + "scheduledEndDate": "2025-03-19T09:05:00.000Z", + "isOpen": false, + "name": "Review", + "phaseId": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "description": "Review Phase", + "id": "3c2098af-4aeb-4862-a041-51cdcde3596c", + "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "constraints": [ + { + "name": "Scorecard", + "value": 30001031 + }, + { + "name": "Number of Reviewers", + "value": 2 + } + ], + "scheduledStartDate": "2025-03-17T09:05:34.000Z" + }, + { + "duration": 86400, + "scheduledEndDate": "2025-03-20T09:05:00.000Z", + "isOpen": false, + "name": "Appeals", + "phaseId": "1c24cfb3-5b0a-4dbd-b6bd-4b0dff5349c6", + "description": "Appeals Phase", + "id": "5ec62e89-bcbd-4f50-b6bb-e6049f10f97d", + "predecessor": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "constraints": [ + { + "name": "View Response During Appeals", + "value": 0 + } + ], + "scheduledStartDate": "2025-03-19T09:05:00.000Z" + }, + { + "duration": 43200, + "scheduledEndDate": "2025-03-20T21:05:00.000Z", + "isOpen": false, + "name": "Appeals Response", + "phaseId": "797a6af7-cd3f-4436-9fca-9679f773bee9", + "description": "Appeals Response Phase", + "id": "0aa7f813-824e-4ea2-8aff-84beb8220634", + "predecessor": "1c24cfb3-5b0a-4dbd-b6bd-4b0dff5349c6", + "constraints": [], + "scheduledStartDate": "2025-03-20T09:05:00.000Z" + }, + { + "duration": 86400, + "scheduledEndDate": "2025-03-17T09:13:00.000Z", + "isOpen": true, + "name": "Post-Mortem", + "phaseId": "f308bdb4-d3da-43d8-942b-134dfbaf5c45", + "actualStartDate": "2025-03-16T09:13:01.000Z", + "description": "Post-Mortem Phase", + "id": "2a3aedf4-003d-42f1-b48a-bbe0ee2b5499", + "predecessor": "a93544bc-c165-4af4-b55e-18f3593b457a", + "constraints": [], + "scheduledStartDate": "2025-03-16T09:13:01.000Z" + } + ], + "events": [], + "terms": [ + { + "roleId": "732339e7-8e30-49d7-9198-cccf9451e221", + "id": "317cd8f9-d66c-4f2a-8774-63c612d99cd4" + } + ], + "prizeSets": [ + { + "prizes": [ + { + "type": "USD", + "value": 10 + } + ], + "type": "placement" + } + ], + "tags": [], + "projectId": 22248, + "startDate": "2025-03-11T08:55:20.000Z", + "endDate": "2025-03-20T21:05:00.000Z", + "status": "Active", + "attachments": [], + "groups": [], + "discussions": [ + { + "provider": "vanilla", + "name": "Test reviewers Discussion", + "id": "be7e25a7-d164-482c-81d6-58e0ceceb27a", + "type": "challenge" + } + ], + "createdBy": "mess", + "updatedBy": "tcwebservice", + "created": "2025-03-11T08:54:31.440Z", + "updated": "2025-03-17T09:05:35.059Z", + "overview": { + "totalPrizes": 10, + "type": "USD" + }, + "numOfSubmissions": 0, + "numOfRegistrants": 0, + "currentPhaseNames": [ + "Post-Mortem" + ], + "registrationStartDate": "2025-03-11T08:55:20.164Z", + "registrationEndDate": "2025-03-16T09:00:28.000Z", + "submissionStartDate": "2025-03-12T08:59:53.000Z", + "submissionEndDate": "2025-03-17T09:05:34.000Z", + "track": "Development", + "type": "Challenge", + "legacyId": 30096742, + "currentPhase": { + "duration": 86400, + "scheduledEndDate": "2025-03-17T09:13:00.000Z", + "isOpen": true, + "name": "Post-Mortem", + "phaseId": "f308bdb4-d3da-43d8-942b-134dfbaf5c45", + "actualStartDate": "2025-03-16T09:13:01.000Z", + "description": "Post-Mortem Phase", + "id": "2a3aedf4-003d-42f1-b48a-bbe0ee2b5499", + "constraints": [], + "scheduledStartDate": "2025-03-16T09:13:01.000Z", + "predecessor": "a93544bc-c165-4af4-b55e-18f3593b457a" + } + }, + { + "id": "bfae29b6-f2a1-48aa-afc9-ea32a4313984", + "name": "DS MM", + "typeId": "929bc408-9cf2-4b3e-ba71-adfbf693046c", + "trackId": "c0f5d461-8219-4c14-878a-c3a3f356466d", + "legacy": { + "track": "DATA_SCIENCE", + "subTrack": "MARATHON_MATCH", + "forumId": 0, + "directProjectId": 33413, + "reviewType": "COMMUNITY", + "confidentialityType": "public", + "pureV5Task": false, + "reviewScorecardId": 30001610 + }, + "description": "test", + "descriptionFormat": "markdown", + "metadata": [], + "timelineTemplateId": "6969125a-a12f-4b89-8de6-e66b0056f36b", + "phases": [ + { + "duration": 1209600, + "scheduledEndDate": "2025-03-21T04:00:45.000Z", + "actualEndDate": "2025-03-21T04:00:45.000Z", + "isOpen": false, + "name": "Registration", + "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", + "actualStartDate": "2025-03-07T03:52:02.000Z", + "description": "Registration Phase", + "id": "64dcc6c9-856a-4773-bd56-2205eec3501a", + "constraints": [ + { + "name": "Number of Registrants", + "value": 1 + } + ], + "scheduledStartDate": "2025-03-07T03:52:02.000Z" + }, + { + "duration": 1209600, + "scheduledEndDate": "2025-03-21T04:13:18.000Z", + "actualEndDate": "2025-03-21T04:13:18.000Z", + "isOpen": false, + "name": "Submission", + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "actualStartDate": "2025-03-07T04:01:17.000Z", + "description": "Submission Phase", + "id": "ed1342cf-9a0e-4644-ab3a-6ff77e8041a3", + "constraints": [], + "scheduledStartDate": "2025-03-07T04:01:17.000Z" + }, + { + "duration": 604800, + "scheduledEndDate": "2025-03-28T04:13:00.000Z", + "isOpen": false, + "name": "Review", + "phaseId": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "description": "Review Phase", + "id": "1f4cb45a-8ae9-4602-871a-5db3b762d85b", + "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "constraints": [ + { + "name": "Scorecard", + "value": 30001610 + }, + { + "name": "Number of Reviewers", + "value": 2 + } + ], + "scheduledStartDate": "2025-03-21T04:13:18.000Z" + }, + { + "duration": 86400, + "scheduledEndDate": "2025-03-22T04:25:00.000Z", + "isOpen": true, + "name": "Post-Mortem", + "phaseId": "f308bdb4-d3da-43d8-942b-134dfbaf5c45", + "actualStartDate": "2025-03-21T04:25:51.000Z", + "description": "Post-Mortem Phase", + "id": "ea766761-365a-4d6b-8da7-685394f56bc9", + "predecessor": "a93544bc-c165-4af4-b55e-18f3593b457a", + "constraints": [], + "scheduledStartDate": "2025-03-21T04:25:51.000Z" + } + ], + "events": [], + "terms": [ + { + "roleId": "732339e7-8e30-49d7-9198-cccf9451e221", + "id": "317cd8f9-d66c-4f2a-8774-63c612d99cd4" + } + ], + "prizeSets": [ + { + "prizes": [ + { + "type": "USD", + "value": 2 + } + ], + "type": "placement" + }, + { + "prizes": [ + { + "type": "USD", + "value": 1 + } + ], + "type": "copilot" + } + ], + "tags": [], + "projectId": 100315, + "startDate": "2025-03-07T03:52:02.000Z", + "endDate": "2025-03-28T04:13:00.000Z", + "status": "Active", + "attachments": [], + "groups": [], + "discussions": [ + { + "provider": "vanilla", + "name": "DS MM Discussion", + "id": "cb7578ad-5a80-47d6-98a9-84c433c53da2", + "type": "challenge" + } + ], + "createdBy": "jcori", + "updatedBy": "tcwebservice", + "created": "2025-03-07T03:51:20.315Z", + "updated": "2025-03-21T04:25:52.163Z", + "overview": { + "totalPrizes": 2, + "type": "USD" + }, + "numOfSubmissions": 1, + "numOfRegistrants": 2, + "currentPhaseNames": [ + "Post-Mortem" + ], + "registrationStartDate": "2025-03-07T03:52:02.277Z", + "registrationEndDate": "2025-03-21T04:00:45.000Z", + "submissionStartDate": "2025-03-07T04:01:17.000Z", + "submissionEndDate": "2025-03-21T04:13:18.000Z", + "track": "Data Science", + "type": "Marathon Match", + "legacyId": 30096741, + "currentPhase": { + "duration": 86400, + "scheduledEndDate": "2025-03-22T04:25:00.000Z", + "isOpen": true, + "name": "Post-Mortem", + "phaseId": "f308bdb4-d3da-43d8-942b-134dfbaf5c45", + "actualStartDate": "2025-03-21T04:25:51.000Z", + "description": "Post-Mortem Phase", + "id": "ea766761-365a-4d6b-8da7-685394f56bc9", + "constraints": [], + "scheduledStartDate": "2025-03-21T04:25:51.000Z", + "predecessor": "a93544bc-c165-4af4-b55e-18f3593b457a" + }, + "numOfCheckpointSubmissions": 0 + }, + { + "id": "37a54199-9fab-4f2f-8132-bbab6b11d382", + "name": "Test dev 3/7", + "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", + "trackId": "9b6fc876-f4d9-4ccb-9dfd-419247628825", + "legacy": { + "track": "DEVELOP", + "subTrack": "CODE", + "forumId": 0, + "directProjectId": 33413, + "reviewType": "COMMUNITY", + "confidentialityType": "public", + "pureV5Task": false, + "reviewScorecardId": 30002133 + }, + "description": "test", + "descriptionFormat": "markdown", + "metadata": [ + { + "name": "show_data_dashboard", + "value": "false" + } + ], + "timelineTemplateId": "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c", + "phases": [ + { + "duration": 432000, + "scheduledEndDate": "2025-03-12T03:59:02.000Z", + "actualEndDate": "2025-03-12T03:59:02.000Z", + "isOpen": false, + "name": "Registration", + "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", + "actualStartDate": "2025-03-07T03:50:30.000Z", + "description": "Registration Phase", + "id": "7710ecad-aff6-47b0-8dee-37de98fe2819", + "constraints": [ + { + "name": "Number of Registrants", + "value": 1 + } + ], + "scheduledStartDate": "2025-03-07T03:50:30.000Z" + }, + { + "duration": 432000, + "scheduledEndDate": "2025-03-12T03:59:03.000Z", + "actualEndDate": "2025-03-12T03:59:03.000Z", + "isOpen": false, + "name": "Submission", + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "actualStartDate": "2025-03-07T03:54:26.000Z", + "description": "Submission Phase", + "id": "a48abfc1-7a17-403a-8bb9-c38e02f87c4a", + "constraints": [], + "scheduledStartDate": "2025-03-07T03:54:26.000Z" + }, + { + "duration": 172800, + "scheduledEndDate": "2025-03-14T03:59:00.000Z", + "isOpen": true, + "name": "Review", + "phaseId": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "actualStartDate": "2025-03-12T03:59:03.000Z", + "description": "Review Phase", + "id": "86a9d0ba-6ea7-4045-b001-eb5185abaee3", + "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "constraints": [ + { + "name": "Scorecard", + "value": 30001031 + }, + { + "name": "Number of Reviewers", + "value": 2 + } + ], + "scheduledStartDate": "2025-03-12T03:59:03.000Z" + }, + { + "duration": 86400, + "scheduledEndDate": "2025-03-15T03:59:00.000Z", + "isOpen": false, + "name": "Appeals", + "phaseId": "1c24cfb3-5b0a-4dbd-b6bd-4b0dff5349c6", + "description": "Appeals Phase", + "id": "d6933b8d-882e-4ceb-ad2d-f865f6a1d0f7", + "predecessor": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "constraints": [ + { + "name": "View Response During Appeals", + "value": 0 + } + ], + "scheduledStartDate": "2025-03-14T03:59:00.000Z" + }, + { + "duration": 43200, + "scheduledEndDate": "2025-03-15T15:59:00.000Z", + "isOpen": false, + "name": "Appeals Response", + "phaseId": "797a6af7-cd3f-4436-9fca-9679f773bee9", + "description": "Appeals Response Phase", + "id": "5ceb1e84-ea46-4ebd-b1c2-5eeea5c39dee", + "predecessor": "1c24cfb3-5b0a-4dbd-b6bd-4b0dff5349c6", + "constraints": [], + "scheduledStartDate": "2025-03-15T03:59:00.000Z" + } + ], + "events": [], + "terms": [ + { + "roleId": "732339e7-8e30-49d7-9198-cccf9451e221", + "id": "317cd8f9-d66c-4f2a-8774-63c612d99cd4" + } + ], + "prizeSets": [ + { + "prizes": [ + { + "type": "USD", + "value": 2 + } + ], + "type": "placement" + }, + { + "prizes": [ + { + "type": "USD", + "value": 1 + } + ], + "type": "copilot" + } + ], + "tags": [], + "projectId": 100315, + "startDate": "2025-03-07T03:50:30.000Z", + "endDate": "2025-03-15T15:59:00.000Z", + "status": "Active", + "attachments": [], + "groups": [], + "discussions": [ + { + "provider": "vanilla", + "name": "Test dev 3/7 Discussion", + "id": "4fbba88e-64b5-4e46-b741-b128b2eafe36", + "type": "challenge", + "url": "https://vanilla.topcoder-dev.com/categories/37a54199-9fab-4f2f-8132-bbab6b11d382" + } + ], + "createdBy": "jcori", + "updatedBy": "tcwebservice", + "created": "2025-03-07T03:49:50.075Z", + "updated": "2025-03-12T03:59:03.822Z", + "overview": { + "totalPrizes": 2, + "type": "USD" + }, + "numOfSubmissions": 1, + "numOfRegistrants": 1, + "currentPhaseNames": [ + "Review" + ], + "registrationStartDate": "2025-03-07T03:50:30.149Z", + "registrationEndDate": "2025-03-12T03:59:02.000Z", + "submissionStartDate": "2025-03-07T03:54:26.000Z", + "submissionEndDate": "2025-03-12T03:59:03.000Z", + "track": "Development", + "type": "Challenge", + "legacyId": 30096740, + "currentPhase": { + "duration": 172800, + "scheduledEndDate": "2025-03-14T03:59:00.000Z", + "isOpen": true, + "name": "Review", + "phaseId": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "actualStartDate": "2025-03-12T03:59:03.000Z", + "description": "Review Phase", + "id": "86a9d0ba-6ea7-4045-b001-eb5185abaee3", + "constraints": [ + { + "name": "Scorecard", + "value": 30001031 + }, + { + "name": "Number of Reviewers", + "value": 2 + } + ], + "scheduledStartDate": "2025-03-12T03:59:03.000Z", + "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49" + }, + "numOfCheckpointSubmissions": 0 + }, + { + "id": "360550a3-3712-4784-a2af-911c1968896a", + "name": "Test Demo", + "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", + "trackId": "9b6fc876-f4d9-4ccb-9dfd-419247628825", + "legacy": { + "track": "DEVELOP", + "subTrack": "CODE", + "forumId": 0, + "directProjectId": 33413, + "reviewType": "COMMUNITY", + "confidentialityType": "public", + "pureV5Task": false, + "reviewScorecardId": 30002133 + }, + "description": "Test", + "descriptionFormat": "markdown", + "metadata": [ + { + "name": "show_data_dashboard", + "value": "false" + } + ], + "timelineTemplateId": "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c", + "phases": [ + { + "duration": 86400, + "scheduledEndDate": "2025-03-13T14:26:00.000Z", + "isOpen": true, + "name": "Post-Mortem", + "phaseId": "f308bdb4-d3da-43d8-942b-134dfbaf5c45", + "actualStartDate": "2025-03-12T14:26:59.000Z", + "description": "Post-Mortem Phase", + "id": "bb71190c-a916-4279-8866-2aec4358a5cb", + "predecessor": "a93544bc-c165-4af4-b55e-18f3593b457a", + "constraints": [], + "scheduledStartDate": "2025-03-12T14:26:59.000Z" + }, + { + "duration": 432000, + "scheduledEndDate": "2025-03-12T14:14:20.000Z", + "actualEndDate": "2025-03-12T14:14:20.000Z", + "isOpen": false, + "name": "Registration", + "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", + "actualStartDate": "2025-03-07T14:04:30.000Z", + "description": "Registration Phase", + "id": "b0330763-ff10-4d6c-a8bc-2480c52a1b58", + "constraints": [ + { + "name": "Number of Registrants", + "value": 1 + } + ], + "scheduledStartDate": "2025-03-07T14:04:30.000Z" + }, + { + "duration": 432000, + "scheduledEndDate": "2025-03-12T14:14:21.000Z", + "actualEndDate": "2025-03-12T14:14:21.000Z", + "isOpen": false, + "name": "Submission", + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "actualStartDate": "2025-03-07T14:04:31.000Z", + "description": "Submission Phase", + "id": "242883bc-2167-4963-9b8d-6debcfaf82eb", + "constraints": [], + "scheduledStartDate": "2025-03-07T14:04:31.000Z" + }, + { + "duration": 172800, + "scheduledEndDate": "2025-03-14T14:14:00.000Z", + "isOpen": false, + "name": "Review", + "phaseId": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "description": "Review Phase", + "id": "b1ad22ec-359d-4ea2-8b0e-740de10e8c94", + "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "constraints": [ + { + "name": "Scorecard", + "value": 30002133 + }, + { + "name": "Number of Reviewers", + "value": 2 + } + ], + "scheduledStartDate": "2025-03-12T14:14:21.000Z" + }, + { + "duration": 86400, + "scheduledEndDate": "2025-03-15T14:14:00.000Z", + "isOpen": false, + "name": "Appeals", + "phaseId": "1c24cfb3-5b0a-4dbd-b6bd-4b0dff5349c6", + "description": "Appeals Phase", + "id": "e77aafb1-84cb-4161-8ad8-945a175c5914", + "predecessor": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "constraints": [ + { + "name": "View Response During Appeals", + "value": 0 + } + ], + "scheduledStartDate": "2025-03-14T14:14:00.000Z" + }, + { + "duration": 43200, + "scheduledEndDate": "2025-03-16T02:14:00.000Z", + "isOpen": false, + "name": "Appeals Response", + "phaseId": "797a6af7-cd3f-4436-9fca-9679f773bee9", + "description": "Appeals Response Phase", + "id": "111e7c07-60d2-4977-9232-7981776c6564", + "predecessor": "1c24cfb3-5b0a-4dbd-b6bd-4b0dff5349c6", + "constraints": [], + "scheduledStartDate": "2025-03-15T14:14:00.000Z" + } + ], + "events": [], + "terms": [ + { + "roleId": "732339e7-8e30-49d7-9198-cccf9451e221", + "id": "317cd8f9-d66c-4f2a-8774-63c612d99cd4" + } + ], + "prizeSets": [ + { + "prizes": [ + { + "type": "USD", + "value": 1 + } + ], + "type": "placement" + } + ], + "tags": [], + "projectId": 100315, + "startDate": "2025-03-07T14:04:30.000Z", + "endDate": "2025-03-16T02:14:00.000Z", + "status": "Active", + "attachments": [], + "groups": [], + "discussions": [ + { + "provider": "vanilla", + "name": "Test Demo Discussion", + "id": "be801ff1-8676-4cba-a2ef-13630598bf52", + "type": "challenge", + "url": "https://vanilla.topcoder-dev.com/categories/360550a3-3712-4784-a2af-911c1968896a" + } + ], + "createdBy": "mess", + "updatedBy": "tcwebservice", + "created": "2025-03-06T13:56:26.781Z", + "updated": "2025-03-12T14:26:59.527Z", + "overview": { + "totalPrizes": 1, + "type": "USD" + }, + "numOfSubmissions": 0, + "numOfRegistrants": 0, + "currentPhaseNames": [ + "Post-Mortem" + ], + "registrationStartDate": "2025-03-07T13:56:25.000Z", + "registrationEndDate": "2025-03-12T14:14:20.000Z", + "submissionStartDate": "2025-03-07T14:04:31.000Z", + "submissionEndDate": "2025-03-12T14:14:21.000Z", + "track": "Development", + "type": "Challenge", + "legacyId": 30096739, + "currentPhase": { + "duration": 86400, + "scheduledEndDate": "2025-03-13T14:26:00.000Z", + "isOpen": true, + "name": "Post-Mortem", + "phaseId": "f308bdb4-d3da-43d8-942b-134dfbaf5c45", + "actualStartDate": "2025-03-12T14:26:59.000Z", + "description": "Post-Mortem Phase", + "id": "bb71190c-a916-4279-8866-2aec4358a5cb", + "constraints": [], + "scheduledStartDate": "2025-03-12T14:26:59.000Z", + "predecessor": "a93544bc-c165-4af4-b55e-18f3593b457a" + } + }, + { + "id": "2776bcc8-aa2d-4d1b-9af0-f569c627a94b", + "name": "design new", + "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", + "trackId": "5fa04185-041f-49a6-bfd1-fe82533cd6c8", + "legacy": { + "track": "DESIGN", + "subTrack": "WEB_DESIGNS", + "forumId": 0, + "directProjectId": 33413, + "reviewType": "INTERNAL", + "confidentialityType": "public", + "pureV5Task": false + }, + "description": "", + "descriptionFormat": "markdown", + "metadata": [], + "timelineTemplateId": "918f6a3e-1a63-4680-8b5e-deb95b1411e7", + "phases": [ + { + "duration": 518400, + "scheduledEndDate": "2025-03-13T09:03:45.000Z", + "isOpen": false, + "name": "Registration", + "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", + "description": "Registration Phase", + "id": "0f5deef7-f663-4d2d-96ef-922341c135bc", + "constraints": [], + "scheduledStartDate": "2025-03-07T09:03:45.000Z" + }, + { + "duration": 518400, + "scheduledEndDate": "2025-03-13T09:08:45.000Z", + "isOpen": false, + "name": "Submission", + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "description": "Submission Phase", + "id": "9e52655c-f3e4-4ad0-8bc9-868f5936a517", + "constraints": [], + "scheduledStartDate": "2025-03-07T09:08:45.000Z" + }, + { + "duration": 14400, + "scheduledEndDate": "2025-03-13T13:08:45.000Z", + "isOpen": false, + "name": "Screening", + "phaseId": "2d7d3d85-0b29-4989-b3b4-be7f2b1d0aa6", + "description": "Screening Phase", + "id": "3de72340-57b5-49d3-a652-f484bb9c0536", + "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "constraints": [], + "scheduledStartDate": "2025-03-13T09:08:45.000Z" + }, + { + "duration": 432000, + "scheduledEndDate": "2025-03-18T13:08:45.000Z", + "isOpen": false, + "name": "Review", + "phaseId": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "description": "Review Phase", + "id": "540fcd2e-4d49-487c-bcc4-2381dc4ee3a3", + "predecessor": "2d7d3d85-0b29-4989-b3b4-be7f2b1d0aa6", + "constraints": [], + "scheduledStartDate": "2025-03-13T13:08:45.000Z" + }, + { + "duration": 172800, + "scheduledEndDate": "2025-03-20T13:08:45.000Z", + "isOpen": false, + "name": "Approval", + "phaseId": "ad985cff-ad3e-44de-b54e-3992505ba0ae", + "description": "Approval Phase", + "id": "2433b99d-4d81-4071-ba77-394c34bfb449", + "predecessor": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "constraints": [], + "scheduledStartDate": "2025-03-18T13:08:45.000Z" + } + ], + "events": [], + "terms": [ + { + "roleId": "732339e7-8e30-49d7-9198-cccf9451e221", + "id": "317cd8f9-d66c-4f2a-8774-63c612d99cd4" + } + ], + "prizeSets": [], + "tags": [ + "Web Design" + ], + "projectId": 100315, + "startDate": "2025-03-07T09:03:45.000Z", + "endDate": "2025-03-20T13:08:45.000Z", + "status": "New", + "attachments": [], + "groups": [], + "discussions": [ + { + "provider": "vanilla", + "name": "design new Discussion", + "id": "5044919a-6ebd-4946-88b7-d32ce113a834", + "type": "challenge", + "url": "https://vanilla.topcoder-dev.com/categories/2776bcc8-aa2d-4d1b-9af0-f569c627a94b" + } + ], + "createdBy": "mess", + "updatedBy": "mess", + "created": "2025-03-06T09:03:47.019Z", + "updated": "2025-03-06T09:03:47.019Z", + "overview": { + "totalPrizes": 0 + }, + "numOfSubmissions": 0, + "numOfRegistrants": 0, + "currentPhaseNames": [], + "registrationStartDate": "2025-03-07T09:03:45.000Z", + "registrationEndDate": "2025-03-13T09:03:45.000Z", + "submissionStartDate": "2025-03-07T09:08:45.000Z", + "submissionEndDate": "2025-03-13T09:08:45.000Z", + "track": "Design", + "type": "Challenge" + }, + { + "id": "1d5d2b79-50d0-4aa4-8650-3a111b079d79", + "name": "Design ch mar 6", + "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", + "trackId": "5fa04185-041f-49a6-bfd1-fe82533cd6c8", + "legacy": { + "track": "DESIGN", + "subTrack": "WEB_DESIGNS", + "forumId": 0, + "directProjectId": 33413, + "reviewType": "INTERNAL", + "confidentialityType": "public", + "pureV5Task": false, + "screeningScorecardId": 30001610, + "reviewScorecardId": 30001610 + }, + "description": "Test", + "descriptionFormat": "markdown", + "metadata": [], + "timelineTemplateId": "918f6a3e-1a63-4680-8b5e-deb95b1411e7", + "phases": [ + { + "duration": 86400, + "scheduledEndDate": "2025-03-14T09:22:00.000Z", + "isOpen": true, + "name": "Post-Mortem", + "phaseId": "f308bdb4-d3da-43d8-942b-134dfbaf5c45", + "actualStartDate": "2025-03-13T09:22:13.000Z", + "description": "Post-Mortem Phase", + "id": "9ff7f741-2cb8-48f7-b76d-204d34143a8e", + "predecessor": "a93544bc-c165-4af4-b55e-18f3593b457a", + "constraints": [], + "scheduledStartDate": "2025-03-13T09:22:13.000Z" + }, + { + "duration": 518400, + "scheduledEndDate": "2025-03-13T09:09:37.000Z", + "actualEndDate": "2025-03-13T09:09:37.000Z", + "isOpen": false, + "name": "Registration", + "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", + "actualStartDate": "2025-03-07T09:03:44.000Z", + "description": "Registration Phase", + "id": "0dde8d2f-7775-4964-bdac-d7ef4bc4beba", + "constraints": [ + { + "name": "Number of Registrants", + "value": 1 + } + ], + "scheduledStartDate": "2025-03-07T09:03:44.000Z" + }, + { + "duration": 518400, + "scheduledEndDate": "2025-03-13T09:22:13.000Z", + "actualEndDate": "2025-03-13T09:22:13.000Z", + "isOpen": false, + "name": "Submission", + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "actualStartDate": "2025-03-07T09:16:17.000Z", + "description": "Submission Phase", + "id": "8e9adec9-9e19-4af3-866b-c5d8af772807", + "constraints": [], + "scheduledStartDate": "2025-03-07T09:16:17.000Z" + }, + { + "duration": 14400, + "scheduledEndDate": "2025-03-13T13:22:00.000Z", + "isOpen": false, + "name": "Screening", + "phaseId": "2d7d3d85-0b29-4989-b3b4-be7f2b1d0aa6", + "description": "Screening Phase", + "id": "e9a77e2d-8648-4008-a29b-9b20a3c2ba5c", + "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "constraints": [ + { + "name": "Scorecard", + "value": 30001610 + } + ], + "scheduledStartDate": "2025-03-13T09:22:13.000Z" + }, + { + "duration": 432000, + "scheduledEndDate": "2025-03-18T13:22:00.000Z", + "isOpen": false, + "name": "Review", + "phaseId": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "description": "Review Phase", + "id": "76410959-737a-4e8b-bcc9-9d95029f39bd", + "predecessor": "2d7d3d85-0b29-4989-b3b4-be7f2b1d0aa6", + "constraints": [ + { + "name": "Scorecard", + "value": 30001610 + }, + { + "name": "Number of Reviewers", + "value": 2 + } + ], + "scheduledStartDate": "2025-03-13T13:22:00.000Z" + }, + { + "duration": 172800, + "scheduledEndDate": "2025-03-20T13:22:00.000Z", + "isOpen": false, + "name": "Approval", + "phaseId": "ad985cff-ad3e-44de-b54e-3992505ba0ae", + "description": "Approval Phase", + "id": "f097f909-18b4-417e-8c48-ccad775ebe8c", + "predecessor": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "constraints": [ + { + "name": "Scorecard", + "value": 30001610 + }, + { + "name": "Number of Reviewers", + "value": 1 + } + ], + "scheduledStartDate": "2025-03-18T13:22:00.000Z" + } + ], + "events": [], + "terms": [ + { + "roleId": "732339e7-8e30-49d7-9198-cccf9451e221", + "id": "317cd8f9-d66c-4f2a-8774-63c612d99cd4" + } + ], + "prizeSets": [ + { + "prizes": [ + { + "type": "USD", + "value": 1 + } + ], + "type": "placement" + } + ], + "tags": [ + "Web Design" + ], + "projectId": 100315, + "startDate": "2025-03-07T09:03:44.000Z", + "endDate": "2025-03-20T13:22:00.000Z", + "status": "Active", + "attachments": [], + "groups": [], + "discussions": [ + { + "provider": "vanilla", + "name": "Design ch mar 6 Discussion", + "id": "53984bc7-d4bd-41aa-a608-a3bad73e47d7", + "type": "challenge", + "url": "https://vanilla.topcoder-dev.com/categories/1d5d2b79-50d0-4aa4-8650-3a111b079d79" + } + ], + "createdBy": "mess", + "updatedBy": "tcwebservice", + "created": "2025-03-06T09:02:06.100Z", + "updated": "2025-03-13T09:22:14.048Z", + "overview": { + "totalPrizes": 1, + "type": "USD" + }, + "numOfSubmissions": 0, + "numOfRegistrants": 0, + "currentPhaseNames": [ + "Post-Mortem" + ], + "registrationStartDate": "2025-03-07T09:02:04.000Z", + "registrationEndDate": "2025-03-13T09:09:37.000Z", + "submissionStartDate": "2025-03-07T09:16:17.000Z", + "submissionEndDate": "2025-03-13T09:22:13.000Z", + "track": "Design", + "type": "Challenge", + "legacyId": 30096738, + "currentPhase": { + "duration": 86400, + "scheduledEndDate": "2025-03-14T09:22:00.000Z", + "isOpen": true, + "name": "Post-Mortem", + "phaseId": "f308bdb4-d3da-43d8-942b-134dfbaf5c45", + "actualStartDate": "2025-03-13T09:22:13.000Z", + "description": "Post-Mortem Phase", + "id": "9ff7f741-2cb8-48f7-b76d-204d34143a8e", + "constraints": [], + "scheduledStartDate": "2025-03-13T09:22:13.000Z", + "predecessor": "a93544bc-c165-4af4-b55e-18f3593b457a" + } + } +] diff --git a/src/scripts/seed/ChallengeTimelineTemplate.json b/src/scripts/seed/ChallengeTimelineTemplate.json index 8a6c9a5d..5dd411af 100644 --- a/src/scripts/seed/ChallengeTimelineTemplate.json +++ b/src/scripts/seed/ChallengeTimelineTemplate.json @@ -1,114 +1,511 @@ -[ - { - "id": "6a29fccb-81ab-49f8-905d-0db0e840881a", - "trackId": "5fa04185-041f-49a6-bfd1-fe82533cd6c8", - "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", - "timelineTemplateId": "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c", - "isDefault": false - }, - { - "id": "edd528d7-b2d6-48e4-80ab-cfccc3cfb6cb", - "trackId": "5fa04185-041f-49a6-bfd1-fe82533cd6c8", - "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", - "timelineTemplateId": "d4201ca4-8437-4d63-9957-3f7708184b07", - "isDefault": true - }, - { - "id": "4a59472b-0743-4dae-9739-1f5b327e1255", - "trackId": "5fa04185-041f-49a6-bfd1-fe82533cd6c8", - "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", - "timelineTemplateId": "2d0807fa-ece1-4328-a260-76f5f6b559e0", - "isDefault": false - }, - { - "id": "fccd933a-34c3-497f-850e-00d6f499e703", - "trackId": "5fa04185-041f-49a6-bfd1-fe82533cd6c8", - "typeId": "dc876fa4-ef2d-4eee-b701-b555fcc6544c", - "timelineTemplateId": "0a0fed34-cb5a-47f5-b0cb-6e2ee7de8dcb", - "isDefault": true - }, - { - "id": "26de5868-f405-46d6-bf82-f3966b2a382d", - "trackId": "5fa04185-041f-49a6-bfd1-fe82533cd6c8", - "typeId": "ecd58c69-238f-43a4-a4bb-d172719b9f31", - "timelineTemplateId": "53a307ce-b4b3-4d6f-b9a1-3741a58f77e6", - "isDefault": true - }, - { - "id": "4df06ca4-367f-4768-93b4-94ba18625983", - "trackId": "9b6fc876-f4d9-4ccb-9dfd-419247628825", - "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", - "timelineTemplateId": "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c", - "isDefault": true - }, - { - "id": "140b24d5-5259-4449-bc1f-3780f3b01555", - "trackId": "9b6fc876-f4d9-4ccb-9dfd-419247628825", - "typeId": "dc876fa4-ef2d-4eee-b701-b555fcc6544c", - "timelineTemplateId": "0a0fed34-cb5a-47f5-b0cb-6e2ee7de8dcb", - "isDefault": true - }, - { - "id": "3cd4e42f-141f-4118-950c-fb815569fb34", - "trackId": "9b6fc876-f4d9-4ccb-9dfd-419247628825", - "typeId": "ecd58c69-238f-43a4-a4bb-d172719b9f31", - "timelineTemplateId": "53a307ce-b4b3-4d6f-b9a1-3741a58f77e6", - "isDefault": true - }, - { - "id": "87ab69d5-09ec-45ef-b3d1-f6f6f1fdf2f3", - "trackId": "c0f5d461-8219-4c14-878a-c3a3f356466d", - "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", - "timelineTemplateId": "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c", - "isDefault": true - }, - { - "id": "9e4da450-d29a-44e6-aa80-26d9d5798637", - "trackId": "c0f5d461-8219-4c14-878a-c3a3f356466d", - "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", - "timelineTemplateId": "6969125a-a12f-4b89-8de6-e66b0056f36b", - "isDefault": false - }, - { - "id": "92207659-e2e3-4578-85d5-02a36f384907", - "trackId": "c0f5d461-8219-4c14-878a-c3a3f356466d", - "typeId": "dc876fa4-ef2d-4eee-b701-b555fcc6544c", - "timelineTemplateId": "0a0fed34-cb5a-47f5-b0cb-6e2ee7de8dcb", - "isDefault": true - }, - { - "id": "ab235f79-6606-41b2-afaf-4956824fcbcc", - "trackId": "c0f5d461-8219-4c14-878a-c3a3f356466d", - "typeId": "ecd58c69-238f-43a4-a4bb-d172719b9f31", - "timelineTemplateId": "53a307ce-b4b3-4d6f-b9a1-3741a58f77e6", - "isDefault": true - }, - { - "id": "1be20f5f-9356-49cf-b3df-a7be8099b5d9", - "trackId": "36e6a8d0-7e1e-4608-a673-64279d99c115", - "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", - "timelineTemplateId": "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c", - "isDefault": true - }, - { - "id": "71b5e844-9847-43b0-aa66-9bcc620704b3", - "trackId": "36e6a8d0-7e1e-4608-a673-64279d99c115", - "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", - "timelineTemplateId": "f1bcb2c7-3ee4-4fb5-8d0b-efe52c015963", - "isDefault": false - }, - { - "id": "00660d04-1e84-467b-a450-281cb4ec4137", - "trackId": "36e6a8d0-7e1e-4608-a673-64279d99c115", - "typeId": "dc876fa4-ef2d-4eee-b701-b555fcc6544c", - "timelineTemplateId": "0a0fed34-cb5a-47f5-b0cb-6e2ee7de8dcb", - "isDefault": true - }, - { - "id": "68ae6341-f571-4be1-9d86-44773c294538", - "trackId": "36e6a8d0-7e1e-4608-a673-64279d99c115", - "typeId": "ecd58c69-238f-43a4-a4bb-d172719b9f31", - "timelineTemplateId": "53a307ce-b4b3-4d6f-b9a1-3741a58f77e6", - "isDefault": true - } -] +[{ + "id": "87ab69d5-09ec-45ef-b3d1-f6f6f1fdf2f3", + "trackId": "c0f5d461-8219-4c14-878a-c3a3f356466d", + "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", + "timelineTemplateId": "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c", + "isDefault": false, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "d8c129bc-3b4a-4bbb-acd1-837bf637b5c0", + "trackId": "c0f5d461-8219-4c14-878a-c3a3f356466d", + "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", + "timelineTemplateId": "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "101a2035-646f-44c6-bcc9-95d97e651cef", + "trackId": "c0f5d461-8219-4c14-878a-c3a3f356466d", + "typeId": "929bc408-9cf2-4b3e-ba71-adfbf693046c", + "timelineTemplateId": "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "26de5868-f405-46d6-bf82-f3966b2a382d", + "trackId": "5fa04185-041f-49a6-bfd1-fe82533cd6c8", + "typeId": "ecd58c69-238f-43a4-a4bb-d172719b9f31", + "timelineTemplateId": "53a307ce-b4b3-4d6f-b9a1-3741a58f77e6", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "654f61c5-e7fa-4f22-8da0-13a6c8e4c265", + "trackId": "5fa04185-041f-49a6-bfd1-fe82533cd6c8", + "typeId": "929bc408-9cf2-4b3e-ba71-adfbf693046c", + "timelineTemplateId": "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "cc5079e9-0b2e-4047-b068-a462cd007f70", + "trackId": "9b6fc876-f4d9-4ccb-9dfd-419247628825", + "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", + "timelineTemplateId": "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "fccd933a-34c3-497f-850e-00d6f499e703", + "trackId": "5fa04185-041f-49a6-bfd1-fe82533cd6c8", + "typeId": "dc876fa4-ef2d-4eee-b701-b555fcc6544c", + "timelineTemplateId": "5c4601cd-3e85-4f76-be29-13b240c80fbb", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "d1fd1aef-0a7b-4fa1-8441-1c2c728eefb7", + "trackId": "36e6a8d0-7e1e-4608-a673-64279d99c115", + "typeId": "dc876fa4-ef2d-4eee-b701-b555fcc6544c", + "timelineTemplateId": "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c", + "isDefault": false, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "d824e949-6a3a-421e-8a72-83d632ae45d7", + "trackId": "36e6a8d0-7e1e-4608-a673-64279d99c115", + "typeId": "ecd58c69-238f-43a4-a4bb-d172719b9f31", + "timelineTemplateId": "06b5743d-c059-4784-98fa-32c7dde3646c", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "afc7156f-6569-45e5-8627-fc6953bd0a51", + "trackId": "36e6a8d0-7e1e-4608-a673-64279d99c115", + "typeId": "dc876fa4-ef2d-4eee-b701-b555fcc6544c", + "timelineTemplateId": "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c", + "isDefault": false, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "3cd4e42f-141f-4118-950c-fb815569fb34", + "trackId": "9b6fc876-f4d9-4ccb-9dfd-419247628825", + "typeId": "ecd58c69-238f-43a4-a4bb-d172719b9f31", + "timelineTemplateId": "53a307ce-b4b3-4d6f-b9a1-3741a58f77e6", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "b61fc7cf-cbd8-4867-a2ec-8fb4d7cad368", + "trackId": "36e6a8d0-7e1e-4608-a673-64279d99c115", + "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", + "timelineTemplateId": "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "b2595b50-d99b-415a-916d-4f6033e846f0", + "trackId": "5fa04185-041f-49a6-bfd1-fe82533cd6c8", + "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", + "timelineTemplateId": "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "00660d04-1e84-467b-a450-281cb4ec4137", + "trackId": "36e6a8d0-7e1e-4608-a673-64279d99c115", + "typeId": "dc876fa4-ef2d-4eee-b701-b555fcc6544c", + "timelineTemplateId": "0a0fed34-cb5a-47f5-b0cb-6e2ee7de8dcb", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "9e4da450-d29a-44e6-aa80-26d9d5798637", + "trackId": "c0f5d461-8219-4c14-878a-c3a3f356466d", + "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", + "timelineTemplateId": "6969125a-a12f-4b89-8de6-e66b0056f36b", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "a5bbaf91-c239-4d17-b660-aa7287edae14", + "trackId": "c0f5d461-8219-4c14-878a-c3a3f356466d", + "typeId": "ecd58c69-238f-43a4-a4bb-d172719b9f31", + "timelineTemplateId": "06b5743d-c059-4784-98fa-32c7dde3646c", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "dbc5572e-484e-4c72-b83b-d8e2f1a90336", + "trackId": "36e6a8d0-7e1e-4608-a673-64279d99c115", + "typeId": "dc876fa4-ef2d-4eee-b701-b555fcc6544c", + "timelineTemplateId": "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c", + "isDefault": false, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "b78d8d0f-36c3-4345-9fea-338326e50b61", + "trackId": "36e6a8d0-7e1e-4608-a673-64279d99c115", + "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", + "timelineTemplateId": "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "df3885ed-5e63-489d-a57d-0f24d56d0242", + "trackId": "9b6fc876-f4d9-4ccb-9dfd-419247628825", + "typeId": "ecd58c69-238f-43a4-a4bb-d172719b9f31", + "timelineTemplateId": "06b5743d-c059-4784-98fa-32c7dde3646c", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "92207659-e2e3-4578-85d5-02a36f384907", + "trackId": "c0f5d461-8219-4c14-878a-c3a3f356466d", + "typeId": "dc876fa4-ef2d-4eee-b701-b555fcc6544c", + "timelineTemplateId": "0a0fed34-cb5a-47f5-b0cb-6e2ee7de8dcb", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "4d8290be-d0d0-496a-b3fd-68a951d5b862", + "trackId": "36e6a8d0-7e1e-4608-a673-64279d99c115", + "typeId": "929bc408-9cf2-4b3e-ba71-adfbf693046c", + "timelineTemplateId": "6969125a-a12f-4b89-8de6-e66b0056f36b", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "4a59472b-0743-4dae-9739-1f5b327e1255", + "trackId": "5fa04185-041f-49a6-bfd1-fe82533cd6c8", + "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", + "timelineTemplateId": "2d0807fa-ece1-4328-a260-76f5f6b559e0", + "isDefault": false, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "71b5e844-9847-43b0-aa66-9bcc620704b3", + "trackId": "36e6a8d0-7e1e-4608-a673-64279d99c115", + "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", + "timelineTemplateId": "f1bcb2c7-3ee4-4fb5-8d0b-efe52c015963", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "68ae6341-f571-4be1-9d86-44773c294538", + "trackId": "36e6a8d0-7e1e-4608-a673-64279d99c115", + "typeId": "ecd58c69-238f-43a4-a4bb-d172719b9f31", + "timelineTemplateId": "53a307ce-b4b3-4d6f-b9a1-3741a58f77e6", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "2334a675-6ca0-4285-863a-0d7c35466c90", + "trackId": "36e6a8d0-7e1e-4608-a673-64279d99c115", + "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", + "timelineTemplateId": "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "7be8f0ca-e07e-455d-a13e-e10d286c5089", + "trackId": "5fa04185-041f-49a6-bfd1-fe82533cd6c8", + "typeId": "929bc408-9cf2-4b3e-ba71-adfbf693046c", + "timelineTemplateId": "6969125a-a12f-4b89-8de6-e66b0056f36b", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "32c23f20-33fe-43d9-be6e-d9be83863566", + "trackId": "36e6a8d0-7e1e-4608-a673-64279d99c115", + "typeId": "dc876fa4-ef2d-4eee-b701-b555fcc6544c", + "timelineTemplateId": "06b5743d-c059-4784-98fa-32c7dde3646c", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "c4a4da55-ff93-4065-8b3a-256344c41c90", + "trackId": "c0f5d461-8219-4c14-878a-c3a3f356466d", + "typeId": "dc876fa4-ef2d-4eee-b701-b555fcc6544c", + "timelineTemplateId": "06b5743d-c059-4784-98fa-32c7dde3646c", + "isDefault": false, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "087b7949-2283-4500-8480-1b4cccd49278", + "trackId": "5fa04185-041f-49a6-bfd1-fe82533cd6c8", + "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", + "timelineTemplateId": "918f6a3e-1a63-4680-8b5e-deb95b1411e7", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "140b24d5-5259-4449-bc1f-3780f3b01555", + "trackId": "9b6fc876-f4d9-4ccb-9dfd-419247628825", + "typeId": "dc876fa4-ef2d-4eee-b701-b555fcc6544c", + "timelineTemplateId": "0a0fed34-cb5a-47f5-b0cb-6e2ee7de8dcb", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "e89394b0-3bc4-420a-a405-640e202802c3", + "trackId": "36e6a8d0-7e1e-4608-a673-64279d99c115", + "typeId": "dc876fa4-ef2d-4eee-b701-b555fcc6544c", + "timelineTemplateId": "0a0fed34-cb5a-47f5-b0cb-6e2ee7de8dcb", + "isDefault": false, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "0465e63a-3c01-4477-ab3b-dddde176987d", + "trackId": "36e6a8d0-7e1e-4608-a673-64279d99c115", + "typeId": "ecd58c69-238f-43a4-a4bb-d172719b9f31", + "timelineTemplateId": "06b5743d-c059-4784-98fa-32c7dde3646c", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "052d4cdd-677e-4cc3-a739-bc40a469014a", + "trackId": "9b6fc876-f4d9-4ccb-9dfd-419247628825", + "typeId": "929bc408-9cf2-4b3e-ba71-adfbf693046c", + "timelineTemplateId": "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "edd528d7-b2d6-48e4-80ab-cfccc3cfb6cb", + "trackId": "5fa04185-041f-49a6-bfd1-fe82533cd6c8", + "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", + "timelineTemplateId": "d4201ca4-8437-4d63-9957-3f7708184b07", + "isDefault": false, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "42a33445-4c06-47bd-9200-daabb9690ff0", + "trackId": "5fa04185-041f-49a6-bfd1-fe82533cd6c8", + "typeId": "dc876fa4-ef2d-4eee-b701-b555fcc6544c", + "timelineTemplateId": "06b5743d-c059-4784-98fa-32c7dde3646c", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "62e1fe80-f016-4e0d-a518-ed2fb0a279e3", + "trackId": "9b6fc876-f4d9-4ccb-9dfd-419247628825", + "typeId": "929bc408-9cf2-4b3e-ba71-adfbf693046c", + "timelineTemplateId": "6969125a-a12f-4b89-8de6-e66b0056f36b", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "532b69b4-aa0d-4078-9011-d595005b6cd9", + "trackId": "36e6a8d0-7e1e-4608-a673-64279d99c115", + "typeId": "929bc408-9cf2-4b3e-ba71-adfbf693046c", + "timelineTemplateId": "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "1be20f5f-9356-49cf-b3df-a7be8099b5d9", + "trackId": "36e6a8d0-7e1e-4608-a673-64279d99c115", + "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", + "timelineTemplateId": "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c", + "isDefault": false, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "ab235f79-6606-41b2-afaf-4956824fcbcc", + "trackId": "c0f5d461-8219-4c14-878a-c3a3f356466d", + "typeId": "ecd58c69-238f-43a4-a4bb-d172719b9f31", + "timelineTemplateId": "53a307ce-b4b3-4d6f-b9a1-3741a58f77e6", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "190bbc0e-6ddd-4149-bf79-460d21620da6", + "trackId": "36e6a8d0-7e1e-4608-a673-64279d99c115", + "typeId": "dc876fa4-ef2d-4eee-b701-b555fcc6544c", + "timelineTemplateId": "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c", + "isDefault": false, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "1a459034-d36c-458f-b770-5adae6ac07c2", + "trackId": "c0f5d461-8219-4c14-878a-c3a3f356466d", + "typeId": "929bc408-9cf2-4b3e-ba71-adfbf693046c", + "timelineTemplateId": "6969125a-a12f-4b89-8de6-e66b0056f36b", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "26a65014-bf06-42ec-a9b5-4e3e835df507", + "trackId": "36e6a8d0-7e1e-4608-a673-64279d99c115", + "typeId": "929bc408-9cf2-4b3e-ba71-adfbf693046c", + "timelineTemplateId": "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "762694a4-48ee-41ae-8267-7bff4275873d", + "trackId": "36e6a8d0-7e1e-4608-a673-64279d99c115", + "typeId": "929bc408-9cf2-4b3e-ba71-adfbf693046c", + "timelineTemplateId": "6969125a-a12f-4b89-8de6-e66b0056f36b", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "4689c430-76f2-4f90-a9f8-0131393fc01a", + "trackId": "36e6a8d0-7e1e-4608-a673-64279d99c115", + "typeId": "dc876fa4-ef2d-4eee-b701-b555fcc6544c", + "timelineTemplateId": "06b5743d-c059-4784-98fa-32c7dde3646c", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "7564ac1d-31a2-4db5-abb7-64e027cb2d20", + "trackId": "9b6fc876-f4d9-4ccb-9dfd-419247628825", + "typeId": "dc876fa4-ef2d-4eee-b701-b555fcc6544c", + "timelineTemplateId": "517e76b0-8824-4e72-9b48-a1ebde1793a8", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "4df06ca4-367f-4768-93b4-94ba18625983", + "trackId": "9b6fc876-f4d9-4ccb-9dfd-419247628825", + "typeId": "927abff4-7af9-4145-8ba1-577c16e64e2e", + "timelineTemplateId": "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "530ceee9-1cbe-49db-90b0-3ddb261c19ce", + "trackId": "36e6a8d0-7e1e-4608-a673-64279d99c115", + "typeId": "dc876fa4-ef2d-4eee-b701-b555fcc6544c", + "timelineTemplateId": "0a0fed34-cb5a-47f5-b0cb-6e2ee7de8dcb", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "bb7d2bbd-fdf3-4cdf-ab0a-132b33ee00e4", + "trackId": "c0f5d461-8219-4c14-878a-c3a3f356466d", + "typeId": "dc876fa4-ef2d-4eee-b701-b555fcc6544c", + "timelineTemplateId": "06b5743d-c059-4784-98fa-32c7dde3646c", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "d6ee0b38-2045-46ed-99fc-6010037e8f9c", + "trackId": "9b6fc876-f4d9-4ccb-9dfd-419247628825", + "typeId": "dc876fa4-ef2d-4eee-b701-b555fcc6544c", + "timelineTemplateId": "06b5743d-c059-4784-98fa-32c7dde3646c", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "d926946e-cd55-4d6b-83bf-55571cf16622", + "trackId": "36e6a8d0-7e1e-4608-a673-64279d99c115", + "typeId": "dc876fa4-ef2d-4eee-b701-b555fcc6544c", + "timelineTemplateId": "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c", + "isDefault": false, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}, { + "id": "83c33ca9-c253-4d97-bd4c-42c13b76a077", + "trackId": "5fa04185-041f-49a6-bfd1-fe82533cd6c8", + "typeId": "ecd58c69-238f-43a4-a4bb-d172719b9f31", + "timelineTemplateId": "06b5743d-c059-4784-98fa-32c7dde3646c", + "isDefault": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" +}] \ No newline at end of file diff --git a/src/scripts/seed/ChallengeTrack.json b/src/scripts/seed/ChallengeTrack.json index 08be6cbe..10ca9afb 100644 --- a/src/scripts/seed/ChallengeTrack.json +++ b/src/scripts/seed/ChallengeTrack.json @@ -1,30 +1,50 @@ [ - { - "id": "5fa04185-041f-49a6-bfd1-fe82533cd6c8", - "name": "Design", - "description": "", - "isActive": true, - "abbreviation": "Des" - }, { "id": "9b6fc876-f4d9-4ccb-9dfd-419247628825", "name": "Development", - "description": "", "isActive": true, - "abbreviation": "Dev" + "abbreviation": "Dev", + "legacyId": 1, + "track": "DEVELOP", + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" }, { - "id": "c0f5d461-8219-4c14-878a-c3a3f356466d", - "name": "Data Science", - "description": "", - "isActive": true, - "abbreviation": "DS" + "id": "c0f5d461-8219-4c14-878a-c3a3f356466d", + "name": "Data Science", + "isActive": true, + "abbreviation": "DS", + "legacyId": 2, + "track": "DATA_SCIENCE", + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" }, { - "id": "36e6a8d0-7e1e-4608-a673-64279d99c115", - "name": "Quality Assurance", - "description": "", - "isActive": true, - "abbreviation": "QA" + "id": "5fa04185-041f-49a6-bfd1-fe82533cd6c8", + "name": "Design", + "isActive": true, + "abbreviation": "Des", + "legacyId": 3, + "track": "DESIGN", + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "36e6a8d0-7e1e-4608-a673-64279d99c115", + "name": "Quality Assurance", + "isActive": true, + "abbreviation": "QA", + "legacyId": 4, + "track": "QA", + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" } ] diff --git a/src/scripts/seed/ChallengeType.json b/src/scripts/seed/ChallengeType.json index 3656f645..20ee5ade 100644 --- a/src/scripts/seed/ChallengeType.json +++ b/src/scripts/seed/ChallengeType.json @@ -1,26 +1,50 @@ [ { - "id": "927abff4-7af9-4145-8ba1-577c16e64e2e", - "name": "Challenge", - "description": "A Multi-person Competition with Reviews and Winners", - "isActive": true, - "isTask": false, - "abbreviation": "CH" + "id": "ecd58c69-238f-43a4-a4bb-d172719b9f31", + "name": "Task", + "description": "An assignment earned by a sole competitor to demonstrate a specific skill set.", + "isActive": true, + "isTask": true, + "abbreviation": "TSK", + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" }, { - "id": "dc876fa4-ef2d-4eee-b701-b555fcc6544c", - "name": "First2Finish", - "description": "A challenge where the first submission that satisfies the spec wins", - "isActive": true, - "isTask": false, - "abbreviation": "F2F" + "id": "929bc408-9cf2-4b3e-ba71-adfbf693046c", + "name": "Marathon Match", + "description": "A match predicated on solving one problem using only what is deemed the best method", + "isActive": true, + "isTask": false, + "abbreviation": "MM", + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" }, { - "id": "ecd58c69-238f-43a4-a4bb-d172719b9f31", - "name": "Task", - "description": "A piece of work assigned to one person", - "isActive": true, - "isTask": true, - "abbreviation": "TSK" + "id": "927abff4-7af9-4145-8ba1-577c16e64e2e", + "name": "Challenge", + "description": "A competition-driven entity with a host of score-based challenges and rankings.", + "isActive": true, + "isTask": false, + "abbreviation": "CH", + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "dc876fa4-ef2d-4eee-b701-b555fcc6544c", + "name": "First2Finish", + "description": "A contest in which the winner is set by being the first to submit a completed task.", + "isActive": true, + "isTask": false, + "abbreviation": "F2F", + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" } ] diff --git a/src/scripts/seed/Phase.json b/src/scripts/seed/Phase.json index f27e5f0f..b89745e2 100644 --- a/src/scripts/seed/Phase.json +++ b/src/scripts/seed/Phase.json @@ -1,128 +1,211 @@ [ { - "id": "a93544bc-c165-4af4-b55e-18f3593b457a", - "name": "Registration", - "description": "Registration Phase", - "isOpen": true, - "duration": 259200 - }, - { - "id": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", - "name": "Submission", - "description": "Submission Phase", - "isOpen": true, - "duration": 259200 - }, - { - "id": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", - "name": "Review", - "description": "Review Phase", - "isOpen": true, - "duration": 172800 - }, - { - "id": "2d7d3d85-0b29-4989-b3b4-be7f2b1d0aa6", - "name": "Screening", - "description": "Screening Phase", - "isOpen": true, - "duration": 86400 - }, - { - "id": "1c24cfb3-5b0a-4dbd-b6bd-4b0dff5349c6", - "name": "Appeals", - "description": "Appeals Phase", - "isOpen": true, - "duration": 86400 - }, - { - "id": "797a6af7-cd3f-4436-9fca-9679f773bee9", - "name": "Appeals Response", - "description": "Appeals Response Phase", - "isOpen": true, - "duration": 86400 - }, - { - "id": "3e2afca6-9542-4763-a135-96b33f12c082", - "name": "Final Fix", - "description": "Final Fixes Phase", - "isOpen": true, - "duration": 86400 - }, - { - "id": "ad985cff-ad3e-44de-b54e-3992505ba0ae", - "name": "Approval", - "description": "Approval Phase", - "isOpen": true, - "duration": 86400 - }, - { - "id": "2691ed2b-8574-4f16-929a-35ac94e1c3ee", - "name": "Aggregation", - "description": "Aggregation Phase", - "isOpen": true, - "duration": 259200 - }, - { - "id": "a290be40-02eb-48df-822b-71971c00403f", - "name": "Aggregation Review", - "description": "Aggregation Review Phase", - "isOpen": true, - "duration": 259200 - }, - { - "id": "f3acaf26-1dd5-42ae-9f0d-8eb0fd24ae59", - "name": "Final Review", - "description": "Final Review Phase", - "isOpen": true, - "duration": 259200 - }, - { - "id": "f308bdb4-d3da-43d8-942b-134dfbaf5c45", - "name": "Post-Mortem", - "description": "Post-Mortem Phase", - "isOpen": true, - "duration": 259200 - }, - { - "id": "fb21431c-119e-4bc7-b447-d0af3f2be6b4", - "name": "Specification Submission", - "description": "Specification Submission Phase", - "isOpen": true, - "duration": 259200 - }, - { - "id": "2752454b-0952-4a42-a4f0-f3fb88a9b065", - "name": "Specification Review", - "description": "Specification Review Phase", - "isOpen": true, - "duration": 259200 - }, - { - "id": "d8a2cdbe-84d1-4687-ab75-78a6a7efdcc8", - "name": "Checkpoint Submission", - "description": "Checkpoint Submission Phase", - "isOpen": true, - "duration": 259200 - }, - { - "id": "ce1afb4c-74f9-496b-9e4b-087ae73ab032", - "name": "Checkpoint Screening", - "description": "Checkpoint Screening Phase", - "isOpen": true, - "duration": 259200 - }, - { - "id": "84b43897-2aab-44d6-a95a-42c433657eed", - "name": "Checkpoint Review", - "description": "Checkpoint Review Phase", - "isOpen": true, - "duration": 259200 - }, - { - "id": "003a4b14-de5d-43fc-9e35-835dbeb6af1f", - "name": "Iterative Review", - "description": "Iterative Review Phase", - "isOpen": true, - "duration": 259200 + "id": "cce96447-ec6a-4ac0-a60d-632e76799099", + "name": "Open", + "description": "Challenge Registration & Submission Phase", + "isOpen": true, + "duration": 172800, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "name": "Review", + "description": "Review Phase", + "isOpen": true, + "duration": 172800, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "a93544bc-c165-4af4-b55e-18f3593b457a", + "name": "Registration", + "description": "Registration Phase", + "isOpen": true, + "duration": 259200, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "f3acaf26-1dd5-42ae-9f0d-8eb0fd24ae59", + "name": "Final Review", + "description": "Final Review Phase", + "isOpen": true, + "duration": 259200, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "fb21431c-119e-4bc7-b447-d0af3f2be6b4", + "name": "Specification Submission", + "description": "Specification Submission Phase", + "isOpen": true, + "duration": 259200, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "3e2afca6-9542-4763-a135-96b33f12c082", + "name": "Final Fix", + "description": "Final Fixes Phase", + "isOpen": true, + "duration": 86400, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "d8a2cdbe-84d1-4687-ab75-78a6a7efdcc8", + "name": "Checkpoint Submission", + "description": "Checkpoint Submission Phase", + "isOpen": true, + "duration": 259200, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "797a6af7-cd3f-4436-9fca-9679f773bee9", + "name": "Appeals Response", + "description": "Appeals Response Phase", + "isOpen": true, + "duration": 86400, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "2691ed2b-8574-4f16-929a-35ac94e1c3ee", + "name": "Aggregation", + "description": "Aggregation Phase", + "isOpen": true, + "duration": 259200, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "ce1afb4c-74f9-496b-9e4b-087ae73ab032", + "name": "Checkpoint Screening", + "description": "Checkpoint Screening Phase", + "isOpen": true, + "duration": 259200, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "a290be40-02eb-48df-822b-71971c00403f", + "name": "Aggregation Review", + "description": "Aggregation Review Phase", + "isOpen": true, + "duration": 259200, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "1c24cfb3-5b0a-4dbd-b6bd-4b0dff5349c6", + "name": "Appeals", + "description": "Appeals Phase", + "isOpen": true, + "duration": 86400, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "003a4b14-de5d-43fc-9e35-835dbeb6af1f", + "name": "Iterative Review", + "description": "Iterative Review Phase", + "isOpen": true, + "duration": 259200, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "84b43897-2aab-44d6-a95a-42c433657eed", + "name": "Checkpoint Review", + "description": "Checkpoint Review Phase", + "isOpen": true, + "duration": 259200, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "name": "Submission", + "description": "Submission Phase", + "isOpen": true, + "duration": 259200, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "2d7d3d85-0b29-4989-b3b4-be7f2b1d0aa6", + "name": "Screening", + "description": "Screening Phase", + "isOpen": true, + "duration": 86400, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "f308bdb4-d3da-43d8-942b-134dfbaf5c45", + "name": "Post-Mortem", + "description": "Post-Mortem Phase", + "isOpen": true, + "duration": 259200, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "2752454b-0952-4a42-a4f0-f3fb88a9b065", + "name": "Specification Review", + "description": "Specification Review Phase", + "isOpen": true, + "duration": 259200, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "ad985cff-ad3e-44de-b54e-3992505ba0ae", + "name": "Approval", + "description": "Approval Phase", + "isOpen": true, + "duration": 86400, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" } ] diff --git a/src/scripts/seed/TimelineTemplate.json b/src/scripts/seed/TimelineTemplate.json index 19c026fc..65494525 100644 --- a/src/scripts/seed/TimelineTemplate.json +++ b/src/scripts/seed/TimelineTemplate.json @@ -1,195 +1,411 @@ [ { - "id": "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c", - "name": "Default Challenge", - "description": "Default Challenge Timeline", - "isActive": true, - "phases": [ - { - "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", - "defaultDuration": 432000 - }, - { - "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", - "defaultDuration": 432000 - }, - { - "phaseId": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", - "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", - "defaultDuration": 172800 - }, - { - "phaseId": "1c24cfb3-5b0a-4dbd-b6bd-4b0dff5349c6", - "predecessor": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", - "defaultDuration": 86400 - }, - { - "phaseId": "797a6af7-cd3f-4436-9fca-9679f773bee9", - "predecessor": "1c24cfb3-5b0a-4dbd-b6bd-4b0dff5349c6", - "defaultDuration": 43200 - } - ] + "id": "6969125a-a12f-4b89-8de6-e66b0056f36b", + "name": "Marathon Match", + "description": "Standard Marathon Match", + "isActive": true, + "phases": [ + { + "id": "3e33c46d-015a-4dd7-8ddd-2711026b5f7d", + "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", + "defaultDuration": 1209600 + }, + { + "id": "4bdc8ed2-0093-4453-bf7d-ea686ad67448", + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "defaultDuration": 1209600 + }, + { + "id": "ac53938a-4498-41f4-8cc2-3f7dbdad5241", + "phaseId": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "defaultDuration": 604800, + "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49" + } + ], + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" }, - { - "id": "f1bcb2c7-3ee4-4fb5-8d0b-efe52c015963", - "name": "QA", - "description": "Standard QA Challenge", - "isActive": true, - "phases": [ - { - "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", - "defaultDuration": 172800 - }, - { - "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", - "defaultDuration": 345600 - }, - { - "phaseId": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", - "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", - "defaultDuration": 172800 - } - ] + "id": "53a307ce-b4b3-4d6f-b9a1-3741a58f77e6", + "name": "Default Task", + "description": "Task Timeline", + "isActive": true, + "phases": [ + { + "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", + "defaultDuration": 864000, + "id": "76cf267d-aaf3-488d-b5d0-bba20c274f59" + }, + { + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "defaultDuration": 864000, + "id": "7c52bab2-86c6-40c1-b600-5a9634cdffd7" + }, + { + "phaseId": "003a4b14-de5d-43fc-9e35-835dbeb6af1f", + "defaultDuration": 86400, + "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "id": "464f1ca9-23f5-4fcd-a5f2-cb0d042837cb" + } + ], + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" }, { - "id": "6969125a-a12f-4b89-8de6-e66b0056f36b", - "name": "Marathon Match", - "description": "Standard Marathon Match", - "isActive": true, - "phases": [ - { - "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", - "defaultDuration": 1209600 - }, - { - "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", - "defaultDuration": 1209600 - }, - { - "phaseId": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", - "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", - "defaultDuration": 604800 - } - ] + "id": "2d0807fa-ece1-4328-a260-76f5f6b559e0", + "name": "RUX", + "description": "Design - Rapid User Experience", + "isActive": true, + "phases": [ + { + "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", + "defaultDuration": 172800, + "id": "9b268793-79e0-4add-a4b2-b48bedf1286c" + }, + { + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "defaultDuration": 172800, + "id": "5a3f7d12-0b15-4960-bb93-c2e6b5a41ceb" + }, + { + "phaseId": "2d7d3d85-0b29-4989-b3b4-be7f2b1d0aa6", + "defaultDuration": 7200, + "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "id": "fbbc752b-7e30-4b9f-bc56-a80d6cfebe12" + }, + { + "phaseId": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "defaultDuration": 172800, + "predecessor": "2d7d3d85-0b29-4989-b3b4-be7f2b1d0aa6", + "id": "aeafe9e8-91f3-4d12-a3b1-9b91ab044516" + }, + { + "phaseId": "ad985cff-ad3e-44de-b54e-3992505ba0ae", + "defaultDuration": 172800, + "predecessor": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "id": "e446e093-f76e-4187-a3dc-bf32c15b236c" + } + ], + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" }, - { - "id": "d4201ca4-8437-4d63-9957-3f7708184b07", - "name": "Design with Checkpoints", - "description": "Standard Design Challenge Timeline", - "isActive": true, - "phases": [ - { - "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", - "defaultDuration": 518400 - }, - { - "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", - "defaultDuration": 518400 - }, - { - "phaseId": "d8a2cdbe-84d1-4687-ab75-78a6a7efdcc8", - "defaultDuration": 259200 - }, - { - "phaseId": "ce1afb4c-74f9-496b-9e4b-087ae73ab032", - "predecessor": "d8a2cdbe-84d1-4687-ab75-78a6a7efdcc8", - "defaultDuration": 14400 - }, - { - "phaseId": "84b43897-2aab-44d6-a95a-42c433657eed", - "predecessor": "ce1afb4c-74f9-496b-9e4b-087ae73ab032", - "defaultDuration": 172800 - }, - { - "phaseId": "2d7d3d85-0b29-4989-b3b4-be7f2b1d0aa6", - "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", - "defaultDuration": 14400 - }, - { - "phaseId": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", - "predecessor": "2d7d3d85-0b29-4989-b3b4-be7f2b1d0aa6", - "defaultDuration": 432000 - }, - { - "phaseId": "ad985cff-ad3e-44de-b54e-3992505ba0ae", - "predecessor": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", - "defaultDuration": 172800 - } - ] + "id": "517e76b0-8824-4e72-9b48-a1ebde1793a8", + "name": "TopCrowd Challenge", + "description": "TopCrowd Challenge", + "isActive": true, + "phases": [ + { + "phaseId": "cce96447-ec6a-4ac0-a60d-632e76799099", + "defaultDuration": 864000, + "id": "33a5ea20-ed5a-423d-ade9-5d225df8c79a" + }, + { + "phaseId": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "defaultDuration": 846000, + "predecessor": "cce96447-ec6a-4ac0-a60d-632e76799099", + "id": "d900b707-1be6-4ae1-a163-0ccfe1f5cdfc" + } + ], + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" }, { - "id": "2d0807fa-ece1-4328-a260-76f5f6b559e0", - "name": "RUX", - "description": "Design - Rapid User Experience", - "isActive": true, - "phases": [ - { - "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", - "defaultDuration": 172800 - }, - { - "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", - "defaultDuration": 172800 - }, - { - "phaseId": "2d7d3d85-0b29-4989-b3b4-be7f2b1d0aa6", - "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", - "defaultDuration": 7200 - }, - { - "phaseId": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", - "predecessor": "2d7d3d85-0b29-4989-b3b4-be7f2b1d0aa6", - "defaultDuration": 172800 - }, - { - "phaseId": "ad985cff-ad3e-44de-b54e-3992505ba0ae", - "predecessor": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", - "defaultDuration": 172800 - } - ] + "id": "f1bcb2c7-3ee4-4fb5-8d0b-efe52c015963", + "name": "QA", + "description": "Standard QA Challenge", + "isActive": true, + "phases": [ + { + "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", + "defaultDuration": 172800, + "id": "02599a67-1646-477e-8128-c47acb8b82eb" + }, + { + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "defaultDuration": 345600, + "id": "69ffd4c7-70e1-4657-84d5-1c341c737601" + }, + { + "phaseId": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "defaultDuration": 172800, + "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "id": "6804386f-f3ca-44f9-b74c-119185de4c30" + } + ], + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" }, { - "id": "0a0fed34-cb5a-47f5-b0cb-6e2ee7de8dcb", - "name": "Default First2Finish", - "description": "First2Finish", - "isActive": true, - "phases": [ - { - "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", - "defaultDuration": 2592000 - }, - { - "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", - "defaultDuration": 2592000 - }, - { - "phaseId": "003a4b14-de5d-43fc-9e35-835dbeb6af1f", - "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", - "defaultDuration": 86400 - } - ] + "id": "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c", + "name": "Default Challenge", + "description": "Default Challenge Timeline", + "isActive": true, + "phases": [ + { + "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", + "defaultDuration": 432000, + "id": "8e4511c7-f9e5-442f-a7ef-3a6a558f2bc5" + }, + { + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "defaultDuration": 432000, + "id": "b4e7deb1-d31b-42c4-82a3-19929b6d3f60" + }, + { + "phaseId": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "defaultDuration": 172800, + "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "id": "f5567a90-35c2-4d50-9945-21d0abe496af" + }, + { + "phaseId": "1c24cfb3-5b0a-4dbd-b6bd-4b0dff5349c6", + "defaultDuration": 86400, + "predecessor": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "id": "cd141248-cd5f-4827-abaf-8bd2621c1417" + }, + { + "phaseId": "797a6af7-cd3f-4436-9fca-9679f773bee9", + "defaultDuration": 43200, + "predecessor": "1c24cfb3-5b0a-4dbd-b6bd-4b0dff5349c6", + "id": "0d3b800b-efe8-4a27-a31b-c4eda1940c79" + } + ], + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" }, { - "id": "53a307ce-b4b3-4d6f-b9a1-3741a58f77e6", - "name": "Default Task", - "description": "Task Timeline", - "isActive": true, - "phases": [ - { - "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", - "defaultDuration": 864000 - }, - { - "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", - "defaultDuration": 864000 - }, - { - "phaseId": "003a4b14-de5d-43fc-9e35-835dbeb6af1f", - "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", - "defaultDuration": 86400 - } - ] + "id": "5c4601cd-3e85-4f76-be29-13b240c80fbb", + "name": "Design First2Finish", + "description": "Design First2Finish", + "isActive": true, + "phases": [ + { + "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", + "defaultDuration": 864000, + "id": "26582ca4-9d70-4d49-9597-9996f40e0972" + }, + { + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "defaultDuration": 846000, + "id": "d0fd62a8-89d9-4ce5-9b6f-f25af086a51d" + }, + { + "phaseId": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "defaultDuration": 864000, + "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "id": "97184b7a-28c2-4ee2-85a0-e918a0db0175" + } + ], + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "918f6a3e-1a63-4680-8b5e-deb95b1411e7", + "name": "Design Single Round", + "description": "Single-Round Design Challenge Timeline", + "isActive": true, + "phases": [ + { + "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", + "defaultDuration": 518400, + "id": "aa0da4fb-bb08-4319-951c-096b7aa2bb4f" + }, + { + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "defaultDuration": 518400, + "id": "915db241-1d92-4f0d-8fc8-d4246258f1be" + }, + { + "phaseId": "2d7d3d85-0b29-4989-b3b4-be7f2b1d0aa6", + "defaultDuration": 14400, + "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "id": "c39ef688-1968-4d3e-979f-fe34d7585a36" + }, + { + "phaseId": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "defaultDuration": 432000, + "predecessor": "2d7d3d85-0b29-4989-b3b4-be7f2b1d0aa6", + "id": "dbcee90f-2de9-4acb-aecf-188c10afa09c" + }, + { + "phaseId": "ad985cff-ad3e-44de-b54e-3992505ba0ae", + "defaultDuration": 172800, + "predecessor": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "id": "bb3a2738-893c-42fa-94e9-1af3392a2c73" + } + ], + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "07d33e3a-0e80-4f36-8b6f-62ad0207c851", + "name": "[DAL] Testing TimelineTemplate Creations", + "description": "Testing TimelineTemplate Creations", + "isActive": true, + "phases": [ + { + "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", + "defaultDuration": 964000, + "id": "2bb8b7a0-36af-481f-a00e-ce25bae4f50d" + }, + { + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "defaultDuration": 864000, + "id": "4f3897b3-275e-49a5-901b-f0ad11960f49" + }, + { + "phaseId": "003a4b14-de5d-43fc-9e35-835dbeb6af1f", + "defaultDuration": 86400, + "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "id": "ff468002-0817-4244-bc1e-2b8c59d0a48c" + } + ], + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "06b5743d-c059-4784-98fa-32c7dde3646c", + "name": "Practice Challenge", + "description": "Practice Challenge - 1 year length", + "isActive": true, + "phases": [ + { + "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", + "defaultDuration": 31536000, + "id": "a63d48f9-4c82-4265-a0ab-c0da03092fb2" + }, + { + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "defaultDuration": 31536000, + "id": "f073635d-5d3b-4e2a-9a75-d25b9e2afc70" + }, + { + "phaseId": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "defaultDuration": 172800, + "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "id": "e83a3324-b8b2-44ff-a862-d33f5b33b567" + }, + { + "phaseId": "1c24cfb3-5b0a-4dbd-b6bd-4b0dff5349c6", + "defaultDuration": 86400, + "predecessor": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "id": "d2c36b39-f3b7-4081-a9d8-48502cd1c953" + }, + { + "phaseId": "797a6af7-cd3f-4436-9fca-9679f773bee9", + "defaultDuration": 43200, + "predecessor": "1c24cfb3-5b0a-4dbd-b6bd-4b0dff5349c6", + "id": "70a7fec1-73a8-4770-8140-2caa5a3cc480" + } + ], + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "d4201ca4-8437-4d63-9957-3f7708184b07", + "name": "Design with Checkpoints", + "description": "Standard Design Challenge Timeline", + "isActive": true, + "phases": [ + { + "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", + "defaultDuration": 518400, + "id": "ffb24f05-000b-447b-bc49-5488ebad6f78" + }, + { + "phaseId": "d8a2cdbe-84d1-4687-ab75-78a6a7efdcc8", + "defaultDuration": 259200, + "id": "1af14a7d-d6c5-4c2a-8ac9-b7f09af06883" + }, + { + "phaseId": "ce1afb4c-74f9-496b-9e4b-087ae73ab032", + "defaultDuration": 14400, + "predecessor": "d8a2cdbe-84d1-4687-ab75-78a6a7efdcc8", + "id": "d625b31c-d820-459c-a86d-0ce8a33831f4" + }, + { + "phaseId": "84b43897-2aab-44d6-a95a-42c433657eed", + "defaultDuration": 172800, + "predecessor": "ce1afb4c-74f9-496b-9e4b-087ae73ab032", + "id": "3292488a-888d-42d0-833c-20d5fd84ba9f" + }, + { + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "defaultDuration": 518400, + "predecessor": "84b43897-2aab-44d6-a95a-42c433657eed", + "id": "d7d84022-ad02-4ad5-8f4b-7bd91e221800" + }, + { + "phaseId": "2d7d3d85-0b29-4989-b3b4-be7f2b1d0aa6", + "defaultDuration": 14400, + "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "id": "44ef5b51-1808-4d9b-88b8-f1b1b4f3698f" + }, + { + "phaseId": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "defaultDuration": 432000, + "predecessor": "2d7d3d85-0b29-4989-b3b4-be7f2b1d0aa6", + "id": "e09c48fd-25c1-4a1b-93c7-708a23d5a315" + }, + { + "phaseId": "ad985cff-ad3e-44de-b54e-3992505ba0ae", + "defaultDuration": 172800, + "predecessor": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "id": "211bc305-23cd-45ae-8546-869bbf9c2027" + } + ], + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "0a0fed34-cb5a-47f5-b0cb-6e2ee7de8dcb", + "name": "Default First2Finish", + "description": "First2Finish", + "isActive": true, + "phases": [ + { + "phaseId": "a93544bc-c165-4af4-b55e-18f3593b457a", + "defaultDuration": 2592000, + "id": "51188dcb-38af-47fe-ab4c-478450342fb1" + }, + { + "phaseId": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "defaultDuration": 2592000, + "id": "402c74b6-7f82-4861-a179-d3cf8e4b5aeb" + }, + { + "phaseId": "003a4b14-de5d-43fc-9e35-835dbeb6af1f", + "defaultDuration": 86400, + "predecessor": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49", + "id": "e17c9f20-9bc6-4ec2-8d17-94e8a63aaf6f" + } + ], + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" } -] +] \ No newline at end of file diff --git a/src/scripts/sync-es.js b/src/scripts/sync-es.js deleted file mode 100644 index b5ba3388..00000000 --- a/src/scripts/sync-es.js +++ /dev/null @@ -1,56 +0,0 @@ -/** - * Migrate Data from Dynamo DB to ES - */ - -const config = require("config"); -const logger = require("../common/logger"); -const helper = require("../common/helper"); -const models = require("../models"); -const _ = require("lodash"); - -const esClient = helper.getESClient(); - -async function indexChallenge(challenge) { - console.log("Indexing challenge", challenge.id); - try { - await esClient.update({ - index: config.get("ES.ES_INDEX"), - type: config.get("ES.OPENSEARCH") == "false" ? config.get("ES.ES_TYPE") : undefined, - id: challenge.id, - body: { doc: challenge, doc_as_upsert: true }, - }); - } catch (err) { - console.log("Error indexing challenge", challenge.id, err); - } -} - -/* - * Migrate records from DB to ES - */ -async function migrateRecords() { - let results = await models["Challenge"].scan().exec(); - let lastKey = results.lastKey; - - for (const challenge of results) { - await indexChallenge(challenge); - } - - while (!_.isUndefined(results.lastKey)) { - const results = await models["Challenge"].scan().startAt(lastKey).exec(); - for (const challenge of results) { - await indexChallenge(challenge); - } - - lastKey = results.lastKey; - } -} - -migrateRecords() - .then(() => { - logger.info("Done"); - process.exit(); - }) - .catch((err) => { - logger.logFullError(err); - process.exit(1); - }); diff --git a/src/scripts/update-es-mappings.js b/src/scripts/update-es-mappings.js deleted file mode 100644 index 8b351907..00000000 --- a/src/scripts/update-es-mappings.js +++ /dev/null @@ -1,143 +0,0 @@ -const config = require("config"); -const logger = require("../common/logger"); -const helper = require("../common/helper"); - -const esClient = helper.getESClient(); - -function sleep(ms) { - return new Promise((resolve) => { - setTimeout(resolve, ms); - }); -} - -function createIndex(indexName) { - const body = { mappings: {} }; - body.mappings[config.get("ES.ES_TYPE")] = { - properties: { - id: { type: "keyword" }, - name: { - type: "keyword", - normalizer: "custom_sort_normalizer", - }, - prizeSets: { - properties: { - type: { type: "text" }, - prizes: { - properties: { - type: { type: "text" }, - value: { type: "float" }, - }, - }, - }, - }, - }, - dynamic_templates: [ - { - metadata: { - path_match: "metadata.*", - mapping: { - type: "text", - }, - }, - }, - ], - }; - body.settings = { - analysis: { - normalizer: { - custom_sort_normalizer: { - type: "custom", - char_filter: [], - filter: ["lowercase", "asciifolding"], - }, - }, - }, - }; - - return esClient.indices.create({ - index: indexName, - body, - }); -} - -async function updateMappings() { - const tempReindexing = config.get("ES.TEMP_REINDEXING"); - let indexName = config.get("ES.ES_INDEX"); - let backupIndex = "challenge_tmp_dont_use_for_querying_backup"; - let newIndexName = "challenge_tmp_dont_use_for_querying"; - - // if (tempReindexing) { - // try { - // logger.info(`Attemp to remove temporary index ${newIndexName}`) - // await esClient.indices.delete({ - // index: newIndexName - // }) - // await sleep(500) - // } catch (e) { - // logger.info(`Index ${newIndexName} does not exist`) - // } - // } - - // await createIndex(backupIndex) - // await sleep(500) - // logger.info(`Reindexing from ${indexName} to ${backupIndex}`) - // await esClient.reindex({ - // body: { - // source: { index: indexName }, - // dest: { index: backupIndex } - // }, - // waitForCompletion: true - // }) - - // await createIndex(newIndexName) - // await sleep(500) - // logger.info(`Reindexing from ${indexName} to ${newIndexName}`) - // await esClient.reindex({ - // body: { - // source: { index: indexName }, - // dest: { index: newIndexName } - // }, - // waitForCompletion: true - // }) - - // if (tempReindexing) { - // return - // } - - // logger.warn(`Deleting ${indexName}. If script crashes after this point data may be lost and a recreation of index will be required.`) - - // await esClient.indices.delete({ - // index: indexName - // }) - - // indexName = 'challenge' // overridding source so it's not deleted. - - // logger.info(`Copying data back into ${indexName}`) - - // // This should be replaced with cloneIndex after migration to 7.4+ - // await createIndex(indexName) - // await sleep(500) - // await esClient.reindex({ - // body: { - // source: { index: 'challenge_tmp_dont_use_for_querying' }, - // dest: { index: 'challenge' } - // }, - // waitForCompletion: true - // }) - - // logger.info(`Removing ${newIndexName} index`) - - // await esClient.indices.delete({ - // index: newIndexName - // }) -} - -updateMappings() - .then(() => { - logger.info("Done"); - process.exit(); - }) - .catch((err) => { - logger.logFullError(err); - process.exit(1); - }); diff --git a/src/scripts/view-data.js b/src/scripts/view-data.js deleted file mode 100644 index 7d321bf4..00000000 --- a/src/scripts/view-data.js +++ /dev/null @@ -1,36 +0,0 @@ -/** - * View table data. - */ - -require("../../app-bootstrap"); -const _ = require("lodash"); -const models = require("../models"); -const logger = require("../common/logger"); -const helper = require("../common/helper"); - -const viewData = async (modelName) => { - const fieldNames = _.keys(models[modelName].$__.table.schema.attributes); - const records = await helper.scan(modelName); - console.log(_.map(records, (e) => _.pick(e, fieldNames))); -}; - -if (process.argv.length === 2) { - logger.info(`Please provide one of the following table name: [${_.keys(models)}]`); - process.exit(1); -} else { - const modelName = process.argv[2]; - if (_.keys(models).includes(modelName)) { - viewData(modelName) - .then(() => { - logger.info("Done!"); - process.exit(); - }) - .catch((e) => { - logger.logFullError(e); - process.exit(1); - }); - } else { - logger.info(`Please provide one of the following table name: [${_.keys(models)}]`); - process.exit(1); - } -} diff --git a/src/scripts/view-es-data.js b/src/scripts/view-es-data.js deleted file mode 100644 index aa06115b..00000000 --- a/src/scripts/view-es-data.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * View all ES data. - */ - -const helper = require("../common/helper"); -const config = require("config"); -const logger = require("../common/logger"); - -const esClient = helper.getESClient(); - -async function showESData() { - const result = await esClient.search({ - index: config.get("ES.ES_INDEX"), - }); - return result; -} - -showESData() - .then((result) => { - logger.info("All data in ES is shown belows."); - console.log(JSON.stringify(result.hits.hits, null, 2)); - logger.info("Done!"); - process.exit(); - }) - .catch((err) => { - console.log(err); - process.exit(1); - }); diff --git a/src/services/AttachmentService.js b/src/services/AttachmentService.js index 8c4d6fb3..93b3e0e5 100644 --- a/src/services/AttachmentService.js +++ b/src/services/AttachmentService.js @@ -1,14 +1,6 @@ /** * This service provides operations of attachments. */ -const { GRPC_CHALLENGE_SERVER_HOST, GRPC_CHALLENGE_SERVER_PORT } = process.env; - -const { - DomainHelper: { getLookupCriteria, getScanCriteria }, -} = require("@topcoder-framework/lib-common"); - -const { AttachmentDomain, ChallengeDomain } = require("@topcoder-framework/domain-challenge"); - const _ = require("lodash"); const Joi = require("joi"); const config = require("config"); @@ -17,17 +9,16 @@ const helper = require("../common/helper"); const s3ParseUrl = require("../common/s3ParseUrl"); const logger = require("../common/logger"); const constants = require("../../app-constants"); -const challengeService = require("./ChallengeService"); +const { + enrichChallengeForResponse +} = require("../common/challenge-helper"); +const prismaHelper = require('../common/prisma-helper'); const bucketWhitelist = config.AMAZON.BUCKET_WHITELIST.split(",").map((bucketName) => bucketName.trim() ); -const attachmentDomain = new AttachmentDomain( - GRPC_CHALLENGE_SERVER_HOST, - GRPC_CHALLENGE_SERVER_PORT -); -const challengeDomain = new ChallengeDomain(GRPC_CHALLENGE_SERVER_HOST, GRPC_CHALLENGE_SERVER_PORT); +const prisma = require("../common/prisma").getClient(); /** * Check if a url is acceptable. @@ -53,11 +44,14 @@ function validateUrl(url) { * @returns {Object} the challenge and the attachment */ async function _getChallengeAttachment(challengeId, attachmentId) { - const challenge = await helperchallengeDomain.lookup(getLookupCriteria("id", challengeId)); - const attachment = await attachmentDomain.lookup(getLookupCriteria("id", attachmentId)); - if (!attachment || attachment.challengeId !== challengeId) { - throw errors.NotFoundError(`Attachment ${attachmentId} not found in challenge ${challengeId}`); + const challenge = await prisma.challenge.findUnique({ where: { id: challengeId } }) + const attachment = await prisma.attachment.findUnique({ where: { id: attachmentId } }) + if (!challenge || !challenge.id || !attachment || attachment.challengeId !== challengeId) { + throw new errors.NotFoundError(`Attachment ${attachmentId} not found in challenge ${challengeId}`) } + // convert challenge data + enrichChallengeForResponse(challenge) + prismaHelper.convertModelToResponse(challenge) return { challenge, attachment }; } @@ -68,21 +62,22 @@ async function _getChallengeAttachment(challengeId, attachmentId) { * @returns {Object} the created attachment */ async function createAttachment(currentUser, challengeId, attachments) { - const challenge = await helperchallengeDomain.lookup(getLookupCriteria("id", challengeId)); + const challenge = await prisma.challenge.findUnique({ where: { id: challengeId } }); await helper.ensureUserCanModifyChallenge(currentUser, challenge); + const userId = currentUser.userId; const newAttachments = []; for (const attachment of attachments) { validateUrl(attachment.url); - const attachmentObject = { challengeId, ...attachment }; - const newAttachment = await attachmentDomain.create(attachmentObject); + _.assignIn(attachment, { + challengeId, + createdBy: userId, + updatedBy: userId + }); + let newAttachment = await prisma.attachment.create({ data: attachment }); + newAttachment = _.omit(newAttachment, constants.auditFields, 'challengeId'); await helper.postBusEvent(constants.Topics.ChallengeAttachmentCreated, newAttachment); newAttachments.push(newAttachment); } - // update challenge object - await challengeService.partiallyUpdateChallenge(currentUser, challengeId, { - attachments: [..._.get(challenge, "attachments", []), ...newAttachments], - }); - // post bus event return newAttachments; } @@ -108,10 +103,10 @@ createAttachment.schema = { * @param {String} attachmentId the attachment id * @returns {Object} the attachment with given id */ -async function getAttachment(currentUser, challengeId, attachmentId) { +async function getAttachment (currentUser, challengeId, attachmentId) { const { challenge, attachment } = await _getChallengeAttachment(challengeId, attachmentId); await helper.ensureUserCanViewChallenge(currentUser, challenge); - return attachment; + return _.omit(attachment, constants.auditFields, 'challengeId'); } getAttachment.schema = { @@ -128,37 +123,29 @@ getAttachment.schema = { * @param {Boolean} isFull the flag indicate it is a fully update operation. * @returns {Object} the updated attachment */ -async function update(currentUser, challengeId, attachmentId, data, isFull) { +async function update (currentUser, challengeId, attachmentId, data, isFull) { const { challenge, attachment } = await _getChallengeAttachment(challengeId, attachmentId); await helper.ensureUserCanModifyChallenge(currentUser, challenge); validateUrl(data.url); - if (isFull) { + if (!isFull) { // optional fields can be undefined - attachment.fileSize = data.fileSize; - attachment.description = data.description; + data.fileSize = data.fileSize || attachment.fileSize; + data.description = data.description || attachment.description; } + data.updatedBy = currentUser.userId; - const { items } = await attachmentDomain.update({ - filterCriteria: getScanCriteria({ id: attachmentId }), - updateInput: data, + let ret = await prisma.attachment.update({ + data, + where: { id: attachmentId } }); - // update challenge object - const newAttachments = _.get(challenge, "attachments", []); - try { - newAttachments[_.findIndex(newAttachments, (a) => a.id === attachmentId)] = items[0]; - await challengeService.partiallyUpdateChallenge(currentUser, challengeId, { - attachments: newAttachments, - }); - } catch (e) { - logger.warn(`The attachment ${attachmentId} does not exist on the challenge object`); - } + ret = _.omit(ret, constants.auditFields, 'challengeId'); // post bus event await helper.postBusEvent( constants.Topics.ChallengeAttachmentUpdated, - isFull ? items[0] : _.assignIn({ id: attachmentId }, data) + isFull ? ret : _.assignIn({ id: attachmentId }, data) ); - return items[0]; + return ret; } /** @@ -224,24 +211,11 @@ async function deleteAttachment(currentUser, challengeId, attachmentId) { await helper.deleteFromS3(s3UrlObject.bucket, s3UrlObject.key); } - await attachmentDomain.delete(getLookupCriteria("id", attachmentId)); - - // update challenge object - const newAttachments = _.get(challenge, "attachments", []); - try { - newAttachments.splice( - _.findIndex(newAttachments, (a) => a.id === attachmentId), - 1 - ); - await challengeService.partiallyUpdateChallenge(currentUser, challengeId, { - attachments: newAttachments, - }); - } catch (e) { - logger.warn(`The attachment ${attachmentId} does not exist on the challenge object`); - } + let ret = await prisma.attachment.delete({ where: { id: attachmentId } }); + ret = _.omit(ret, constants.auditFields, 'challengeId'); // post bus event - await helper.postBusEvent(constants.Topics.ChallengeAttachmentDeleted, attachment); - return attachment; + await helper.postBusEvent(constants.Topics.ChallengeAttachmentDeleted, ret); + return ret; } deleteAttachment.schema = { diff --git a/src/services/AuditLogService.js b/src/services/AuditLogService.js index ee772c42..c1aa4e68 100644 --- a/src/services/AuditLogService.js +++ b/src/services/AuditLogService.js @@ -2,37 +2,51 @@ * This service provides operations of audit logs. */ -const _ = require("lodash"); const Joi = require("joi"); -const helper = require("../common/helper"); -// const logger = require('../common/logger') +const logger = require('../common/logger') +const prisma = require('../common/prisma').getClient() /** * Search audit logs * @param {Object} criteria the search criteria * @returns {Object} the search result */ -async function searchAuditLogs(criteria) { - const page = criteria.page || 1; - const perPage = criteria.perPage || 50; - let records = await helper.scanAll("AuditLog"); - // TODO this needs to be in ES - if (criteria.fieldName) - records = _.filter(records, (e) => helper.partialMatch(criteria.fieldName, e.fieldName)); - if (criteria.createdDateStart) - records = _.filter(records, (e) => criteria.createdDateStart.getTime() <= e.created.getTime()); - if (criteria.createdDateEnd) - records = _.filter(records, (e) => criteria.createdDateEnd.getTime() <= e.created.getTime()); - if (criteria.challengeId) - records = _.filter(records, (e) => criteria.challengeId === e.challengeId); - if (criteria.createdBy) - records = _.filter( - records, - (e) => criteria.createdBy.toLowerCase() === e.createdBy.toLowerCase() - ); +async function searchAuditLogs (criteria) { + const page = criteria.page || 1 + const perPage = criteria.perPage || 50 - const total = records.length; - const result = records.slice((page - 1) * perPage, page * perPage); + const prismaFilter = { where: { AND: [] } } + if (criteria.fieldName) { + prismaFilter.where.AND.push({ + fieldName: criteria.fieldName + }) + } + if (criteria.createdDateStart) { + prismaFilter.where.AND.push({ + createdAt: { gte: criteria.createdDateStart } + }) + } + if (criteria.createdDateEnd) { + prismaFilter.where.AND.push({ + createdAt: { lte: criteria.createdDateEnd } + }) + } + if (criteria.challengeId) { + prismaFilter.where.AND.push({ + challengeId: criteria.challengeId + }) + } + if (criteria.createdBy) { + prismaFilter.where.AND.push({ + createdBy: criteria.createdBy + }) + } + const total = await prisma.auditLog.count(prismaFilter) + const result = await prisma.auditLog.findMany({ + ...prismaFilter, + take: perPage, + skip: (page - 1) * perPage + }) return { total, page, perPage, result }; } @@ -53,4 +67,4 @@ module.exports = { searchAuditLogs, }; -// logger.buildService(module.exports); +logger.buildService(module.exports); diff --git a/src/services/ChallengeService.js b/src/services/ChallengeService.js index 8bd5e33e..4d77cc8b 100644 --- a/src/services/ChallengeService.js +++ b/src/services/ChallengeService.js @@ -1,13 +1,6 @@ /** * This service provides operations of challenge. */ - -const { GRPC_CHALLENGE_SERVER_HOST, GRPC_CHALLENGE_SERVER_PORT } = process.env; - -const { - DomainHelper: { getLookupCriteria, getScanCriteria }, -} = require("@topcoder-framework/lib-common"); - const _ = require("lodash"); const Joi = require("joi"); const uuid = require("uuid/v4"); @@ -17,9 +10,6 @@ const helper = require("../common/helper"); const logger = require("../common/logger"); const errors = require("../common/errors"); const constants = require("../../app-constants"); -const HttpStatus = require("http-status-codes"); -const ChallengeTypeService = require("./ChallengeTypeService"); -const ChallengeTrackService = require("./ChallengeTrackService"); const ChallengeTimelineTemplateService = require("./ChallengeTimelineTemplateService"); const { BadRequestError } = require("../common/errors"); @@ -27,55 +17,50 @@ const phaseHelper = require("../common/phase-helper"); const projectHelper = require("../common/project-helper"); const challengeHelper = require("../common/challenge-helper"); -const { Metadata: GrpcMetadata } = require("@grpc/grpc-js"); - -const esClient = helper.getESClient(); - const PhaseAdvancer = require("../phase-management/PhaseAdvancer"); -const { ChallengeDomain } = require("@topcoder-framework/domain-challenge"); -const { QueryDomain } = require("@topcoder-framework/domain-acl"); const { hasAdminRole } = require("../common/role-helper"); const { enrichChallengeForResponse, - sanitizeRepeatedFieldsInUpdateRequest, convertPrizeSetValuesToCents, convertPrizeSetValuesToDollars, convertToISOString, } = require("../common/challenge-helper"); const deepEqual = require("deep-equal"); -const { getM2MToken } = require("../common/m2m-helper"); -const { - getSRMScheduleQuery, - getPracticeProblemsQuery, - convertSRMScheduleQueryOutput, - convertPracticeProblemsQueryOutput, -} = require("../common/srm-helper"); - -const challengeDomain = new ChallengeDomain( - GRPC_CHALLENGE_SERVER_HOST, - GRPC_CHALLENGE_SERVER_PORT, - { - "grpc.service_config": JSON.stringify({ - methodConfig: [ - { - name: [{ service: "topcoder.domain.service.challenge.Challenge" }], - retryPolicy: { - maxAttempts: 5, - initialBackoff: "0.5s", - maxBackoff: "30s", - backoffMultiplier: 2, - retryableStatusCodes: ["UNAVAILABLE", "DEADLINE_EXCEEDED", "INTERNAL"], - }, - }, - ], - }), - } -); - -const aclQueryDomain = new QueryDomain(config.GRPC_ACL_SERVER_HOST, config.GRPC_ACL_SERVER_PORT); - -const phaseAdvancer = new PhaseAdvancer(challengeDomain); +const prismaHelper = require('../common/prisma-helper'); + +const prisma = require('../common/prisma').getClient() + +const phaseAdvancer = new PhaseAdvancer({}); + +// define return field for challenge model. Used in prisma. +const includeReturnFields = { + legacyRecord: true, + billingRecord: true, + metadata: true, + phases: { + // sort by start/end date + orderBy: [{ + scheduledEndDate: 'asc' + }, { + scheduledStartDate: 'asc' + }], + include: { constraints: true } + }, + discussions: { + include: { options: true } + }, + events: true, + prizeSets: { + include: { prizes: true } + }, + terms: true, + skills: true, + winners: true, + attachments: true, + track: true, + type: true, +} /** * Search challenges by legacyId @@ -85,43 +70,20 @@ const phaseAdvancer = new PhaseAdvancer(challengeDomain); * @param {Number} perPage the perPage * @returns {Array} the search result */ -async function searchByLegacyId(currentUser, legacyId, page, perPage) { - const esQuery = { - index: config.get("ES.ES_INDEX"), - type: config.get("ES.OPENSEARCH") == "false" ? config.get("ES.ES_TYPE") : undefined, - size: perPage, - from: (page - 1) * perPage, - body: { - query: { - term: { - legacyId, - }, - }, - }, - }; - let docs; - try { - docs = - config.get("ES.OPENSEARCH") == "false" - ? await esClient.search(esQuery) - : (await esClient.search(esQuery)).body; - } catch (e) { - logger.error(`Query Error from ES ${JSON.stringify(e)}`); - docs = { - hits: { - hits: [], - }, - }; - } - const ids = _.map(docs.hits.hits, (item) => item._source.id); - const result = []; - for (const id of ids) { - try { - const challenge = await getChallenge(currentUser, id); - result.push(challenge); - } catch (e) {} - } - return result; +async function searchByLegacyId (currentUser, legacyId, page, perPage) { + // Do not take nested objects, query will be faster + const challenges = await prisma.challenge.findMany({ + take: perPage, + skip: (page - 1) * perPage, + where: { legacyId }, + include: includeReturnFields + }) + + _.forEach(challenges, c => { + prismaHelper.convertModelToResponse(c); + enrichChallengeForResponse(c, c.track, c.type); + }); + return challenges } /** @@ -130,64 +92,66 @@ async function searchByLegacyId(currentUser, legacyId, page, perPage) { * @param {Object} criteria the search criteria * @returns {Object} the search result */ -async function searchChallenges(currentUser, criteria) { - // construct ES query - +async function searchChallenges (currentUser, criteria) { const page = criteria.page || 1; const perPage = criteria.perPage || 20; if (!_.isUndefined(criteria.legacyId)) { const result = await searchByLegacyId(currentUser, criteria.legacyId, page, perPage); return { total: result.length, page, perPage, result }; } - const boolQuery = []; - let sortByScore = false; + + const prismaFilter = { + where: { + AND: [] + } + } + const matchPhraseKeys = [ "id", "timelineTemplateId", "projectId", "legacyId", - "status", "createdBy", "updatedBy", ]; const _hasAdminRole = hasAdminRole(currentUser); - const includedTrackIds = _.isArray(criteria.trackIds) ? criteria.trackIds : []; - const includedTypeIds = _.isArray(criteria.typeIds) ? criteria.typeIds : []; + let includedTrackIds = _.isArray(criteria.trackIds) ? criteria.trackIds : []; + let includedTypeIds = _.isArray(criteria.typeIds) ? criteria.typeIds : []; if (criteria.type) { - const typeSearchRes = await ChallengeTypeService.searchChallengeTypes({ - abbreviation: criteria.type, + const typeSearchRes = await prisma.challengeType.findFirst({ + where: {abbreviation: criteria.type} }); - if (typeSearchRes.total > 0) { - criteria.typeId = _.get(typeSearchRes, "result[0].id"); + if (typeSearchRes && _.get(typeSearchRes, "id")) { + criteria.typeId = _.get(typeSearchRes, "id"); } } if (criteria.track) { - const trackSearchRes = await ChallengeTrackService.searchChallengeTracks({ - abbreviation: criteria.track, - }); - if (trackSearchRes.total > 0) { - criteria.trackId = _.get(trackSearchRes, "result[0].id"); + const trackSearchRes = await prisma.challengeTrack.findFirst({ + where: { abbreviation: criteria.track } + }) + if (trackSearchRes && _.get(trackSearchRes, "id")) { + criteria.trackId = _.get(trackSearchRes, "id"); } } if (criteria.types) { - for (const t of criteria.types) { - const typeSearchRes = await ChallengeTypeService.searchChallengeTypes({ abbreviation: t }); - if (typeSearchRes.total > 0 || criteria.types.length === 1) { - includedTypeIds.push(_.get(typeSearchRes, "result[0].id")); - } + const typeIds = await prisma.challengeType.findMany({ + where: { abbreviation: { in: criteria.types } }, + select: { id: true } + }); + if (typeIds.length > 0) { + includedTypeIds = _.concat(includedTypeIds, typeIds.map(t => t.id)); } } if (criteria.tracks) { - for (const t of criteria.tracks) { - const trackSearchRes = await ChallengeTrackService.searchChallengeTracks({ - abbreviation: t, - }); - if (trackSearchRes.total > 0) { - includedTrackIds.push(_.get(trackSearchRes, "result[0].id")); - } + const trackIds = await prisma.challengeTrack.findMany({ + select: { id: true }, + where: { abbreviation: { in: criteria.tracks } } + }); + if (trackIds.length > 0) { + includedTrackIds = _.concat(includedTrackIds, trackIds.map(t => t.id)); } } if (criteria.typeId) { @@ -199,287 +163,270 @@ async function searchChallenges(currentUser, criteria) { _.forIn(_.pick(criteria, matchPhraseKeys), (value, key) => { if (!_.isUndefined(value)) { - const filter = { match_phrase: {} }; - filter.match_phrase[key] = value; - boolQuery.push(filter); + const f = {}; + f[key] = value; + prismaFilter.where.AND.push(f); } - }); + }) + + // handle status + if (!_.isNil(criteria.status)) { + prismaFilter.where.AND.push({ + status: criteria.status.toUpperCase() + }) + } _.forEach(_.keys(criteria), (key) => { - if (_.toString(key).indexOf("meta.") > -1) { + if (_.toString(key).indexOf('meta.') > -1) { // Parse and use metadata key if (!_.isUndefined(criteria[key])) { - const metaKey = key.split("meta.")[1]; - boolQuery.push({ - bool: { - must: [ - { match_phrase: { "metadata.name": metaKey } }, - { match_phrase: { "metadata.value": _.toString(criteria[key]) } }, - ], - }, - }); + const metaKey = key.split('meta.')[1]; + prismaFilter.where.AND.push({ + metadata: { + some: { + name: { contains: metaKey }, + value: { contains: _.toString(criteria[key]) } + } + } + }) } } - }); + }) if (includedTypeIds.length > 0) { - boolQuery.push({ - bool: { - should: _.map(includedTypeIds, (t) => ({ - match_phrase: { typeId: t }, - })), - }, - }); + prismaFilter.where.AND.push({ + typeId: { in: includedTypeIds } + }) } if (includedTrackIds.length > 0) { - boolQuery.push({ - bool: { - should: _.map(includedTrackIds, (t) => ({ - match_phrase: { trackId: t }, - })), - }, - }); + prismaFilter.where.AND.push({ + trackId: { in: includedTrackIds } + }) } - const multiMatchQuery = []; if (criteria.search) { - multiMatchQuery.push({ - // exact match - multi_match: { - query: criteria.search, - fields: ["name.text^7", "tags^3", "skills.name^3", "description^2"], - type: "phrase_prefix", - boost: 5, - }, - }); - multiMatchQuery.push({ - // match 100% words - multi_match: { - query: criteria.search, - fields: ["name.text^3.0", "tags^2.5", "skills.name^2.5", "description^1.0"], - type: "most_fields", - minimum_should_match: "100%", - boost: 2.5, - }, - }); - multiMatchQuery.push({ - // fuzzy match - multi_match: { - query: criteria.search, - fields: ["name.text^2.5", "tags^1.5", "skills.name^1.5", "description^1.0"], - type: "most_fields", - minimum_should_match: "50%", - fuzziness: "AUTO", - boost: 1, - }, - }); - boolQuery.push({ - bool: { - should: [ - { wildcard: { name: `*${criteria.search}*` } }, - { wildcard: { name: `${criteria.search}*` } }, - { wildcard: { name: `*${criteria.search}` } }, - { match_phrase: { tags: criteria.search } }, - { match_phrase: { "skills.name": criteria.search } }, - ], - }, - }); + prismaFilter.where.AND.push({ + OR: [{ + name: { contains: criteria.search } + }, { + description: { contains: criteria.search } + // TODO: Skills doesn't have name field in db. + /* + }, { + skills: { some: { name: { contains: criteria.search } } } + */ + }, { + tags: { has: criteria.search } + }] + }) } else { if (criteria.name) { - boolQuery.push({ - bool: { - should: [ - { wildcard: { name: `*${criteria.name}*` } }, - { wildcard: { name: `${criteria.name}*` } }, - { wildcard: { name: `*${criteria.name}` } }, - ], - }, - }); + prismaFilter.where.AND.push({ + name: { contains: criteria.name } + }) } if (criteria.description) { - boolQuery.push({ - match_phrase_prefix: { description: criteria.description }, - }); + prismaFilter.where.AND.push({ + description: { contains: criteria.description } + }) } } - // 'search', 'name', 'description' fields should be sorted by function score unless sortBy param provided. - if (!criteria.sortBy && (criteria.search || criteria.name || criteria.description)) { - sortByScore = true; - } - if (criteria.tag) { - boolQuery.push({ match_phrase: { tags: criteria.tag } }); + prismaFilter.where.AND.push({ + tags: { + has: criteria.tag + } + }) } if (criteria.tags) { - boolQuery.push({ - bool: { - [criteria.includeAllTags ? "must" : "should"]: _.map(criteria.tags, (t) => ({ - match_phrase: { tags: t }, - })), - }, - }); + if (criteria.includeAllTags) { + prismaFilter.where.AND.push({ + tags: { hasEvery: criteria.tags } + }) + } else { + prismaFilter.where.AND.push({ + tags: { hasSome: criteria.tags } + }) + } } if (criteria.totalPrizesFrom || criteria.totalPrizesTo) { - const prizeRangeQuery = {}; if (criteria.totalPrizesFrom) { - prizeRangeQuery.gte = criteria.totalPrizesFrom; + prismaFilter.where.AND.push({ + overviewTotalPrizes: { gte: criteria.totalPrizesFrom } + }) } if (criteria.totalPrizesTo) { - prizeRangeQuery.lte = criteria.totalPrizesTo; + prismaFilter.where.AND.push({ + overviewTotalPrizes: { lte: criteria.totalPrizesTo } + }) } - boolQuery.push({ range: { "overview.totalPrizes": prizeRangeQuery } }); } if (criteria.selfService) { - boolQuery.push({ - match_phrase: { "legacy.selfService": criteria.selfService }, - }); + prismaFilter.where.AND.push({ + legacyRecord: { + is: { selfService: criteria.selfService } + } + }) } if (criteria.selfServiceCopilot) { - boolQuery.push({ - match_phrase: { - "legacy.selfServiceCopilot": criteria.selfServiceCopilot, - }, - }); + prismaFilter.where.AND.push({ + legacyRecord: { + is: { selfServiceCopilot: criteria.selfServiceCopilot } + } + }) } if (criteria.forumId) { - boolQuery.push({ match_phrase: { "legacy.forumId": criteria.forumId } }); + prismaFilter.where.AND.push({ + legacyRecord: { + is: { forumId: criteria.forumId } + } + }) } if (criteria.reviewType) { - boolQuery.push({ - match_phrase: { "legacy.reviewType": criteria.reviewType }, - }); + prismaFilter.where.AND.push({ + legacyRecord: { + is: { reviewType: criteria.reviewType.toUpperCase() } + } + }) } if (criteria.confidentialityType) { - boolQuery.push({ - match_phrase: { - "legacy.confidentialityType": criteria.confidentialityType, - }, - }); + prismaFilter.where.AND.push({ + legacyRecord: { + is: { confidentialityType: criteria.confidentialityType } + } + }) } if (criteria.directProjectId) { - boolQuery.push({ - match_phrase: { "legacy.directProjectId": criteria.directProjectId }, - }); + prismaFilter.where.AND.push({ + legacyRecord: { + is: { directProjectId: criteria.directProjectId } + } + }) } if (criteria.currentPhaseName) { - if (criteria.currentPhaseName === "Registration") { - boolQuery.push({ - bool: { - should: [ - { match_phrase: { currentPhaseNames: "Registration" } }, - { match_phrase: { currentPhaseNames: "Open" } }, - ], - minimum_should_match: 1, - }, - }); + if (criteria.currentPhaseName === 'Registration') { + prismaFilter.where.AND.push({ + currentPhaseNames: { hasSome: ['Registration', 'Open'] } + }) } else { - boolQuery.push({ - match_phrase: { currentPhaseNames: criteria.currentPhaseName }, - }); + prismaFilter.where.AND.push({ + currentPhaseNames: { has: criteria.currentPhaseName } + }) } } if (criteria.createdDateStart) { - boolQuery.push({ range: { created: { gte: criteria.createdDateStart } } }); + prismaFilter.where.AND.push({ + createdAt: { gte: criteria.createdDateStart } + }) } if (criteria.createdDateEnd) { - boolQuery.push({ range: { created: { lte: criteria.createdDateEnd } } }); + prismaFilter.where.AND.push({ + createdAt: { lte: criteria.createdDateEnd } + }) } if (criteria.registrationStartDateStart) { - boolQuery.push({ - range: { - registrationStartDate: { gte: criteria.registrationStartDateStart }, - }, - }); + prismaFilter.where.AND.push({ + registrationStartDate: { gte: criteria.registrationStartDateStart } + }) } if (criteria.registrationStartDateEnd) { - boolQuery.push({ - range: { - registrationStartDate: { lte: criteria.registrationStartDateEnd }, - }, - }); + prismaFilter.where.AND.push({ + registrationStartDate: { lte: criteria.registrationStartDateEnd } + }) } if (criteria.registrationEndDateStart) { - boolQuery.push({ - range: { - registrationEndDate: { gte: criteria.registrationEndDateStart }, - }, - }); + prismaFilter.where.AND.push({ + registrationEndDate: { gte: criteria.registrationEndDateStart } + }) } if (criteria.registrationEndDateEnd) { - boolQuery.push({ - range: { registrationEndDate: { lte: criteria.registrationEndDateEnd } }, - }); + prismaFilter.where.AND.push({ + registrationEndDate: { lte: criteria.registrationEndDateEnd } + }) } if (criteria.submissionStartDateStart) { - boolQuery.push({ - range: { - submissionStartDate: { gte: criteria.submissionStartDateStart }, - }, - }); + prismaFilter.where.AND.push({ + submissionStartDate: { gte: criteria.submissionStartDateStart } + }) } if (criteria.submissionStartDateEnd) { - boolQuery.push({ - range: { submissionStartDate: { lte: criteria.submissionStartDateEnd } }, - }); + prismaFilter.where.AND.push({ + submissionStartDate: { lte: criteria.submissionStartDateEnd } + }) } if (criteria.submissionEndDateStart) { - boolQuery.push({ - range: { submissionEndDate: { gte: criteria.submissionEndDateStart } }, - }); + prismaFilter.where.AND.push({ + submissionEndDate: { gte: criteria.submissionEndDateStart } + }) } if (criteria.submissionEndDateEnd) { - boolQuery.push({ - range: { submissionEndDate: { lte: criteria.submissionEndDateEnd } }, - }); + prismaFilter.where.AND.push({ + submissionEndDate: { lte: criteria.submissionEndDateEnd } + }) } if (criteria.updatedDateStart) { - boolQuery.push({ range: { updated: { gte: criteria.updatedDateStart } } }); + prismaFilter.where.AND.push({ + updatedAt: { gte: criteria.updatedDateStart } + }) } if (criteria.updatedDateEnd) { - boolQuery.push({ range: { updated: { lte: criteria.updatedDateEnd } } }); + prismaFilter.where.AND.push({ + updatedAt: { lte: criteria.updatedDateEnd } + }) } if (criteria.startDateStart) { - boolQuery.push({ range: { startDate: { gte: criteria.startDateStart } } }); + prismaFilter.where.AND.push({ + startDate: { gte: criteria.startDateStart } + }) } if (criteria.startDateEnd) { - boolQuery.push({ range: { startDate: { lte: criteria.startDateEnd } } }); + prismaFilter.where.AND.push({ + startDate: { lte: criteria.startDateEnd } + }) } if (criteria.endDateStart) { - boolQuery.push({ range: { endDate: { gte: criteria.endDateStart } } }); + prismaFilter.where.AND.push({ + endDate: { gte: criteria.endDateStart } + }) } if (criteria.endDateEnd) { - boolQuery.push({ range: { endDate: { lte: criteria.endDateEnd } } }); + prismaFilter.where.AND.push({ + endDate: { lte: criteria.endDateEnd } + }) } - let sortByProp = criteria.sortBy ? criteria.sortBy : "created"; + const sortByProp = criteria.sortBy ? criteria.sortBy : 'createdAt' - const sortOrderProp = criteria.sortOrder ? criteria.sortOrder : "desc"; - - const mustQuery = []; - - const groupsQuery = []; + const sortOrderProp = criteria.sortOrder ? criteria.sortOrder : 'desc' if (criteria.tco) { - boolQuery.push({ match_phrase_prefix: { "events.key": "tco" } }); + prismaFilter.where.AND.push({ + events: { + some: { key: { contains: 'tco' }} + } + }) } if (criteria.events) { - boolQuery.push({ - bool: { - [criteria.includeAllEvents ? "must" : "should"]: _.map(criteria.events, (e) => ({ - match_phrase: { "events.key": e }, - })), - }, - }); + const eventQuery = _.map(criteria.events, e => ({ + events: { + some: { key: { contains: e } } + } + })) + if (criteria.includeAllEvents) { + prismaFilter.where.AND = _.concat(prismaFilter.where.AND, eventQuery) + } else { + prismaFilter.where.AND.push({ + OR: eventQuery + }) + } } - const mustNotQuery = []; - let groupsToFilter = []; let accessibleGroups = []; @@ -541,27 +488,33 @@ async function searchChallenges(currentUser, criteria) { // Return public challenges + challenges from groups that the user has access to if (_.isUndefined(currentUser)) { // If the user is not authenticated, only query challenges that don't have a group - mustNotQuery.push({ exists: { field: "groups" } }); + prismaFilter.where.AND.push({ + groups: { isEmpty: true } + }) } else if (!currentUser.isMachine && !_hasAdminRole) { - // If the user is not M2M and is not an admin, return public + challenges from groups the user can access - groupsQuery.push({ terms: { "groups.keyword": accessibleGroups } }); - // include public challenges - groupsQuery.push({ bool: { must_not: { exists: { field: "groups" } } } }); + prismaFilter.where.AND.push({ + OR: [{ + // include public challenges + groups: { isEmpty: true } + }, { + // If the user is not M2M and is not an admin, return public + challenges from groups the user can access + groups: { hasSome: accessibleGroups } + }] + }) } } else { - groupsQuery.push({ terms: { "groups.keyword": groupsToFilter } }); + prismaFilter.where.AND.push({ + groups: { hasSome: groupsToFilter } + }) } if (criteria.ids) { - boolQuery.push({ - bool: { - should: _.map(criteria.ids, (id) => ({ match_phrase: { _id: id } })), - }, - }); + prismaFilter.where.AND.push({ + id: { in: criteria.ids } + }) } - const accessQuery = []; - let memberChallengeIds; + let memberChallengeIds // FIXME: This is wrong! // if (!_.isUndefined(currentUser) && currentUser.handle) { @@ -570,26 +523,20 @@ async function searchChallenges(currentUser, criteria) { if (criteria.memberId) { // logger.error(`memberId ${criteria.memberId}`) - memberChallengeIds = await helper.listChallengesByMember(criteria.memberId); + memberChallengeIds = await helper.listChallengesByMember(criteria.memberId) // logger.error(`response ${JSON.stringify(ids)}`) - accessQuery.push({ terms: { _id: memberChallengeIds } }); - } else if (currentUser && !_hasAdminRole && !_.get(currentUser, "isMachine", false)) { - memberChallengeIds = await helper.listChallengesByMember(currentUser.userId); - } - - if (accessQuery.length > 0) { - mustQuery.push({ - bool: { - should: accessQuery, - }, - }); + prismaFilter.where.AND.push({ + id: { in: memberChallengeIds } + }) + } else if (currentUser && !_hasAdminRole && !_.get(currentUser, 'isMachine', false)) { + memberChallengeIds = await helper.listChallengesByMember(currentUser.userId) } // FIXME: Tech Debt - let excludeTasks = true; + let excludeTasks = true // if you're an admin or m2m, security rules wont be applied - if (currentUser && (_hasAdminRole || _.get(currentUser, "isMachine", false))) { - excludeTasks = false; + if (currentUser && (_hasAdminRole || _.get(currentUser, 'isMachine', false))) { + excludeTasks = false } /** @@ -600,135 +547,73 @@ async function searchChallenges(currentUser, criteria) { * For admins/m2m: * - All tasks will be returned */ - if (currentUser && (_hasAdminRole || _.get(currentUser, "isMachine", false))) { + if (currentUser && (_hasAdminRole || _.get(currentUser, 'isMachine', false))) { // For admins/m2m, allow filtering based on task properties - if (criteria.isTask) { - boolQuery.push({ match_phrase: { "task.isTask": criteria.isTask } }); + if (!_.isNil(criteria.isTask)) { + prismaFilter.where.AND.push({ + taskIsTask: criteria.isTask + }) } - if (criteria.taskIsAssigned) { - boolQuery.push({ - match_phrase: { "task.isAssigned": criteria.taskIsAssigned }, - }); + if (!_.isNil(criteria.taskIsAssigned)) { + prismaFilter.where.AND.push({ + taskIsAssigned: criteria.taskIsAssigned + }) } - if (criteria.taskMemberId) { - boolQuery.push({ - match_phrase: { - "task.memberId": criteria.taskMemberId, - }, - }); + if (!_.isNil(criteria.taskMemberId)) { + prismaFilter.where.AND.push({ + taskMemberId: criteria.taskMemberId + }) } } else if (excludeTasks) { - mustQuery.push({ - bool: { - should: [ - ...(_.get(memberChallengeIds, "length", 0) > 0 - ? [{ bool: { should: [{ terms: { _id: memberChallengeIds } }] } }] - : []), - { bool: { must_not: { exists: { field: "task.isTask" } } } }, - { match_phrase: { "task.isTask": false } }, - { - bool: { - must: [ - { match_phrase: { "task.isTask": true } }, - { match_phrase: { "task.isAssigned": false } }, - ], - }, - }, - ...(currentUser && !_hasAdminRole && !_.get(currentUser, "isMachine", false) - ? [{ match_phrase: { "task.memberId": currentUser.userId } }] - : []), - ], - }, - }); + const taskFilter = [] + if (_.get(memberChallengeIds, "length", 0) > 0) { + taskFilter.push({ + id: { in: memberChallengeIds } + }) + } + taskFilter.push({ + taskIsTask: false + }) + taskFilter.push({ + taskIsTask: true, + taskIsAssigned: false + }) + if (currentUser && !_hasAdminRole && !_.get(currentUser, 'isMachine', false)) { + taskFilter.push({ + taskMemberId: currentUser.userId + }) + } + prismaFilter.where.AND.push({ + OR: taskFilter + }) } - if (groupsQuery.length > 0) { - mustQuery.push({ - bool: { - should: groupsQuery, - }, - }); - } + const sortFilter = {} + sortFilter[sortByProp] = sortOrderProp - if (multiMatchQuery) { - mustQuery.push({ - bool: { - should: multiMatchQuery, - }, - }); + const prismaQuery = { + ...prismaFilter, + take: criteria.perPage, + skip: (criteria.page - 1) * criteria.perPage, + orderBy: [sortFilter], + include: includeReturnFields } - if (boolQuery.length > 0) { - mustQuery.push({ - bool: { - filter: boolQuery, - }, - }); - } - - let finalQuery = { - bool: {}, - }; - - if (mustQuery.length > 0) { - finalQuery.bool.must = mustQuery; - } - if (mustNotQuery.length > 0) { - finalQuery.bool.must_not = mustNotQuery; - if (!finalQuery.bool.must) { - finalQuery.bool.must = mustQuery; - } - } - // if none of the above were set, match all - if (!finalQuery.bool.must) { - finalQuery = { - match_all: {}, - }; - } - - const esQuery = { - index: config.get("ES.ES_INDEX"), - size: perPage, - from: (page - 1) * perPage, // Es Index starts from 0 - body: { - query: finalQuery, - sort: [ - sortByScore - ? { _score: { order: "desc" } } - : { - [sortByProp]: { - order: sortOrderProp, - missing: "_last", - unmapped_type: "keyword", - }, - }, - ], - }, - }; - - logger.info(`ES Query: ${JSON.stringify(esQuery)}`) - // Search with constructed query - let docs; + let challenges = [] + let total = 0 try { - docs = - config.get("ES.OPENSEARCH") == "false" - ? await esClient.search(esQuery) - : (await esClient.search(esQuery)).body; + total = await prisma.challenge.count({ ...prismaFilter }) + challenges = await prisma.challenge.findMany(prismaQuery) + _.forEach(challenges, c => { + prismaHelper.convertModelToResponse(c); + enrichChallengeForResponse(c, c.track, c.type); + }); } catch (e) { - logger.error(JSON.stringify(e)); - // Catch error when the ES is fresh and has no data - docs = { - hits: { - total: 0, - hits: [], - }, - }; + // logger.error(JSON.stringify(e)); + console.log(e) } - // Extract data from hits - const total = docs.hits.total.value; - - let result = _.map(docs.hits.hits, (item) => item._source); + let result = challenges // Hide privateDescription for non-register challenges if (currentUser) { @@ -758,17 +643,7 @@ async function searchChallenges(currentUser, criteria) { }); } - const challengeTypeList = await ChallengeTypeService.searchChallengeTypes({}); - const typeMap = new Map(); - _.each(challengeTypeList.result, (e) => { - typeMap.set(e.id, e.name); - }); - - _.each(result, (element) => { - element.type = typeMap.get(element.typeId) || "Code"; - }); _.each(result, async (element) => { - await getPhasesAndPopulate(element); if (element.status !== constants.challengeStatuses.Completed) { _.unset(element, "winners"); } @@ -859,7 +734,7 @@ searchChallenges.schema = { */ async function createChallenge(currentUser, challenge, userToken) { await challengeHelper.validateCreateChallengeRequest(currentUser, challenge); - let prizeTypeTmp = challengeHelper.validatePrizeSetsAndGetPrizeType(challenge.prizeSets); + const prizeTypeTmp = challengeHelper.validatePrizeSetsAndGetPrizeType(challenge.prizeSets) console.log("TYPE", prizeTypeTmp); if (challenge.legacy.selfService) { @@ -994,37 +869,25 @@ async function createChallenge(currentUser, challenge, userToken) { value: typeof m.value === "string" ? m.value : JSON.stringify(m.value), })); - const grpcMetadata = new GrpcMetadata(); - - grpcMetadata.set("handle", currentUser.handle); - grpcMetadata.set("userId", currentUser.userId); - grpcMetadata.set("token", await getM2MToken()); - const prizeType = challengeHelper.validatePrizeSetsAndGetPrizeType(challenge.prizeSets); if (prizeType === constants.prizeTypes.USD) { convertPrizeSetValuesToCents(challenge.prizeSets); } - const ret = await challengeDomain.create(challenge, grpcMetadata); + const prismaModel = prismaHelper.convertChallengeSchemaToPrisma(currentUser, challenge) + const ret = await prisma.challenge.create({ + data: prismaModel, + include: includeReturnFields + }) + ret.overview = { totalPrizesInCents: ret.overviewTotalPrizes } if (prizeType === constants.prizeTypes.USD) { - convertPrizeSetValuesToDollars(ret.prizeSets, ret.overview); + convertPrizeSetValuesToDollars(ret.prizeSets, ret.overview) } - ret.numOfSubmissions = 0; - ret.numOfRegistrants = 0; - - enrichChallengeForResponse(ret, track, type); - - // Create in ES - await esClient.create({ - index: config.get("ES.ES_INDEX"), - type: config.get("ES.OPENSEARCH") == "false" ? config.get("ES.ES_TYPE") : undefined, - refresh: config.get("ES.ES_REFRESH"), - id: ret.id, - body: ret, - }); + prismaHelper.convertModelToResponse(ret) + enrichChallengeForResponse(ret, track, type) // If the challenge is self-service, add the creating user as the "client manager", *not* the manager // This is necessary for proper handling of the vanilla embed on the self-service work item dashboard @@ -1177,19 +1040,6 @@ createChallenge.schema = { .required(), userToken: Joi.string().required(), }; -/** - * Populate phase data from phase API. - * @param {Object} the challenge entity - */ -async function getPhasesAndPopulate(data) { - _.each(data.phases, async (p) => { - const phase = await phaseHelper.getPhase(p.phaseId); - p.name = phase.name; - if (phase.description) { - p.description = phase.description; - } - }); -} /** * Get challenge. @@ -1198,29 +1048,13 @@ async function getPhasesAndPopulate(data) { * @param {Boolean} checkIfExists flag to check if challenge exists * @returns {Object} the challenge with given id */ -async function getChallenge(currentUser, id, checkIfExists) { - let challenge; - try { - if (config.get("ES.OPENSEARCH") == "true") { - challenge = ( - await esClient.getSource({ - index: config.get("ES.ES_INDEX"), - id, - }) - ).body; - } else { - challenge = await esClient.getSource({ - index: config.get("ES.ES_INDEX"), - type: config.get("ES.ES_TYPE"), - id, - }); - } - } catch (e) { - if (e.statusCode === HttpStatus.NOT_FOUND) { - throw new errors.NotFoundError(`Challenge of id ${id} is not found.`); - } else { - throw e; - } +async function getChallenge (currentUser, id, checkIfExists) { + const challenge = await prisma.challenge.findUnique({ + where: { id }, + include: includeReturnFields + }) + if (_.isNil(challenge) || _.isNil(challenge.id)) { + throw new errors.NotFoundError(`Challenge of id ${id} is not found.`); } if (checkIfExists) { return _.pick(challenge, ["id", "legacyId"]); @@ -1251,10 +1085,6 @@ async function getChallenge(currentUser, id, checkIfExists) { _.unset(challenge, "privateDescription"); } - if (challenge.phases && challenge.phases.length > 0) { - await getPhasesAndPopulate(challenge); - } - if (challenge.status !== constants.challengeStatuses.Completed) { _.unset(challenge, "winners"); } @@ -1264,7 +1094,10 @@ async function getChallenge(currentUser, id, checkIfExists) { _.unset(challenge, "payments"); } - return challenge; + prismaHelper.convertModelToResponse(challenge); + enrichChallengeForResponse(challenge, challenge.track, challenge.type); + + return challenge } getChallenge.schema = { currentUser: Joi.any(), @@ -1426,11 +1259,18 @@ function validateTask(currentUser, challenge, data, challengeResources) { * @param {Object} currentUser the user who perform operation * @param {String} challengeId the challenge id * @param {Object} data the challenge data to be updated - * @param {Boolean} isFull the flag indicate it is a fully update operation. * @returns {Object} the updated challenge */ async function updateChallenge(currentUser, challengeId, data) { - const challenge = await challengeDomain.lookup(getLookupCriteria("id", challengeId)); + const challenge = await prisma.challenge.findUnique({ + where: { id: challengeId }, + include: includeReturnFields + }) + if (!challenge || !challenge.id) { + throw new errors.NotFoundError(`Challenge with id: ${challengeId} doesn't exist`) + } + enrichChallengeForResponse(challenge) + prismaHelper.convertModelToResponse(challenge) const existingPrizeType = challengeHelper.validatePrizeSetsAndGetPrizeType(challenge.prizeSets); if (existingPrizeType === constants.prizeTypes.USD) { @@ -1830,40 +1670,69 @@ async function updateChallenge(currentUser, challengeId, data) { } if (data.phases && data.phases.length > 0) { - await getPhasesAndPopulate(data); - if (deepEqual(data.phases, challenge.phases)) { delete data.phases; } } - const updateInput = sanitizeRepeatedFieldsInUpdateRequest(_.omit(data, ["cancelReason"])); - if (!_.isEmpty(updateInput)) { - const grpcMetadata = new GrpcMetadata(); - - grpcMetadata.set("handle", currentUser.handle); - grpcMetadata.set("userId", currentUser.userId); - grpcMetadata.set("token", await getM2MToken()); - - const newPrizeType = challengeHelper.validatePrizeSetsAndGetPrizeType(updateInput.prizeSets); - if (newPrizeType != null && existingPrizeType != null && newPrizeType !== existingPrizeType) { - throw new errors.BadRequestError( - `Cannot change prize type from ${existingPrizeType} to ${newPrizeType}` - ); - } + // convert data to prisma models + const updateData = prismaHelper.convertChallengeSchemaToPrisma(currentUser, _.omit(data, ['cancelReason'])) + updateData.updatedBy = _.toString(currentUser.userId) + // reset createdBy + delete updateData.createdBy - await challengeDomain.update( - { - filterCriteria: getScanCriteria({ id: challengeId }), - updateInput, - }, - grpcMetadata + const newPrizeType = challengeHelper.validatePrizeSetsAndGetPrizeType(updateData.prizeSets); + if (newPrizeType != null && existingPrizeType != null && newPrizeType !== existingPrizeType) { + throw new errors.BadRequestError( + `Cannot change prize type from ${existingPrizeType} to ${newPrizeType}` ); } + const updatedChallenge = await prisma.$transaction(async (tx) => { + // drop nested data if updated + if (!_.isNil(updateData.legacyRecord)) { + await tx.challengeLegacy.deleteMany({ where: { challengeId } }) + } + if (!_.isNil(updateData.billingRecord)) { + await tx.challengeBilling.deleteMany({ where: { challengeId } }) + } + if (!_.isNil(updateData.constraintRecord)) { + await tx.challengeConstraint.deleteMany({ where: { challengeId } }) + } + if (!_.isNil(updateData.events)) { + await tx.challengeEvent.deleteMany({ where: { challengeId } }) + } + if (!_.isNil(updateData.discussions)) { + await tx.challengeDiscussion.deleteMany({ where: { challengeId } }) + } + if (!_.isNil(updateData.metadata)) { + await tx.challengeMetadata.deleteMany({ where: { challengeId } }) + } + if (!_.isNil(updateData.phases)) { + await tx.challengePhase.deleteMany({ where: { challengeId } }) + } + if (!_.isNil(updateData.prizeSets)) { + await tx.challengePrizeSet.deleteMany({ where: { challengeId } }) + } + if (_.isNil(updateData.winners)) { + await tx.challengeWinner.deleteMany({ where: { challengeId } }) + } + if (_.isNil(updateData.attachment)) { + await tx.attachment.deleteMany({ where: { challengeId } }) + } + if (_.isNil(updateData.terms)) { + await tx.challengeTerm.deleteMany({ where: { challengeId } }) + } + if (_.isNil(updateData.skills)) { + await tx.challengeSkill.deleteMany({ where: { challengeId } }) + } - const updatedChallenge = await challengeDomain.lookup(getLookupCriteria("id", challengeId)); - - await indexChallengeAndPostToKafka(updatedChallenge, track, type); + return await tx.challenge.update({ + data: updateData, + where: { id: challengeId }, + include: includeReturnFields + }) + }) + await indexChallengeAndPostToKafka(updatedChallenge, track, type) if (updatedChallenge.legacy.selfService) { const creator = await helper.getMemberByHandle(updatedChallenge.createdBy); @@ -2248,12 +2117,11 @@ function sanitizeData(data, challenge) { * @param {String} challengeId the challenge id * @returns {Object} the deleted challenge */ -async function deleteChallenge(currentUser, challengeId) { - const { items } = await challengeDomain.scan({ - criteria: getScanCriteria({ id: challengeId, status: constants.challengeStatuses.New }), - }); - const challenge = _.first(items); - if (!challenge) { +async function deleteChallenge (currentUser, challengeId) { + const challenge = await prisma.challenge.findUnique({ + where: { id: challengeId, status: constants.challengeStatuses.New.toUpperCase() } + }) + if (_.isNil(challenge) || _.isNil(challenge.id)) { throw new errors.NotFoundError( `Challenge with id: ${challengeId} doesn't exist or is not in New status` ); @@ -2261,22 +2129,12 @@ async function deleteChallenge(currentUser, challengeId) { // ensure user can modify challenge await helper.ensureUserCanModifyChallenge(currentUser, challenge); // delete DB record - const { items: deletedItems } = await challengeDomain.delete( - getLookupCriteria("id", challengeId) - ); - if (!_.find(deletedItems, { id: challengeId })) { - throw new errors.Internal(`There was an error deleting the challenge with id: ${challengeId}`); - } - // delete ES document - await esClient.delete({ - index: config.get("ES.ES_INDEX"), - refresh: config.get("ES.ES_REFRESH"), - type: config.get("ES.OPENSEARCH") == "false" ? config.get("ES.ES_TYPE") : undefined, - id: challengeId, - }); + await prisma.challenge.delete({ where: { id: challengeId } }) + await helper.postBusEvent(constants.Topics.ChallengeDeleted, { id: challengeId, }); + prismaHelper.convertModelToResponse(challenge); return challenge; } @@ -2287,75 +2145,80 @@ deleteChallenge.schema = { async function advancePhase(currentUser, challengeId, data) { logger.info(`Advance Phase Request - ${challengeId} - ${JSON.stringify(data)}`); - if (currentUser && (currentUser.isMachine || hasAdminRole(currentUser))) { - const challenge = await challengeDomain.lookup(getLookupCriteria("id", challengeId)); - - if (!challenge) { - throw new errors.NotFoundError(`Challenge with id: ${challengeId} doesn't exist.`); - } - if (challenge.status !== constants.challengeStatuses.Active) { - throw new errors.BadRequestError( - `Challenge with id: ${challengeId} is not in Active status.` - ); - } - - const phaseAdvancerResult = await phaseAdvancer.advancePhase( - challenge.id, - challenge.legacyId, - challenge.phases, - data.operation, - data.phase + const machineOrAdmin = currentUser && (currentUser.isMachine || hasAdminRole(currentUser)) + if (!machineOrAdmin) { + throw new errors.ForbiddenError( + `Admin role or an M2M token is required to advance the challenge phase.` ); + } + const challenge = await prisma.challenge.findUnique({ where: { id: challengeId }, include: includeReturnFields }) - if (phaseAdvancerResult.success) { - const grpcMetadata = new GrpcMetadata(); + if (!_.isNil(challenge) || _.isNil(challenge.id)) { + throw new errors.NotFoundError(`Challenge with id: ${challengeId} doesn't exist.`); + } + if (challenge.status !== constants.challengeStatuses.Active) { + throw new errors.BadRequestError( + `Challenge with id: ${challengeId} is not in Active status.` + ); + } - grpcMetadata.set("handle", currentUser.handle); - grpcMetadata.set("userId", currentUser.userId); + const phaseAdvancerResult = await phaseAdvancer.advancePhase( + challenge.id, + challenge.legacyId, + challenge.phases, + data.operation, + data.phase + ); - await challengeDomain.update( - { - filterCriteria: getScanCriteria({ id: challengeId }), - updateInput: { - phaseUpdate: { - phases: phaseAdvancerResult.updatedPhases, - }, - }, + const auditFields = { + createdBy: _.toString(currentUser.userId), + updatedBy: _.toString(currentUser.userId) + } + if (!phaseAdvancerResult.success) { + return phaseAdvancerResult + } + // update phase if result is successful + const challengeData = {} + const updatedPhaseData = { + phases: phaseAdvancerResult.updatedPhases + } + prismaHelper.convertChallengePhaseSchema(updatedPhaseData, challengeData, auditFields) + // Perform partially update for now + const newPhases = challengeData.phases + const newChallengeData = _.pick(challengeData, ['currentPhaseNames', + 'registrationStartDate', 'registrationEndDate', 'submissionStartDate', 'submissionEndDate']) + + // TODO: This is a temporary solution to update the challenge status to Completed; We currently do not have a way to get winner list using v5 data + // TODO: With the implementation of v5 review API we'll develop a mechanism to maintain the winner list in v5 data that challenge-api can use to create the winners list + if (phaseAdvancerResult.hasWinningSubmission === true) { + newChallengeData.status = constants.challengeStatuses.Completed.toUpperCase() + } + await prisma.$transaction(async (tx) => { + // upsert phases one by one + for (let newPhase of newPhases) { + await tx.challengePhase.upsert({ + where: { + challengeId, + phaseId: newPhase.phaseId }, - grpcMetadata - ); - - const updatedChallenge = await challengeDomain.lookup(getLookupCriteria("id", challengeId)); - await indexChallengeAndPostToKafka(updatedChallenge); - - // TODO: This is a temporary solution to update the challenge status to Completed; We currently do not have a way to get winner list using v5 data - // TODO: With the implementation of v5 review API we'll develop a mechanism to maintain the winner list in v5 data that challenge-api can use to create the winners list - if (phaseAdvancerResult.hasWinningSubmission === true) { - await challengeDomain.update( - { - filterCriteria: getScanCriteria({ id: challengeId }), - updateInput: { - status: constants.challengeStatuses.Completed, - }, - }, - grpcMetadata - ); - // Indexing in Kafka is not necessary here since domain-challenge will do it - } - - return { - success: true, - message: phaseAdvancerResult.message, - next: phaseAdvancerResult.next, - }; + create: { ...newPhase, challengeId }, + update: newPhase + }) } + await tx.challenge.update({ + where: { id: challengeId }, + data: newChallengeData + }) + }) + const updatedChallenge = await tx.challenge.findUnique({ where: { id: challengeId } }) + await indexChallengeAndPostToKafka(updatedChallenge) - return phaseAdvancerResult; + return { + success: true, + message: phaseAdvancerResult.message, + next: phaseAdvancerResult.next } - - throw new errors.ForbiddenError( - `Admin role or an M2M token is required to advance the challenge phase.` - ); + // Indexing in Kafka is not necessary here since domain-challenge will do it } advancePhase.schema = { @@ -2394,6 +2257,7 @@ async function indexChallengeAndPostToKafka(updatedChallenge, track, type) { `Post Bus Event: ${constants.Topics.ChallengeUpdated} ${JSON.stringify(updatedChallenge)}` ); + prismaHelper.convertModelToResponse(updatedChallenge); enrichChallengeForResponse(updatedChallenge, track, type); await helper.postBusEvent(constants.Topics.ChallengeUpdated, updatedChallenge, { @@ -2402,211 +2266,17 @@ async function indexChallengeAndPostToKafka(updatedChallenge, track, type) { ? `${updatedChallenge.id}:${updatedChallenge.status}` : undefined, }); - - // Update ES - await esClient.update({ - index: config.get("ES.ES_INDEX"), - type: config.get("ES.OPENSEARCH") == "false" ? config.get("ES.ES_TYPE") : undefined, - refresh: config.get("ES.ES_REFRESH"), - id: updatedChallenge.id, - body: { - doc: updatedChallenge, - }, - }); } -async function updateLegacyPayout(currentUser, challengeId, data) { - console.log(`Update legacy payment data for challenge: ${challengeId} with data: `, data); - const challenge = await challengeDomain.lookup(getLookupCriteria("id", challengeId)); - - // SQL qurey to fetch the payment and payment_detail record - let sql = `SELECT * FROM informixoltp:payment p - INNER JOIN informixoltp:payment_detail pd ON p.most_recent_detail_id = pd.payment_detail_id - WHERE p.user_id = ${data.userId} AND`; - - if (challenge.legacyId != null) { - sql += ` pd.component_project_id = ${challenge.legacyId}`; - } else { - sql += ` pd.jira_issue_id = \'${challengeId}\'`; - } - - sql += " ORDER BY pd.payment_detail_id ASC"; - - console.log("Fetch legacy payment detail: ", sql); - - const result = await aclQueryDomain.rawQuery({ sql }); - let updateClauses = [`date_modified = current`]; - - const statusMap = { - Paid: 53, - OnHold: 55, - OnHoldAdmin: 55, - Owed: 56, - Cancelled: 65, - EnteredIntoPaymentSystem: 70, - }; - - if (data.status != null) { - updateClauses.push(`payment_status_id = ${statusMap[data.status]}`); - if (data.status === "Paid") { - updateClauses.push(`date_paid = '${data.datePaid}'`); - } else { - updateClauses.push("date_paid = null"); - } - } - - if (data.releaseDate != null) { - updateClauses.push(`date_due = '${data.releaseDate}'`); - } - - const paymentDetailIds = result.rows.map( - (row) => row.fields.find((field) => field.key === "payment_detail_id").value - ); - - if (data.amount != null) { - updateClauses.push(`total_amount = ${data.amount}`); - if (paymentDetailIds.length === 1) { - updateClauses.push(`net_amount = ${data.amount}`); - updateClauses.push(`gross_amount = ${data.amount}`); - } - } - - if (paymentDetailIds.length === 0) { - return { - success: false, - message: "No payment detail record found", - }; - } - - const whereClause = [`payment_detail_id IN (${paymentDetailIds.join(",")})`]; - - const updateQuery = `UPDATE informixoltp:payment_detail SET ${updateClauses.join( - ", " - )} WHERE ${whereClause.join(" AND ")}`; - - console.log("Update Clauses", updateClauses); - console.log("Update Query", updateQuery); - - await aclQueryDomain.rawQuery({ sql: updateQuery }); - - if (data.amount != null) { - if (paymentDetailIds.length > 1) { - const amountInCents = data.amount * 100; - - const split1Cents = Math.round(amountInCents * 0.75); - const split2Cents = amountInCents - split1Cents; - - const split1Dollars = Number((split1Cents / 100).toFixed(2)); - const split2Dollars = Number((split2Cents / 100).toFixed(2)); - - const paymentUpdateQueries = paymentDetailIds.map((paymentDetailId, index) => { - let amt = 0; - if (index === 0) { - amt = split1Dollars; - } - if (index === 1) { - amt = split2Dollars; - } - - return `UPDATE informixoltp:payment_detail SET date_modified = CURRENT, net_amount = ${amt}, gross_amount = ${amt} WHERE payment_detail_id = ${paymentDetailId}`; - }); - - console.log("Payment Update Queries", paymentUpdateQueries); - - await Promise.all( - paymentUpdateQueries.map((query) => aclQueryDomain.rawQuery({ sql: query })) - ); - } - } - - return { - success: true, - message: "Successfully updated legacy payout", - }; -} -updateLegacyPayout.schema = { - currentUser: Joi.any(), - challengeId: Joi.id(), - data: Joi.object() - .keys({ - userId: Joi.number().integer().positive().required(), - amount: Joi.number().allow(null), - status: Joi.string().allow(null), - datePaid: Joi.string().allow(null), - releaseDate: Joi.string().allow(null), - }) -}; - -/** - * Get SRM Schedule - * @param {Object} criteria the criteria - */ -async function getSRMSchedule(criteria = {}) { - const sql = getSRMScheduleQuery(criteria); - const result = await aclQueryDomain.rawQuery({ sql }); - return convertSRMScheduleQueryOutput(result); -} - -getSRMSchedule.schema = { - criteria: Joi.object().keys({ - registrationStartTimeAfter: Joi.date().default(new Date()), - registrationStartTimeBefore: Joi.date(), - statuses: Joi.array() - .items(Joi.string().valid(["A", "F", "P"])) - .default(["A", "F", "P"]), - sortBy: Joi.string() - .valid(["registrationStartTime", "codingStartTime", "challengeStartTime"]) - .default("registrationStartTime"), - sortOrder: Joi.string().valid(["asc", "desc"]).default("asc"), - page: Joi.page(), - perPage: Joi.perPage(), - }), -}; - -/** - * Get SRM Schedule - * @param {Object} currentUser the user who perform operation - * @param {Object} criteria the criteria - */ -async function getPracticeProblems(currentUser, criteria = {}) { - criteria.userId = currentUser.userId; - const { query, countQuery } = getPracticeProblemsQuery(criteria); - const resultOutput = await aclQueryDomain.rawQuery({ sql: query }); - const countOutput = await aclQueryDomain.rawQuery({ sql: countQuery }); - const result = convertPracticeProblemsQueryOutput(resultOutput); - const total = countOutput.rows[0].fields[0].value; - return { total, page: criteria.page, perPage: criteria.perPage, result }; -} - -getPracticeProblems.schema = { - currentUser: Joi.any(), - criteria: Joi.object().keys({ - sortBy: Joi.string() - .valid(["problemName", "problemType", "points", "difficulty", "status", "myPoints"]) - .default("problemId"), - sortOrder: Joi.string().valid(["asc", "desc"]).default("desc"), - page: Joi.page(), - perPage: Joi.perPage(), - difficulty: Joi.string().valid(["easy", "medium", "hard"]), - status: Joi.string().valid(["new", "viewed", "solved"]), - pointsLowerBound: Joi.number().integer(), - pointsUpperBound: Joi.number().integer(), - problemName: Joi.string(), - }), -}; - module.exports = { searchChallenges, createChallenge, getChallenge, updateChallenge, deleteChallenge, - updateLegacyPayout, getChallengeStatistics, sendNotifications, advancePhase, - getSRMSchedule, - getPracticeProblems, }; logger.buildService(module.exports); diff --git a/src/services/ChallengeTimelineTemplateService.js b/src/services/ChallengeTimelineTemplateService.js index c0c1fd24..a85c2c1e 100644 --- a/src/services/ChallengeTimelineTemplateService.js +++ b/src/services/ChallengeTimelineTemplateService.js @@ -1,16 +1,7 @@ /** * This service provides operations of challenge type timeline template. */ - -const { GRPC_CHALLENGE_SERVER_HOST, GRPC_CHALLENGE_SERVER_PORT } = process.env; - const _ = require("lodash"); -const { - DomainHelper: { getScanCriteria, getLookupCriteria }, -} = require("@topcoder-framework/lib-common"); - -const { ChallengeTimelineTemplateDomain } = require("@topcoder-framework/domain-challenge"); - const Joi = require("joi"); const helper = require("../common/helper"); @@ -23,10 +14,7 @@ const challengeTrackService = require("./ChallengeTrackService"); const challengeTypeService = require("./ChallengeTypeService"); const timelineTemplateService = require("./TimelineTemplateService"); -const challengeTimelineTemplateDomain = new ChallengeTimelineTemplateDomain( - GRPC_CHALLENGE_SERVER_HOST, - GRPC_CHALLENGE_SERVER_PORT -); +const prisma = require('../common/prisma').getClient() /** * Search challenge type timeline templates. @@ -34,11 +22,12 @@ const challengeTimelineTemplateDomain = new ChallengeTimelineTemplateDomain( * @returns {Promise} the search result */ async function searchChallengeTimelineTemplates(criteria) { - const scanCriteria = getScanCriteria(_.omit(criteria, ["page", "perPage"])); + const filter = getSearchFilter(_.omit(criteria, ['page', 'perPage'])) - const { items } = await challengeTimelineTemplateDomain.scan({ - criteria: scanCriteria, - }); + let items = await prisma.challengeTimelineTemplate.findMany({ + where: filter + }) + items = _.map(items, t => _.omit(t, constants.auditFields)); const nRecords = items.length; @@ -50,6 +39,31 @@ async function searchChallengeTimelineTemplates(criteria) { }; } +/** + * Get prisma filter + * + * @param {Object} criteria search criteria + * @returns filter used in prisma + */ +function getSearchFilter (criteria) { + const ret = {} + if (criteria.typeId) { + ret.typeId = { equals: criteria.typeId } + } + if (criteria.trackId) { + ret.trackId = { equals: criteria.trackId } + } + if (criteria.timelineTemplateId) { + ret.timelineTemplateId = { equals: criteria.timelineTemplateId } + } + if (criteria.isDefault === 'true' || criteria.isDefault === 'false') { + ret.isDefault = { equals: criteria.isDefault === 'true' } + } else if (criteria.isDefault) { + ret.isDefault = { equals: true } + } + return ret +} + searchChallengeTimelineTemplates.schema = { criteria: Joi.object().keys({ typeId: Joi.optionalId(), @@ -63,10 +77,11 @@ searchChallengeTimelineTemplates.schema = { /** * Unset existing default timeline template in order to create a new one + * @param {Object} authUser auth user * @param {String} typeId the type ID * @param {String} trackId the track ID */ -async function unsetDefaultTimelineTemplate(typeId, trackId) { +async function unsetDefaultTimelineTemplate (authUser, typeId, trackId) { const records = await searchChallengeTimelineTemplates({ typeId, trackId, @@ -76,19 +91,21 @@ async function unsetDefaultTimelineTemplate(typeId, trackId) { return; } for (const record of records.result) { - await fullyUpdateChallengeTimelineTemplate(record.id, { + await fullyUpdateChallengeTimelineTemplate(authUser, record.id, { ...record, isDefault: false, + updatedBy: authUser.userId, }); } } /** * Create challenge type timeline template. + * @param {Object} authUser auth user * @param {Object} data the data to create challenge type timeline template * @returns {Object} the created challenge type timeline template */ -async function createChallengeTimelineTemplate(data) { +async function createChallengeTimelineTemplate (authUser, data) { // check duplicate const records = await searchChallengeTimelineTemplates(data); if (records.total > 0) { @@ -100,10 +117,13 @@ async function createChallengeTimelineTemplate(data) { await timelineTemplateService.getTimelineTemplate(data.timelineTemplateId); if (data.isDefault) { - await unsetDefaultTimelineTemplate(data.typeId, data.trackId); + await unsetDefaultTimelineTemplate(authUser, data.typeId, data.trackId); } + data.createdBy = authUser.userId + data.updatedBy = authUser.userId - const template = await challengeTimelineTemplateDomain.create(data); + let template = await prisma.challengeTimelineTemplate.create({ data }); + template = _.omit(template, constants.auditFields); // post bus event await helper.postBusEvent(constants.Topics.ChallengeTimelineTemplateCreated, template); @@ -111,6 +131,7 @@ async function createChallengeTimelineTemplate(data) { } createChallengeTimelineTemplate.schema = { + authUser: Joi.any(), data: Joi.object() .keys({ typeId: Joi.id(), @@ -127,9 +148,11 @@ createChallengeTimelineTemplate.schema = { * @returns {Promise} the challenge type timeline template with given id */ async function getChallengeTimelineTemplate(challengeTimelineTemplateId) { - return challengeTimelineTemplateDomain.lookup( - getLookupCriteria("id", challengeTimelineTemplateId) - ); + const ret = await prisma.challengeTimelineTemplate.findUnique({ where: { id: challengeTimelineTemplateId } }) + if (!ret || _.isUndefined(ret.id)) { + throw new errors.NotFoundError(`ChallengeTimelineTemplate with id: ${challengeTimelineTemplateId} doesn't exist`) + } + return _.omit(ret, constants.auditFields) } getChallengeTimelineTemplate.schema = { @@ -138,12 +161,13 @@ getChallengeTimelineTemplate.schema = { /** * Fully update challenge type timeline template. + * @param {Object} authUser auth user * @param {String} challengeTimelineTemplateId the challenge type timeline template id * @param {Object} data the challenge type timeline template data to be updated * @returns {Object} the updated challenge type timeline template */ -async function fullyUpdateChallengeTimelineTemplate(challengeTimelineTemplateId, data) { - const record = await getChallengeTimelineTemplate(challengeTimelineTemplateId); +async function fullyUpdateChallengeTimelineTemplate (authUser, challengeTimelineTemplateId, data) { + const record = await getChallengeTimelineTemplate(challengeTimelineTemplateId) if ( record.typeId === data.typeId && record.trackId === data.trackId && @@ -166,21 +190,20 @@ async function fullyUpdateChallengeTimelineTemplate(challengeTimelineTemplateId, await timelineTemplateService.getTimelineTemplate(data.timelineTemplateId); if (data.isDefault) { - await unsetDefaultTimelineTemplate(data.typeId, data.trackId); + await unsetDefaultTimelineTemplate(authUser, data.typeId, data.trackId); } + data.updatedBy = authUser.userId; - const updateInput = { - filterCriteria: getScanCriteria({ - id: challengeTimelineTemplateId, - }), - updateInput: data, - }; + let ret = await prisma.challengeTimelineTemplate.update({ + data, + where: { id: challengeTimelineTemplateId } + }) + ret = _.omit(ret, constants.auditFields) - const { items } = await challengeTimelineTemplateDomain.update(updateInput); - if (items.length > 0) { + if (ret && ret.id) { // post bus event - await helper.postBusEvent(constants.Topics.ChallengeTimelineTemplateUpdated, items[0]); - return items[0]; + await helper.postBusEvent(constants.Topics.ChallengeTimelineTemplateUpdated, ret); + return ret; } else { throw new errors.NotFoundError( `A challenge type timeline template with id: ${challengeTimelineTemplateId} not found.` @@ -189,6 +212,7 @@ async function fullyUpdateChallengeTimelineTemplate(challengeTimelineTemplateId, } fullyUpdateChallengeTimelineTemplate.schema = { + authUser: Joi.any(), challengeTimelineTemplateId: Joi.id(), data: createChallengeTimelineTemplate.schema.data, }; @@ -199,19 +223,11 @@ fullyUpdateChallengeTimelineTemplate.schema = { * @returns {Object} the deleted challenge type timeline template */ async function deleteChallengeTimelineTemplate(challengeTimelineTemplateId) { - const { items: templates } = await challengeTimelineTemplateDomain.delete( - getLookupCriteria("id", challengeTimelineTemplateId) - ); - - if (templates.length === 0) { - throw new errors.NotFoundError( - `A challenge type timeline template with id: ${challengeTimelineTemplateId} not found.` - ); - } - + let ret = await getChallengeTimelineTemplate(challengeTimelineTemplateId) + await prisma.challengeTimelineTemplate.delete({ where: { id: challengeTimelineTemplateId } }) // post bus event - await helper.postBusEvent(constants.Topics.ChallengeTimelineTemplateDeleted, templates[0]); - return templates[0]; + await helper.postBusEvent(constants.Topics.ChallengeTimelineTemplateDeleted, ret) + return ret } deleteChallengeTimelineTemplate.schema = { diff --git a/src/services/ChallengeTrackService.js b/src/services/ChallengeTrackService.js index 1529ec1a..a68b2570 100644 --- a/src/services/ChallengeTrackService.js +++ b/src/services/ChallengeTrackService.js @@ -1,15 +1,6 @@ /** * This service provides operations of challenge types. */ - -const { GRPC_CHALLENGE_SERVER_HOST, GRPC_CHALLENGE_SERVER_PORT } = process.env; - -const { - DomainHelper: { getScanCriteria, getLookupCriteria }, -} = require("@topcoder-framework/lib-common"); - -const { ChallengeTrackDomain } = require("@topcoder-framework/domain-challenge"); - const _ = require("lodash"); const Joi = require("joi"); const helper = require("../common/helper"); @@ -17,28 +8,24 @@ const logger = require("../common/logger"); const errors = require("../common/errors"); const constants = require("../../app-constants"); -const challengeTrackDomain = new ChallengeTrackDomain( - GRPC_CHALLENGE_SERVER_HOST, - GRPC_CHALLENGE_SERVER_PORT -); +const prisma = require('../common/prisma').getClient() /** * Search challenge types * @param {Object} criteria the search criteria * @returns {Promise} the search result */ -async function searchChallengeTracks(criteria) { - const scanCriteria = getScanCriteria(_.omit(criteria, ["page", "perPage"])); +async function searchChallengeTracks (criteria) { + const filter = getSearchFilter(_.omit(criteria, ['page', 'perPage'])) const page = criteria.page || 1; const perPage = criteria.perPage || 50; const cacheKey = `ChallengeTrack${page}_${perPage}_${JSON.stringify(criteria)}`; - // TODO - move this to ES let records = helper.getFromInternalCache(cacheKey); - if (records == null || records.length == 0) { - const { items } = await challengeTrackDomain.scan({ criteria: scanCriteria }); - records = items; + if (records == null || records.length === 0) { + records = await prisma.challengeTrack.findMany({ where: filter }) + records = _.map(records, r => _.omit(r, constants.auditFields)) helper.setToInternalCache(cacheKey, records); } @@ -48,6 +35,35 @@ async function searchChallengeTracks(criteria) { return { total, page, perPage, result }; } +/** + * Get prisma filter + * + * @param {Object} criteria search criteria + * @returns filter used in prisma + */ +function getSearchFilter (criteria) { + const ret = {} + if (!_.isEmpty(criteria.name)) { + ret.name = { equals: criteria.name } + } + if (!_.isEmpty(criteria.description)) { + ret.description = { contains: criteria.description } + } + if (!_.isEmpty(criteria.abbreviation)) { + ret.abbreviation = { equals: criteria.abbreviation } + } + if (_.isUndefined(criteria.isActive)) { + ret.isActive = { equals: criteria.isActive } + } + if (criteria.legacyId) { + ret.legacyId = { equals: criteria.legacyId } + } + if (!_.isEmpty(criteria.track)) { + ret.track = { equals: criteria.track } + } + return ret +} + searchChallengeTracks.schema = { criteria: Joi.object().keys({ page: Joi.page(), @@ -61,33 +77,59 @@ searchChallengeTracks.schema = { }), }; +/** + * Check challenge track exists by same name + * @param {String} name challenge track name + * @throws conflict error if same name exists + */ +async function checkTrackName (name) { + const existingByName = await prisma.challengeTrack.findMany({ + where: { name } + }) + if (existingByName.length > 0) { throw new errors.ConflictError(`ChallengeTrack with name ${name} already exists`) } +} + +/** + * Check challenge track exists by same abbreviation + * @param {String} name challenge track abbreviation + * @throws conflict error if same abbreviation exists + */ +async function checkTrackAbrv (abbreviation) { + const existingByAbbr = await prisma.challengeTrack.findMany({ + where: { abbreviation } + }) + if (existingByAbbr.length > 0) { + throw new errors.ConflictError( + `ChallengeTrack with abbreviation ${abbreviation} already exists` + ) + } +} + /** * Create challenge type. + * @param {Object} authUser auth user * @param {Object} type the challenge type to created * @returns {Object} the created challenge type */ -async function createChallengeTrack(type) { - const { items: existingByName } = await challengeTrackDomain.scan({ - criteria: getScanCriteria({ name: type.name }), - }); - if (existingByName.length > 0) - throw new errors.ConflictError(`Challenge Type with name ${type.name} already exists`); - const { items: existingByAbbr } = await challengeTrackDomain.scan({ - criteria: getScanCriteria({ abbreviation: type.abbreviation }), - }); - if (existingByAbbr.length > 0) - throw new errors.ConflictError( - `Challenge Type with abbreviation ${type.abbreviation} already exists` - ); - - const ret = await challengeTrackDomain.create(type); - helper.flushInternalCache(); +async function createChallengeTrack (authUser, type) { + await checkTrackName(type.name) + await checkTrackAbrv(type.abbreviation) + let ret = await prisma.challengeTrack.create({ + data: { + ...type, + createdBy: authUser.userId, + updatedBy: authUser.userId + } + }) + ret = _.omit(ret, constants.auditFields) + helper.flushInternalCache() // post bus event await helper.postBusEvent(constants.Topics.ChallengeTrackCreated, ret); return ret; } createChallengeTrack.schema = { + authUser: Joi.any(), type: Joi.object() .keys({ name: Joi.string().required(), @@ -105,8 +147,13 @@ createChallengeTrack.schema = { * @param {String} id the challenge type id * @returns {Object} the challenge type with given id */ -async function getChallengeTrack(id) { - return challengeTrackDomain.lookup(getLookupCriteria("id", id)); +async function getChallengeTrack (id) { + let ret = await prisma.challengeTrack.findUnique({ where: { id } }) + if (!ret || _.isUndefined(ret.id)) { + throw new errors.NotFoundError(`Challenge Track with id: ${id} doesn't exist`) + } + ret = _.omit(ret, constants.auditFields) + return ret } getChallengeTrack.schema = { @@ -115,48 +162,42 @@ getChallengeTrack.schema = { /** * Fully update challenge type. + * @param {Object} authUser auth user * @param {String} id the challenge type id * @param {Object} data the challenge type data to be updated * @returns {Object} the updated challenge type */ -async function fullyUpdateChallengeTrack(id, data) { - const type = await getChallengeTrack(id); +async function fullyUpdateChallengeTrack (authUser, id, data) { + const type = await getChallengeTrack(id) if (type.name.toLowerCase() !== data.name.toLowerCase()) { - const { items: existingByName } = await challengeTrackDomain.scan({ - criteria: getScanCriteria({ name: data.name }), - }); - if (existingByName.length > 0) - throw new errors.ConflictError(`Challenge Track with name ${data.name} already exists`); + await checkTrackName(data.name) } if (type.abbreviation.toLowerCase() !== data.abbreviation.toLowerCase()) { - const { items: existingByAbbr } = await challengeTrackDomain.scan({ - criteria: getScanCriteria({ abbreviation: data.abbreviation }), - }); - if (existingByAbbr.length > 0) - throw new errors.ConflictError( - `Challenge Type with abbreviation ${data.abbreviation} already exists` - ); + await checkTrackAbrv(data.abbreviation) } if (_.isUndefined(data.description)) { - type.description = undefined; + data.description = null } if (_.isUndefined(data.legacyId)) { - type.legacyId = undefined; + data.legacyId = null } if (_.isUndefined(data.track)) { - type.track = undefined; + data.track = null } - const { items } = await challengeTrackDomain.update({ - filterCriteria: getScanCriteria({ id }), - updateInput: _.extend(type, data), - }); - helper.flushInternalCache(); + data.updatedBy = authUser.userId + let ret = await prisma.challengeTrack.update({ + where: { id }, + data + }) + ret = _.omit(ret, constants.auditFields) + helper.flushInternalCache() // post bus event - await helper.postBusEvent(constants.Topics.ChallengeTrackUpdated, items[0]); - return items[0]; + await helper.postBusEvent(constants.Topics.ChallengeTrackUpdated, ret) + return ret } fullyUpdateChallengeTrack.schema = { + authUser: Joi.any(), id: Joi.id(), data: Joi.object() .keys({ @@ -172,40 +213,33 @@ fullyUpdateChallengeTrack.schema = { /** * Partially update challenge type. + * @param {Object} authUser auth user * @param {String} id the challenge type id * @param {Object} data the challenge type data to be updated * @returns {Object} the updated challenge type */ -async function partiallyUpdateChallengeTrack(id, data) { - const type = await getChallengeTrack(id); +async function partiallyUpdateChallengeTrack (authUser, id, data) { + const type = await getChallengeTrack(id) if (data.name && type.name.toLowerCase() !== data.name.toLowerCase()) { - const { items: existingByName } = await challengeTrackDomain.scan({ - criteria: getScanCriteria({ name: data.name }), - }); - if (existingByName.length > 0) - throw new errors.ConflictError(`Challenge Track with name ${data.name} already exists`); + await checkTrackName(data.name) } if (data.abbreviation && type.abbreviation.toLowerCase() !== data.abbreviation.toLowerCase()) { - const { items: existingByAbbr } = await challengeTrackDomain.scan({ - criteria: getScanCriteria({ abbreviation: data.abbreviation }), - }); - if (existingByAbbr.length > 0) - throw new errors.ConflictError( - `Challenge Type with abbreviation ${data.abbreviation} already exists` - ); - } - - const { items } = await challengeTrackDomain.update({ - filterCriteria: getScanCriteria({ id }), - updateInput: _.extend(type, data), - }); - helper.flushInternalCache(); + await checkTrackAbrv(data.abbreviation) + } + data.updatedBy = authUser.userId + let ret = await prisma.challengeTrack.update({ + where: { id }, + data: _.extend(type, data) + }) + ret = _.omit(ret, constants.auditFields) + helper.flushInternalCache() // post bus event - await helper.postBusEvent(constants.Topics.ChallengeTrackUpdated, _.assignIn({ id }, data)); - return items[0]; + await helper.postBusEvent(constants.Topics.ChallengeTrackUpdated, _.assignIn({ id }, data)) + return ret } partiallyUpdateChallengeTrack.schema = { + authUser: Joi.any(), id: Joi.id(), data: Joi.object() .keys({ @@ -224,13 +258,14 @@ partiallyUpdateChallengeTrack.schema = { * @param {String} id the challenge track id * @return {Object} the deleted challenge track */ -async function deleteChallengeTrack(id) { - const { items } = await challengeTrackDomain.delete(getLookupCriteria("id", id)); +async function deleteChallengeTrack (id) { + let ret = await getChallengeTrack(id) + await prisma.challengeTrack.delete({ where: { id } }) helper.flushInternalCache(); // post bus event - await helper.postBusEvent(constants.Topics.ChallengeTypeDeleted, items[0]); - return items[0]; + await helper.postBusEvent(constants.Topics.ChallengeTypeDeleted, ret) + return ret } deleteChallengeTrack.schema = { diff --git a/src/services/ChallengeTypeService.js b/src/services/ChallengeTypeService.js index 454fbf4e..3cbb0ffb 100644 --- a/src/services/ChallengeTypeService.js +++ b/src/services/ChallengeTypeService.js @@ -1,25 +1,14 @@ /** * This service provides operations of challenge tracks. */ - -const { GRPC_CHALLENGE_SERVER_HOST, GRPC_CHALLENGE_SERVER_PORT } = process.env; - -const { - DomainHelper: { getLookupCriteria, getScanCriteria }, -} = require("@topcoder-framework/lib-common"); - -const { ChallengeTypeDomain } = require("@topcoder-framework/domain-challenge"); - const _ = require("lodash"); const Joi = require("joi"); const helper = require("../common/helper"); +const logger = require("../common/logger"); const constants = require("../../app-constants"); const errors = require("../common/errors"); -const challengeTypeDomain = new ChallengeTypeDomain( - GRPC_CHALLENGE_SERVER_HOST, - GRPC_CHALLENGE_SERVER_PORT -); +const prisma = require('../common/prisma').getClient() /** * Search challenge types @@ -27,19 +16,18 @@ const challengeTypeDomain = new ChallengeTypeDomain( * @returns {Promise} the search result */ async function searchChallengeTypes(criteria) { - const scanCriteria = getScanCriteria(_.omit(criteria, ["page", "perPage"])); + const searchFilter = getSearchFilter(_.omit(criteria, ['page', 'perPage'])) const page = criteria.page || 1; const perPage = criteria.perPage || 50; const cacheKey = `ChallengeType_${page}_${perPage}_${JSON.stringify(criteria)}`; - // TODO - move this to ES let records = helper.getFromInternalCache(cacheKey); if (records == null || records.length === 0) { - const { items } = await challengeTypeDomain.scan({ criteria: scanCriteria }); - records = items; - helper.setToInternalCache(cacheKey, records); + records = await prisma.challengeType.findMany({ where: searchFilter }) + records = _.map(records, r => _.omit(r, constants.auditFields)) + helper.setToInternalCache(cacheKey, records) } const total = records.length; @@ -48,6 +36,32 @@ async function searchChallengeTypes(criteria) { return { total, page, perPage, result }; } +/** + * Get prisma filter + * + * @param {Object} criteria search criteria + * @returns filter used in prisma + */ +function getSearchFilter (criteria) { + const ret = {} + if (!_.isEmpty(criteria.name)) { + ret.name = { equals: criteria.name } + } + if (!_.isEmpty(criteria.abbreviation)) { + ret.abbreviation = { equals: criteria.abbreviation } + } + if (!_.isEmpty(criteria.description)) { + ret.description = { contains: criteria.description } + } + if (!_.isUndefined(criteria.isActive)) { + ret.isActive = { equals: criteria.isActive } + } + if (!_.isUndefined(criteria.isTask)) { + ret.isTask = { equals: criteria.isTask } + } + return ret +} + searchChallengeTypes.schema = { criteria: Joi.object().keys({ page: Joi.page(), @@ -60,32 +74,59 @@ searchChallengeTypes.schema = { }), }; +/** + * Check challenge type exists by same name + * @param {String} name challenge type name + * @throws conflict error if same name exists + */ +async function checkTypeName (name) { + const existingByName = await prisma.challengeType.findMany({ + where: { name } + }) + if (existingByName && existingByName.length > 0) { throw new errors.ConflictError(`ChallengeType with name: ${name} already exist`) } +} + +/** + * Check challenge type exists by same abbreviation + * @param {String} name challenge type abbreviation + * @throws conflict error if same abbreviation exists + */ +async function checkTypeAbrv (abbreviation) { + const existingByAbbr = await prisma.challengeType.findMany({ + where: { abbreviation } + }) + if (existingByAbbr && existingByAbbr.length > 0) { + throw new errors.ConflictError( + `ChallengeType with abbreviation: ${abbreviation} already exist` + ) + } +} + /** * Create challenge type. + * @param {Object} authUser auth user info * @param {Object} type the challenge type to created * @returns {Object} the created challenge type */ -async function createChallengeType(type) { - const { items: existingByName } = await challengeTypeDomain.scan({ - criteria: getScanCriteria({ name: type.name }), - }); - if (existingByName.length > 0) - throw new errors.ConflictError(`Challenge Type with name ${type.name} already exists`); - const { items: existingByAbbr } = await challengeTypeDomain.scan({ - criteria: getScanCriteria({ abbreviation: type.abbreviation }), - }); - if (existingByAbbr.length > 0) - throw new errors.ConflictError( - `Challenge Type with abbreviation ${type.abbreviation} already exists` - ); - const ret = await challengeTypeDomain.create(type); - helper.flushInternalCache(); +async function createChallengeType (authUser, type) { + await checkTypeName(type.name) + await checkTypeAbrv(type.abbreviation) + let ret = await prisma.challengeType.create({ + data: { + ...type, + createdBy: authUser.userId, + updatedBy: authUser.userId + } + }) + ret = _.omit(ret, constants.auditFields) + helper.flushInternalCache() // post bus event - await helper.postBusEvent(constants.Topics.ChallengeTypeCreated, ret); - return ret; + await helper.postBusEvent(constants.Topics.ChallengeTypeCreated, ret) + return ret } createChallengeType.schema = { + authUser: Joi.any(), type: Joi.object() .keys({ name: Joi.string().required(), @@ -103,7 +144,14 @@ createChallengeType.schema = { * @returns {Object} the challenge type with given id */ async function getChallengeType(id) { - return await challengeTypeDomain.lookup(getLookupCriteria("id", id)); + let ret = await prisma.challengeType.findUnique({ + where: { id } + }) + if (!ret || _.isUndefined(ret.id)) { + throw new errors.NotFoundError(`ChallengeType with id: ${id} doesn't exist`) + } + ret = _.omit(ret, constants.auditFields) + return ret } getChallengeType.schema = { @@ -112,41 +160,37 @@ getChallengeType.schema = { /** * Fully update challenge type. + * @param {Object} authUser auth user info * @param {String} id the challenge type id * @param {Object} data the challenge type data to be updated * @returns {Object} the updated challenge type */ -async function fullyUpdateChallengeType(id, data) { - const type = await getChallengeType(id); +async function fullyUpdateChallengeType (authUser, id, data) { + const type = await getChallengeType(id) if (type.name.toLowerCase() !== data.name.toLowerCase()) { - const { items: existingByName } = await challengeTypeDomain.scan({ - criteria: getScanCriteria({ name: data.name }), - }); - if (existingByName.length > 0) - throw new errors.ConflictError(`Challenge Type with name ${data.name} already exists`); + await checkTypeName(data.name) } if (type.abbreviation.toLowerCase() !== data.abbreviation.toLowerCase()) { - const { items: existingByAbbr } = await challengeTypeDomain.scan({ - criteria: getScanCriteria({ abbreviation: data.abbreviation }), - }); - if (existingByAbbr.length > 0) - throw new errors.ConflictError( - `Challenge Type with abbreviation ${data.abbreviation} already exists` - ); + await checkTypeAbrv(data.abbreviation) } if (_.isUndefined(data.description)) { - type.description = undefined; + data.description = null } - const { items } = await challengeTypeDomain.update({ - filterCriteria: getScanCriteria({ id }), - updateInput: data, - }); - helper.flushInternalCache(); + let ret = await prisma.challengeType.update({ + data: { + ...data, + updatedBy: authUser.userId + }, + where: { id } + }) + ret = _.omit(ret, constants.auditFields) + helper.flushInternalCache() // post bus event - await helper.postBusEvent(constants.Topics.ChallengeTypeUpdated, items[0]); - return items[0]; + await helper.postBusEvent(constants.Topics.ChallengeTypeUpdated, ret) + return ret } fullyUpdateChallengeType.schema = { + authUser: Joi.any(), id: Joi.id(), data: Joi.object() .keys({ @@ -161,39 +205,33 @@ fullyUpdateChallengeType.schema = { /** * Partially update challenge type. + * @param {Object} authUser auth user info * @param {String} id the challenge type id * @param {Object} data the challenge type data to be updated * @returns {Object} the updated challenge type */ -async function partiallyUpdateChallengeType(id, data) { - const type = await getChallengeType(id); +async function partiallyUpdateChallengeType (authUser, id, data) { + const type = await getChallengeType(id) if (data.name && type.name.toLowerCase() !== data.name.toLowerCase()) { - const { items: existingByName } = await challengeTypeDomain.scan({ - criteria: getScanCriteria({ name: data.name }), - }); - if (existingByName.length > 0) - throw new errors.ConflictError(`Challenge Type with name ${data.name} already exists`); + await checkTypeName(data.name) } if (data.abbreviation && type.abbreviation.toLowerCase() !== data.abbreviation.toLowerCase()) { - const { items: existingByAbbr } = await challengeTypeDomain.scan({ - criteria: getScanCriteria({ abbreviation: data.abbreviation }), - }); - if (existingByAbbr.length > 0) - throw new errors.ConflictError( - `Challenge Type with abbreviation ${data.abbreviation} already exists` - ); + await checkTypeAbrv(data.abbreviation) } - const { items } = await challengeTypeDomain.update({ - filterCriteria: getScanCriteria({ id }), - updateInput: _.extend(type, data), - }); - helper.flushInternalCache(); + data.updatedBy = authUser.userId + let ret = await prisma.challengeType.update({ + where: { id }, + data: _.extend(type, data) + }) + ret = _.omit(ret, constants.auditFields) + helper.flushInternalCache() // post bus event - await helper.postBusEvent(constants.Topics.ChallengeTypeUpdated, _.assignIn({ id }, data)); - return items[0]; + await helper.postBusEvent(constants.Topics.ChallengeTypeUpdated, _.assignIn({ id }, data)) + return ret } partiallyUpdateChallengeType.schema = { + authUser: Joi.any(), id: Joi.id(), data: Joi.object() .keys({ @@ -212,11 +250,12 @@ partiallyUpdateChallengeType.schema = { * @returns {Object} the deleted challenge type */ async function deleteChallengeType(id) { - const { items } = await challengeTypeDomain.delete(getLookupCriteria("id", id)); + let ret = await getChallengeType(id); + await prisma.challengeType.delete({ where: { id } }); helper.flushInternalCache(); // post bus event - await helper.postBusEvent(constants.Topics.ChallengeTypeDeleted, items[0]); - return items[0]; + await helper.postBusEvent(constants.Topics.ChallengeTypeDeleted, ret) + return ret } deleteChallengeType.schema = { @@ -232,8 +271,4 @@ module.exports = { deleteChallengeType, }; -// logger.buildService(module.exports, { -// tracing: { -// enabled: true -// } -// }) +logger.buildService(module.exports); diff --git a/src/services/PhaseService.js b/src/services/PhaseService.js index ac954192..2e0240d2 100644 --- a/src/services/PhaseService.js +++ b/src/services/PhaseService.js @@ -1,14 +1,6 @@ /** * This service provides operations of phases. */ -const { GRPC_CHALLENGE_SERVER_HOST, GRPC_CHALLENGE_SERVER_PORT } = process.env; - -const { PhaseDomain } = require("@topcoder-framework/domain-challenge"); - -const { - DomainHelper: { getScanCriteria, getLookupCriteria }, -} = require("@topcoder-framework/lib-common"); - const _ = require("lodash"); const Joi = require("joi"); const helper = require("../common/helper"); @@ -16,7 +8,7 @@ const logger = require("../common/logger"); const constants = require("../../app-constants"); const errors = require("../common/errors"); -const phaseDomain = new PhaseDomain(GRPC_CHALLENGE_SERVER_HOST, GRPC_CHALLENGE_SERVER_PORT); +const prisma = require('../common/prisma').getClient() /** * Search phases @@ -24,21 +16,35 @@ const phaseDomain = new PhaseDomain(GRPC_CHALLENGE_SERVER_HOST, GRPC_CHALLENGE_S * @returns {Object} the search result */ async function searchPhases(criteria = {}) { - const scanCriteria = getScanCriteria(_.omit(criteria, ["page", "perPage"])); + const searchFilter = getSearchFilter(_.omit(criteria, ['page', 'perPage'])) const page = criteria.page || 1; const perPage = criteria.perPage || 50; - const { items: list } = await phaseDomain.scan({ - criteria: scanCriteria, - }); - - const total = list.length; - const result = list.slice((page - 1) * perPage, page * perPage); + let records = await prisma.phase.findMany({ + where: searchFilter + }) + records = _.map(records, r => _.omit(r, constants.auditFields)) + const total = records.length; + const result = records.slice((page - 1) * perPage, page * perPage); return { total, page, perPage, result }; } +/** + * Get prisma filter + * + * @param {Object} criteria search criteria + * @returns filter used in prisma + */ +function getSearchFilter (criteria) { + const ret = {} + if (!_.isEmpty(criteria.name)) { + ret.name = { equals: criteria.name } + } + return ret +} + searchPhases.schema = { criteria: Joi.object().keys({ page: Joi.page(), @@ -47,24 +53,37 @@ searchPhases.schema = { }), }; +/** + * Check phase with given name exists or not + * @param {String} name phase name + * @throws error if phase name exists in db + */ +async function checkName (name) { + const existingByName = await prisma.phase.findMany({ + where: { name } + }) + if (existingByName.length > 0) { throw new errors.ConflictError(`Phase with name: ${name} already exist`) } +} + /** * Create phase. + * @param {Object} authUser auth user * @param {Object} phase the phase to created * @returns {Object} the created phase */ -async function createPhase(phase) { - const { items: existingByName } = await phaseDomain.scan({ - criteria: getScanCriteria({ name: phase.name }), - }); - if (existingByName.length > 0) - throw new errors.ConflictError(`Phase with name ${phase.name} already exists`); - const ret = await phaseDomain.create(phase); +async function createPhase (authUser, phase) { + await checkName(phase.name) + phase.createdBy = authUser.userId + phase.updatedBy = authUser.userId + let ret = await prisma.phase.create({ data: phase }) + ret = _.omit(ret, constants.auditFields) // post bus event await helper.postBusEvent(constants.Topics.ChallengePhaseCreated, ret); return ret; } createPhase.schema = { + authUser: Joi.any(), phase: Joi.object() .keys({ name: Joi.string().required(), @@ -81,7 +100,12 @@ createPhase.schema = { * @returns {Object} the phase with given id */ async function getPhase(phaseId) { - return phaseDomain.lookup(getLookupCriteria("id", phaseId)); + let ret = await prisma.phase.findUnique({ where: { id: phaseId } }) + if (!ret || _.isUndefined(ret.id)) { + throw new errors.NotFoundError(`Phase with id: ${phaseId} doesn't exist`) + } + ret = _.omit(ret, constants.auditFields) + return ret } getPhase.schema = { @@ -90,49 +114,51 @@ getPhase.schema = { /** * Update phase. + * @param {Object} authUser auth user * @param {String} phaseId the phase id * @param {Object} data the phase data to be updated * @param {Boolean} isFull the flag indicate it is a fully update operation. * @returns {Object} the updated phase */ -async function update(phaseId, data, isFull) { +async function update (authUser, phaseId, data, isFull) { const phase = await getPhase(phaseId); - if (data.name && data.name.toLowerCase() !== phase.name.toLowerCase()) { - const { items } = await phaseDomain.scan({ - criteria: getScanCriteria({ name: data.name }), - }); - if (items.length > 0) - throw new errors.ConflictError(`Phase with name ${phase.name} already exists`); + await checkName(data.name); } if (isFull) { // description is optional field, can be undefined - phase.description = data.description; + if (_.isUndefined(data.description)) { + data.description = null + } } - const { items } = await phaseDomain.update({ - filterCriteria: getScanCriteria({ id: phaseId }), - updateInput: data, + data.updatedBy = authUser.userId; + let ret = await prisma.phase.update({ + where: { id: phaseId }, + data }); + ret = _.omit(ret, constants.auditFields); // post bus event await helper.postBusEvent( constants.Topics.ChallengePhaseUpdated, - isFull ? items[0] : _.assignIn({ id: phaseId }, data) + isFull ? ret : _.assignIn({ id: phaseId }, data) ); - return items[0]; + return ret; } /** * Fully update phase. + * @param {Object} authUser auth user * @param {String} phaseId the phase id * @param {Object} data the phase data to be updated * @returns {Object} the updated phase */ -async function fullyUpdatePhase(phaseId, data) { - return update(phaseId, data, true); +async function fullyUpdatePhase (authUser, phaseId, data) { + return update(authUser, phaseId, data, true); } fullyUpdatePhase.schema = { + authUser: Joi.any(), phaseId: Joi.id(), data: Joi.object() .keys({ @@ -146,15 +172,17 @@ fullyUpdatePhase.schema = { /** * Partially update phase. + * @param {Object} authUser auth user * @param {String} phaseId the phase id * @param {Object} data the phase data to be updated * @returns {Object} the updated phase */ -async function partiallyUpdatePhase(phaseId, data) { - return update(phaseId, data); +async function partiallyUpdatePhase (authUser, phaseId, data) { + return update(authUser, phaseId, data); } partiallyUpdatePhase.schema = { + authUser: Joi.any(), phaseId: Joi.id(), data: Joi.object() .keys({ @@ -172,10 +200,11 @@ partiallyUpdatePhase.schema = { * @returns {Object} the deleted phase */ async function deletePhase(phaseId) { - const { items } = await phaseDomain.delete(getLookupCriteria("id", phaseId)); + let ret = await getPhase(phaseId) + await prisma.phase.delete({ where: { id: phaseId } }) // post bus event - await helper.postBusEvent(constants.Topics.ChallengePhaseDeleted, items[0]); - return items[0]; + await helper.postBusEvent(constants.Topics.ChallengePhaseDeleted, ret); + return ret; } deletePhase.schema = { diff --git a/src/services/TimelineTemplateService.js b/src/services/TimelineTemplateService.js index a58b5a97..a7b9a0cd 100644 --- a/src/services/TimelineTemplateService.js +++ b/src/services/TimelineTemplateService.js @@ -1,15 +1,6 @@ /** * This service provides operations of timeline template. */ - -const { GRPC_CHALLENGE_SERVER_HOST, GRPC_CHALLENGE_SERVER_PORT } = process.env; - -const { - DomainHelper: { getScanCriteria, getLookupCriteria }, -} = require("@topcoder-framework/lib-common"); - -const { TimelineTemplateDomain } = require("@topcoder-framework/domain-challenge"); - const _ = require("lodash"); const Joi = require("joi"); const helper = require("../common/helper"); @@ -19,10 +10,7 @@ const errors = require("../common/errors"); const PhaseService = require("./PhaseService"); -const timelineTemplateDomain = new TimelineTemplateDomain( - GRPC_CHALLENGE_SERVER_HOST, - GRPC_CHALLENGE_SERVER_PORT -); +const prisma = require('../common/prisma').getClient() module.exports = {}; @@ -32,20 +20,38 @@ module.exports = {}; * @returns {Promise} the search result */ async function searchTimelineTemplates(criteria) { - const scanCriteria = getScanCriteria(_.omit(criteria, ["page", "perPage"])); + const searchFilter = getSearchFilter(_.omit(criteria, ['page', 'perPage'])) const page = criteria.page || 1; const perPage = criteria.perPage || 50; - const { items } = await timelineTemplateDomain.scan({ - criteria: scanCriteria, - }); - + let items = await prisma.timelineTemplate.findMany({ + where: searchFilter, + include: { phases: true } + }) + items = _.map(items, r => _.omit(r, constants.auditFields)) + items.forEach(item => { + item.phases = _.map(item.phases, p => _.omit(p, constants.auditFields)) + }) const total = items.length; const result = items.slice((page - 1) * perPage, page * perPage); return { total, page, perPage, result }; } +/** + * Get prisma filter + * + * @param {Object} criteria search criteria + * @returns filter used in prisma + */ +function getSearchFilter (criteria) { + const ret = {} + if (!_.isEmpty(criteria.name)) { + ret.name = { equals: criteria.name } + } + return ret +} + searchTimelineTemplates.schema = { criteria: Joi.object().keys({ page: Joi.page(), @@ -54,34 +60,53 @@ searchTimelineTemplates.schema = { }), }; +/** + * Check timeline template with given name exists or not + * @param {String} name timeline template name + * @throws error if timeline template name exists in db + */ +async function checkName (name) { + const existingByName = await prisma.timelineTemplate.findMany({ + where: { name } + }) + if (existingByName.length > 0) { throw new errors.ConflictError(`TimelineTemplate with name: ${name} already exist`) } +} + /** * Create timeline template. + * @param {Object} authUser auth user * @param {Object} timelineTemplate the timeline template to created * @returns {Object} the created timeline template */ -async function createTimelineTemplate(timelineTemplate) { - const scanCriteria = getScanCriteria({ - name: timelineTemplate.name, - }); - - const existing = await timelineTemplateDomain.scan({ criteria: scanCriteria }); - - if (existing && existing.items.length) { - throw new errors.ConflictError( - `Timeline template with name ${timelineTemplate.name} already exists` - ); - } +async function createTimelineTemplate (authUser, timelineTemplate) { + await checkName(timelineTemplate.name) // Do not validate phases for now // await phaseHelper.validatePhases(timelineTemplate.phases); - const ret = await timelineTemplateDomain.create(timelineTemplate); + const phases = timelineTemplate.phases + _.forEach(phases, p => { + p.createdBy = authUser.userId + p.updatedBy = authUser.userId + }) + timelineTemplate.createdBy = authUser.userId + timelineTemplate.updatedBy = authUser.userId + timelineTemplate.phases = { create: phases } + + let ret = await prisma.timelineTemplate.create({ + data: timelineTemplate, + include: { phases: true } + }) + // remove audit fields + ret = _.omit(ret, constants.auditFields) + ret.phases = _.map(ret.phases, p => _.omit(p, constants.auditFields)) // post bus event await helper.postBusEvent(constants.Topics.TimelineTemplateCreated, ret); return ret; } createTimelineTemplate.schema = { + authUser: Joi.any(), timelineTemplate: Joi.object() .keys({ name: Joi.string().required(), @@ -107,7 +132,16 @@ createTimelineTemplate.schema = { * @returns {Object} the timeline template with given id */ async function getTimelineTemplate(timelineTemplateId) { - return timelineTemplateDomain.lookup(getLookupCriteria("id", timelineTemplateId)); + let ret = await prisma.timelineTemplate.findUnique({ + where: { id: timelineTemplateId }, + include: { phases: true } + }) + if (!ret || _.isUndefined(ret.id)) { + throw new errors.NotFoundError(`TimelineTemplate with id: ${timelineTemplateId} doesn't exist`) + } + ret = _.omit(ret, constants.auditFields) + ret.phases = _.map(ret.phases, p => _.omit(p, constants.auditFields)) + return ret } getTimelineTemplate.schema = { @@ -116,18 +150,19 @@ getTimelineTemplate.schema = { /** * Update timeline template. + * @param {Object} authUser auth user * @param {String} timelineTemplateId the timeline template id * @param {Object} data the timeline template data to be updated * @param {Boolean} isFull the flag indicate it is a fully update operation. * @returns {Object} the updated timeline template */ -async function update(timelineTemplateId, data, isFull) { - const timelineTemplate = await getTimelineTemplate(timelineTemplateId); +async function update (authUser, timelineTemplateId, data, isFull) { + const timelineTemplate = await getTimelineTemplate(timelineTemplateId) if (data.name && data.name.toLowerCase() !== timelineTemplate.name.toLowerCase()) { - const { items: existingByName } = await timelineTemplateDomain.scan({ - criteria: getScanCriteria({ name: data.name }), - }); + const existingByName = await prisma.timelineTemplate.findMany({ + where: { name: data.name } + }) if (existingByName.length > 1) throw new errors.ConflictError(`Timeline template with name ${data.name} already exists`); @@ -141,35 +176,54 @@ async function update(timelineTemplateId, data, isFull) { if (isFull) { // description is optional field, can be undefined - timelineTemplate.description = data.description; + if (_.isUndefined(data.description)) { + data.description = null + } } else { - data = { ...timelineTemplate, ...data }; + data = { ...timelineTemplate, ...data } } - - const { items } = await timelineTemplateDomain.update({ - filterCriteria: getScanCriteria({ id: timelineTemplateId }), - updateInput: data, - }); + data.updatedBy = authUser.userId + data.phases = { + create: _.forEach(data.phases, p => { + p.createdBy = authUser.userId + p.updatedBy = authUser.userId + delete p.timelineTemplateId + }) + } + let ret = await prisma.$transaction(async (tx) => { + // remove old timelineTemplatePhase + await tx.timelineTemplatePhase.deleteMany({ where: { timelineTemplateId } }) + // update data and create new phases + return await tx.timelineTemplate.update({ + where: { id: timelineTemplateId }, + data, + include: { phases: true } + }) + }) + ret = _.omit(ret, constants.auditFields) + ret.phases = _.map(ret.phases, p => _.omit(p, constants.auditFields)) // post bus event await helper.postBusEvent( constants.Topics.TimelineTemplateUpdated, - isFull ? items[0] : _.assignIn({ id: timelineTemplateId }, data) + isFull ? ret : _.assignIn({ id: timelineTemplateId }, ret) ); - return items[0]; + return ret } /** * Fully update timeline template. + * @param {Object} authUser auth user * @param {String} timelineTemplateId the timeline template id * @param {Object} data the timeline template data to be updated * @returns {Object} the updated timeline template */ -async function fullyUpdateTimelineTemplate(timelineTemplateId, data) { - return update(timelineTemplateId, data, true); +async function fullyUpdateTimelineTemplate (authUser, timelineTemplateId, data) { + return update(authUser, timelineTemplateId, data, true) } fullyUpdateTimelineTemplate.schema = { + authUser: Joi.any(), timelineTemplateId: Joi.id(), data: Joi.object() .keys({ @@ -192,15 +246,17 @@ fullyUpdateTimelineTemplate.schema = { /** * Partially update timeline template. + * @param {Object} authUser auth user * @param {String} timelineTemplateId the timeline template id * @param {Object} data the timeline template data to be updated * @returns {Object} the updated timeline template */ -async function partiallyUpdateTimelineTemplate(timelineTemplateId, data) { - return update(timelineTemplateId, data); +async function partiallyUpdateTimelineTemplate (authUser, timelineTemplateId, data) { + return update(authUser, timelineTemplateId, data) } partiallyUpdateTimelineTemplate.schema = { + authUser: Joi.any(), timelineTemplateId: Joi.id(), data: Joi.object() .keys({ @@ -226,12 +282,12 @@ partiallyUpdateTimelineTemplate.schema = { * @returns {Object} the deleted timeline template */ async function deleteTimelineTemplate(timelineTemplateId) { - const { items } = await timelineTemplateDomain.delete( - getLookupCriteria("id", timelineTemplateId) - ); + let ret = await getTimelineTemplate(timelineTemplateId) + // TimelineTemplatePhase will be deleted with cascade + await prisma.timelineTemplate.delete({ where: { id: timelineTemplateId } }) // post bus event - await helper.postBusEvent(constants.Topics.TimelineTemplateDeleted, items[0]); - return items[0]; + await helper.postBusEvent(constants.Topics.TimelineTemplateDeleted, ret) + return ret } deleteTimelineTemplate.schema = { diff --git a/test/testHelper.js b/test/testHelper.js index 7e637316..4b8fa4a7 100644 --- a/test/testHelper.js +++ b/test/testHelper.js @@ -1,20 +1,18 @@ /** * This file defines common helper methods used for tests */ -const _ = require("lodash"); -const uuid = require("uuid/v4"); -const config = require("config"); -const helper = require("../src/common/helper"); -const constants = require("../app-constants"); - -const esClient = helper.getESClient(); - -let challengeType; -let phase; -let phase2; -let timelineTemplate; -let challenge; -let completedChallenge; +const _ = require('lodash') +const uuid = require('uuid/v4') +const constants = require('../app-constants') +const prisma = require('../src/common/prisma').getClient() + +let challengeTrack +let challengeType +let phase +let phase2 +let timelineTemplate +let challenge +let taskChallenge /** * function to deeply compare arrays regardeless of the order @@ -24,191 +22,201 @@ let completedChallenge; * @returns {Boolean} The flag indicating whether the arrays have the same content regardless of the order */ const deepCompareArrays = (arr1, arr2) => { - return _(arr1).xorWith(arr2, _.isEqual).isEmpty(); -}; + return _(arr1).xorWith(arr2, _.isEqual).isEmpty() +} + +const challengeTrackId = uuid() +const challengeTypeId = uuid() +const phase1Id = uuid() +const phase2Id = uuid() +const timelineTemplateId = uuid() +const challengeId = uuid() +const taskChallengeId = uuid() /** * Create test data */ -async function createData() { - challengeType = await helper.create("ChallengeType", { - id: uuid(), - name: `type-${new Date().getTime()}`, - description: "desc", - isActive: true, - abbreviation: "abbr", - legacyId: 123, - }); - phase = await helper.create("Phase", { - id: uuid(), - name: `phase-${new Date().getTime()}`, - description: "desc", - isOpen: true, - duration: 123, - }); - phase2 = await helper.create("Phase", { - id: uuid(), - name: `phase2-${new Date().getTime()}`, - description: "desc", - isOpen: true, - duration: 432, - }); - timelineTemplate = await helper.create("TimelineTemplate", { - id: uuid(), +async function createData () { + const testUserId = 'testuser' + challengeTrack = await prisma.challengeTrack.create({ + data: { + id: challengeTrackId, + name: `type-${new Date().getTime()}`, + description: 'desc', + isActive: true, + track: 'DEVELOP', + abbreviation: 'abbr', + createdBy: testUserId, + updatedBy: testUserId + } + }) + challengeType = await prisma.challengeType.create({ + data: { + id: challengeTypeId, + name: `type-${new Date().getTime()}`, + description: 'desc', + isActive: true, + abbreviation: 'abbr', + createdBy: testUserId, + updatedBy: testUserId + } + }) + phase = await prisma.phase.create({ + data: { + id: phase1Id, + name: `phase-${new Date().getTime()}`, + description: 'desc', + isOpen: true, + duration: 123, + createdBy: testUserId, + updatedBy: testUserId + } + }) + phase2 = await prisma.phase.create({ + data: { + id: phase2Id, + name: `phase2-${new Date().getTime()}`, + description: 'desc', + isOpen: true, + duration: 432, + createdBy: testUserId, + updatedBy: testUserId + } + }) + timelineTemplate = { + id: timelineTemplateId, name: `tt-${new Date().getTime()}`, - description: "desc", + description: 'desc', isActive: true, + createdBy: testUserId, + updatedBy: testUserId, phases: [ { phaseId: phase.id, defaultDuration: 10000, + createdBy: testUserId, + updatedBy: testUserId }, { phaseId: phase2.id, predecessor: phase.id, defaultDuration: 20000, - }, - ], - }); - const nm = `a B c challenge${new Date().getTime()}`; + createdBy: testUserId, + updatedBy: testUserId + } + ] + } + const templateModel = timelineTemplate + templateModel.phases = { create: templateModel.phases } + await prisma.timelineTemplate.create({ + data: templateModel + }) + const nm = `a B c challenge${new Date().getTime()}` const challengeData = { - id: uuid(), - typeId: challengeType.id, + id: challengeId, name: nm, - description: "desc", - metadata: [{ name: nm, value: "value" }], - timelineTemplateId: timelineTemplate.id, - phases: [phase], - prizeSets: [ - { - type: constants.prizeSetTypes.ChallengePrizes, - description: "ddd", - prizes: [ - { - description: "some prize", - type: "type", - value: 800, - }, - ], - }, - ], - tags: ["tag1"], + description: 'desc', + privateDescription: 'private description', + descriptionFormat: 'html', + timelineTemplate: { connect: { id: timelineTemplate.id } }, + type: { connect: { id: challengeTypeId } }, + track: { connect: { id: challengeTrackId } }, + tags: ['tag1'], projectId: 111, - legacy: { - track: "track", - reviewType: "Virus Scan", - forumId: 123456, - }, legacyId: 222, startDate: new Date(), - status: constants.challengeStatuses.Active, - groups: ["group1"], - gitRepoURLs: ["https://mozilla.org/?x=%D1%88%D0%B5%D0%BB%D0%BB%D1%8B"], - created: new Date(), - createdBy: "admin", - }; - - challenge = await helper.create("Challenge", challengeData); - completedChallenge = await helper.create( - "Challenge", - _.assign(challengeData, { id: uuid(), status: constants.challengeStatuses.Completed }) - ); - - // create challenge in Elasticsearch - await esClient.create({ - index: config.ES.ES_INDEX, - id: challenge.id, - body: _.assignIn({ numOfSubmissions: 0, numOfRegistrants: 0 }, challenge.originalItem()), - refresh: "true", // refresh ES so that it is visible for read operations instantly - }); - - // create completedChallenge in Elasticsearch - await esClient.create({ - index: config.ES.ES_INDEX, - id: completedChallenge.id, - body: _.assignIn( - { numOfSubmissions: 0, numOfRegistrants: 0 }, - completedChallenge.originalItem() - ), - refresh: "true", // refresh ES so that it is visible for read operations instantly - }); + status: constants.challengeStatuses.Completed.toUpperCase(), + createdAt: new Date(), + createdBy: 'admin', + updatedBy: 'admin' + } + challenge = await prisma.challenge.create({ data: challengeData }) + + taskChallenge = await prisma.challenge.create({ data: { + id: taskChallengeId, + taskIsTask: true, + taskIsAssigned: true, + name: 'Task', + description: 'desc', + privateDescription: 'private description', + descriptionFormat: 'html', + timelineTemplate: { connect: { id: timelineTemplate.id } }, + type: { connect: { id: challengeTypeId } }, + track: { connect: { id: challengeTrackId } }, + tags: ['tag1'], + projectId: 111, + legacyId: 222, + startDate: new Date(), + status: constants.challengeStatuses.Completed.toUpperCase(), + createdAt: new Date(), + createdBy: 'admin', + updatedBy: 'admin' + }}) } const defaultProjectTerms = [ { - id: "0fcb41d1-ec7c-44bb-8f3b-f017a61cd708", - title: "Competition Non-Disclosure Agreement", - url: "", - text: "docusign NDA", - docusignTemplateId: "0c5b7081-1fff-4484-a20f-824c97a03b9b", - agreeabilityType: "DocuSignable", + id: '0fcb41d1-ec7c-44bb-8f3b-f017a61cd708', + title: 'Competition Non-Disclosure Agreement', + url: '', + text: 'docusign NDA', + docusignTemplateId: '0c5b7081-1fff-4484-a20f-824c97a03b9b', + agreeabilityType: 'DocuSignable' }, { - id: "be0652ae-8b28-4e91-9b42-8ad00b31e9cb", - title: "Subcontractor Services Agreement 2009-09-02", - url: "http://www.topcoder.com/i/terms/Subcontractor+Services+Agreement+2009-09-02.pdf", - text: "Subcontractor Services Agreement 2009-09-02. This agreement is unavailable in text format. Please download the PDF to read its contents", - agreeabilityType: "Non-electronically-agreeable", - }, -]; + id: 'be0652ae-8b28-4e91-9b42-8ad00b31e9cb', + title: 'Subcontractor Services Agreement 2009-09-02', + url: 'http://www.topcoder.com/i/terms/Subcontractor+Services+Agreement+2009-09-02.pdf', + text: 'Subcontractor Services Agreement 2009-09-02. This agreement is unavailable in text format. Please download the PDF to read its contents', + agreeabilityType: 'Non-electronically-agreeable' + } +] -const mockTerms = ["8a0207fc-ac9b-47e7-af1b-81d1ccaf0afc", "453c7c5c-c872-4672-9e78-5162d70903d3"]; +const mockTerms = ['8a0207fc-ac9b-47e7-af1b-81d1ccaf0afc', '453c7c5c-c872-4672-9e78-5162d70903d3'] const additionalTerm = { - id: "28841de8-2f42-486f-beac-21d46a832ab6", - agreeabilityType: "Electronically-agreeable", - title: "2008 TCO Marathon Match Competition Official Rules", - url: "http://topcoder.com/mm-terms", -}; + id: '28841de8-2f42-486f-beac-21d46a832ab6', + agreeabilityType: 'Electronically-agreeable', + title: '2008 TCO Marathon Match Competition Official Rules', + url: 'http://topcoder.com/mm-terms' +} /** * Clear test data */ -async function clearData() { - // remove challenge in Elasticsearch - await esClient.delete({ - index: config.ES.ES_INDEX, - id: challenge.id, - refresh: "true", // refresh ES so that it is effective for read operations instantly - }); - - // remove completedChallenge in Elasticsearch - await esClient.delete({ - index: config.ES.ES_INDEX, - id: completedChallenge.id, - refresh: "true", // refresh ES so that it is effective for read operations instantly - }); - - await challenge.delete(); - await completedChallenge.delete(); - await timelineTemplate.delete(); - await phase.delete(); - await phase2.delete(); - await challengeType.delete(); +async function clearData () { + await prisma.challenge.deleteMany({ + where: { id: { in: [challengeId, taskChallengeId] } } + }) + await prisma.timelineTemplate.deleteMany({ where: { id: timelineTemplateId } }) + await prisma.phase.deleteMany({ where: { id: { in: [phase1Id, phase2Id] } } }) + await prisma.challengeType.deleteMany({ where: { id: challengeTypeId } }) + await prisma.challengeTrack.deleteMany({ where: { id: challengeTrackId } }) } /** * Get created test data. */ -function getData() { +function getData () { return { - challengeType: challengeType.originalItem(), - phase: phase.originalItem(), - phase2: phase2.originalItem(), - timelineTemplate: timelineTemplate.originalItem(), - challenge: challenge.originalItem(), - completedChallenge: completedChallenge.originalItem(), + challengeTrack, + challengeType, + phase, + phase2, + timelineTemplate, + challenge, + taskChallenge, defaultProjectTerms, additionalTerm, - mockTerms, - }; + mockTerms + } } /** * Get dates difference in milliseconds */ -function getDatesDiff(d1, d2) { - return new Date(d1).getTime() - new Date(d2).getTime(); +function getDatesDiff (d1, d2) { + return new Date(d1).getTime() - new Date(d2).getTime() } module.exports = { @@ -216,5 +224,5 @@ module.exports = { clearData, getData, getDatesDiff, - deepCompareArrays, -}; + deepCompareArrays +} diff --git a/test/unit/AttachmentService.test.js b/test/unit/AttachmentService.test.js index 01eea3e9..4673c078 100644 --- a/test/unit/AttachmentService.test.js +++ b/test/unit/AttachmentService.test.js @@ -7,8 +7,10 @@ const fs = require('fs') const path = require('path') const uuid = require('uuid/v4') const chai = require('chai') +const awsMock = require('aws-sdk-mock') const service = require('../../src/services/AttachmentService') const testHelper = require('../testHelper') +const prisma = require('../../src/common/prisma').getClient() const should = chai.should() @@ -19,93 +21,47 @@ describe('attachment service unit tests', () => { let id // generated data let data + // attachment for task challenge + let id2 const notFoundId = uuid() before(async () => { + // mock S3 before creating S3 instance + awsMock.mock('S3', 'getObject', (params, callback) => { + callback(null, { Body: Buffer.from(attachmentContent) }); + }); await testHelper.createData() data = testHelper.getData() - }) - - after(async () => { - await testHelper.clearData() - }) - - describe('upload attachment tests', () => { - it('upload attachment successfully', async () => { - const result = await service.uploadAttachment({ - isMachine: true - }, data.challenge.id, { - attachment: { - data: attachmentContent, - mimetype: 'text/plain', - name: 'attachment.txt', - size: attachmentContent.length - } - }) - should.exist(result.id) - id = result.id - should.equal(result.fileSize, attachmentContent.length) - should.equal(result.fileName, 'attachment.txt') - should.equal(result.challengeId, data.challenge.id) - }) - - it('upload attachment - forbidden', async () => { - try { - await service.uploadAttachment({ - roles: ['user'] - }, data.challenge.id, { - attachment: { - data: attachmentContent, - mimetype: 'text/plain', - name: 'attachment.txt', - size: attachmentContent.length - } - }) - } catch (e) { - should.equal(e.message, 'You are not allowed to upload attachment of the challenge.') - return + // create attachment + const createdAttachment = await prisma.attachment.create({ + data: { + name: 'attachment.txt', + url: 'http://s3.amazonaws.com/topcoder_01/attachment.txt', + fileSize: 1024, + createdBy: 'testdata', + updatedBy: 'testdata', + challenge: { connect: { id: data.challenge.id } } } - throw new Error('should not reach here') }) - - it('upload attachment - file too large', async () => { - try { - await service.uploadAttachment({ - isMachine: true - }, data.challenge.id, { - attachment: { - truncated: true, - data: attachmentContent, - mimetype: 'text/plain', - name: 'attachment.txt', - size: attachmentContent.length - } - }) - } catch (e) { - should.equal(e.message.indexOf('attachment is too large') >= 0, true) - return + id = createdAttachment.id + const taskAttachment = await prisma.attachment.create({ + data: { + name: 'attachment.txt', + url: 'http://s3.amazonaws.com/topcoder_01/attachment.txt', + fileSize: 1024, + createdBy: 'testdata', + updatedBy: 'testdata', + challenge: { connect: { id: data.taskChallenge.id } } } - throw new Error('should not reach here') }) + id2 = taskAttachment.id + }) - it('upload attachment - challenge not found', async () => { - try { - await service.uploadAttachment({ - isMachine: true - }, notFoundId, { - attachment: { - data: attachmentContent, - mimetype: 'text/plain', - name: 'attachment.txt', - size: attachmentContent.length - } - }) - } catch (e) { - should.equal(e.message, `Challenge with id: ${notFoundId} doesn't exist`) - return - } - throw new Error('should not reach here') - }) + after(async () => { + await testHelper.clearData() + await prisma.attachment.deleteMany({ where: { id }}) + // restore S3 + awsMock.restore('S3'); }) describe('download attachment tests', () => { @@ -117,9 +73,9 @@ describe('attachment service unit tests', () => { it('download attachment - forbidden', async () => { try { - await service.downloadAttachment({ roles: ['user'], userId: 678678 }, data.challenge.id, id) + await service.downloadAttachment({ roles: ['user'], userId: 678678 }, data.taskChallenge.id, id2) } catch (e) { - should.equal(e.message, 'You are not allowed to download attachment of the challenge.') + should.equal(e.message, 'You don\'t have access to view this challenge') return } throw new Error('should not reach here') @@ -129,7 +85,7 @@ describe('attachment service unit tests', () => { try { await service.downloadAttachment({ isMachine: true }, data.challenge.id, notFoundId) } catch (e) { - should.equal(e.message, `Attachment with id: ${notFoundId} doesn't exist`) + should.equal(e.message, `Attachment ${notFoundId} not found in challenge ${data.challenge.id}`) return } throw new Error('should not reach here') @@ -139,7 +95,7 @@ describe('attachment service unit tests', () => { try { await service.downloadAttachment({ isMachine: true }, notFoundId, id) } catch (e) { - should.equal(e.message, 'The attachment challengeId does not match the path challengeId.') + should.equal(e.message, `Attachment ${id} not found in challenge ${notFoundId}`) return } throw new Error('should not reach here') diff --git a/test/unit/AuditLogService.test.js b/test/unit/AuditLogService.test.js index d7ce8e01..1e61cc70 100644 --- a/test/unit/AuditLogService.test.js +++ b/test/unit/AuditLogService.test.js @@ -7,7 +7,7 @@ const _ = require('lodash') const uuid = require('uuid/v4') const chai = require('chai') const service = require('../../src/services/AuditLogService') -const ChallengeService = require('../../src/services/ChallengeService') +const prisma = require('../../src/common/prisma').getClient() const testHelper = require('../testHelper') const should = chai.should() @@ -18,8 +18,25 @@ describe('audit log service unit tests', () => { const notFoundId = uuid() before(async () => { + await testHelper.clearData() await testHelper.createData() data = testHelper.getData() + await prisma.auditLog.createMany({ + data: [{ + challengeId: data.challenge.id, + fieldName: 'privateDescription', + createdBy: 'sub', + newValue: '"private Desc."', + createdAt: new Date() + }, { + challengeId: data.challenge.id, + fieldName: 'description', + createdBy: 'sub', + newValue: '"desc-abc"', + oldValue: '"desc"', + createdAt: new Date() + }] + }) }) after(async () => { @@ -28,18 +45,12 @@ describe('audit log service unit tests', () => { describe('search audit logs tests', () => { it('search audit logs successfully 1', async () => { - // update challenge so that there are some audit logs - await ChallengeService.partiallyUpdateChallenge({ isMachine: true, sub: 'sub' }, data.challenge.id, { - description: 'desc-abc', - privateDescription: 'private Desc.' - }) - const res = await service.searchAuditLogs({ page: 1, perPage: 10, challengeId: data.challenge.id, createdDateStart: new Date(new Date().getTime() - 1000 * 60 * 60 * 30), - createdDateEnd: '2022-01-02', + createdDateEnd: '2026-01-02', createdBy: 'sub' }) should.equal(res.total, 2) @@ -51,7 +62,7 @@ describe('audit log service unit tests', () => { should.equal(log.newValue, '"private Desc."') should.equal(log.challengeId, data.challenge.id) should.equal(log.createdBy, 'sub') - should.exist(log.created) + should.exist(log.createdAt) should.exist(log.id) log = _.find(res.result, (item) => item.fieldName === 'description') should.exist(log) @@ -59,7 +70,7 @@ describe('audit log service unit tests', () => { should.equal(log.newValue, '"desc-abc"') should.equal(log.challengeId, data.challenge.id) should.equal(log.createdBy, 'sub') - should.exist(log.created) + should.exist(log.createdAt) should.exist(log.id) }) diff --git a/test/unit/ChallengeService.test.js b/test/unit/ChallengeService.test.js index 4f950548..748075ae 100644 --- a/test/unit/ChallengeService.test.js +++ b/test/unit/ChallengeService.test.js @@ -7,17 +7,13 @@ const _ = require('lodash') const config = require('config') const uuid = require('uuid/v4') const chai = require('chai') -const fs = require('fs') -const path = require('path') const constants = require('../../app-constants') const service = require('../../src/services/ChallengeService') -const AttachmentService = require('../../src/services/AttachmentService') const testHelper = require('../testHelper') +const prisma = require('../../src/common/prisma').getClient() const should = chai.should() -const attachmentContent = fs.readFileSync(path.join(__dirname, '../attachment.txt')) - describe('challenge service unit tests', () => { // created entity id let id @@ -38,117 +34,116 @@ describe('challenge service unit tests', () => { // generated data let data let testChallengeData - let testCompletedChallengeData + let createdChallengeData const notFoundId = uuid() + const authUser = { + userId: 'testuser' + } before(async () => { + await testHelper.clearData() await testHelper.createData() data = testHelper.getData() - // create an attachment for test - attachment = await AttachmentService.uploadAttachment({ - isMachine: true - }, data.challenge.id, { - attachment: { - data: attachmentContent, - mimetype: 'plain/text', - name: 'attachment.txt', - size: attachmentContent.length - } - }) - testChallengeData = _.omit(data.challenge, ['id', 'created', 'createdBy']) - testChallengeData.phases = [{ - phaseId: data.phase.id, - duration: 100 - }, { - phaseId: data.phase2.id, - duration: 200 - }] - - testCompletedChallengeData = _.omit(data.completedChallenge, ['id', 'created', 'createdBy']) - testCompletedChallengeData.phases = [{ - phaseId: data.phase.id, - duration: 100 - }, { - phaseId: data.phase2.id, - duration: 200 - }] + testChallengeData = { + typeId: data.challenge.typeId, + trackId: data.challenge.trackId, + legacy: { + reviewType: 'COMMUNITY', + confidentialityType: 'public', + useSchedulingAPI: true, + pureV5Task: false, + selfService: false, + selfServiceCopilot: 'aaa' + }, + billing: { + billingAccountId: 'billing-account', + markup: 100 + }, + task: { + isTask: false, + isAssigned: false, + memberId: null + }, + name: 'Prisma Test Challenge', + description: 'Prisma Test Challenge', + privateDescription: 'Prisma Test Challenge', + descriptionFormat: 'html', + metadata: [ + { + name: 'meta-name', + value: 'meta-value' + } + ], + timelineTemplateId: data.timelineTemplate.id, + events: [ + { + id: 1, + name: 'event-name', + key: 'event-key' + } + ], + phases: [{ + phaseId: data.phase.id, + duration: 120 + }, { + phaseId: data.phase2.id, + duration: 200 + }], + discussions: [{ + id: 'ad985cff-ad3e-44de-b54e-3992505ba0ae', + name: 'discussion name', + type: 'challenge', + provider: 'vanilla', + options: [ + { 'discussion-opt': 'discussion-value' } + ] + }], + prizeSets: [ + { + type: 'placement', + description: 'placement prizes', + prizes: [ + { + description: 'placement 1', + type: 'USD', + value: 1000 + } + ] + } + ], + tags: [ + 'tag-1', 'tag-2' + ], + legacyId: 1, + projectId: 123, + startDate: '2025-03-13T06:56:50.701Z', + status: 'New', + groups: [], + terms: [], + skills: [] + } }) after(async () => { + await prisma.challenge.deleteMany({ + where: {id} + }) await testHelper.clearData() }) describe('create challenge tests', () => { it('create challenge successfully', async () => { const challengeData = _.cloneDeep(testChallengeData) - const result = await service.createChallenge({ isMachine: true, sub: 'sub' }, challengeData) + const result = await service.createChallenge({ isMachine: true, sub: 'sub', userId: 'testuser' }, challengeData, config.M2M_FULL_ACCESS_TOKEN) + createdChallengeData = result should.exist(result.id) id = result.id should.equal(result.typeId, data.challenge.typeId) - should.equal(result.track, data.challenge.track) - should.equal(result.name, data.challenge.name) - should.equal(result.description, data.challenge.description) - should.equal(result.timelineTemplateId, data.challenge.timelineTemplateId) - should.equal(result.phases.length, 2) - should.exist(result.phases[0].id) - should.equal(result.phases[0].phaseId, data.phase.id) - should.equal(result.phases[0].duration, challengeData.phases[0].duration) - should.equal(testHelper.getDatesDiff(result.phases[0].scheduledStartDate, challengeData.startDate), 0) - should.equal(testHelper.getDatesDiff(result.phases[0].scheduledEndDate, challengeData.startDate), - challengeData.phases[0].duration * 1000) - should.equal(testHelper.getDatesDiff(result.phases[0].actualStartDate, challengeData.startDate), 0) - should.equal(testHelper.getDatesDiff(result.phases[0].actualEndDate, challengeData.startDate), - challengeData.phases[0].duration * 1000) - should.exist(result.phases[1].id) - should.equal(result.phases[1].phaseId, data.phase2.id) - should.equal(result.phases[1].predecessor, result.phases[0].id) - should.equal(result.phases[1].duration, challengeData.phases[1].duration) - should.equal(testHelper.getDatesDiff(result.phases[1].scheduledStartDate, challengeData.startDate), - challengeData.phases[0].duration * 1000) - should.equal(testHelper.getDatesDiff(result.phases[1].scheduledEndDate, challengeData.startDate), - challengeData.phases[0].duration * 1000 + challengeData.phases[1].duration * 1000) - should.equal(testHelper.getDatesDiff(result.phases[1].actualStartDate, challengeData.startDate), - challengeData.phases[0].duration * 1000) - should.equal(testHelper.getDatesDiff(result.phases[1].actualEndDate, challengeData.startDate), - challengeData.phases[0].duration * 1000 + challengeData.phases[1].duration * 1000) - should.equal(result.prizeSets.length, 1) - should.equal(result.prizeSets[0].type, data.challenge.prizeSets[0].type) - should.equal(result.prizeSets[0].description, data.challenge.prizeSets[0].description) - should.equal(result.prizeSets[0].prizes.length, 1) - should.equal(result.prizeSets[0].prizes[0].description, data.challenge.prizeSets[0].prizes[0].description) - should.equal(result.prizeSets[0].prizes[0].type, data.challenge.prizeSets[0].prizes[0].type) - should.equal(result.prizeSets[0].prizes[0].value, data.challenge.prizeSets[0].prizes[0].value) - should.equal(result.reviewType, data.challenge.reviewType) - should.equal(result.tags.length, 1) - should.equal(result.tags[0], data.challenge.tags[0]) - should.equal(result.projectId, data.challenge.projectId) - should.equal(result.legacyId, data.challenge.legacyId) - should.equal(result.forumId, data.challenge.forumId) - should.equal(result.status, data.challenge.status) - should.equal(result.groups.length, 1) - should.equal(result.groups[0], data.challenge.groups[0]) - should.equal(result.gitRepoURLs.length, 1) - should.equal(result.gitRepoURLs[0], data.challenge.gitRepoURLs[0]) - should.equal(result.createdBy, 'sub') - should.exist(result.startDate) - should.exist(result.created) - should.equal(result.numOfSubmissions, 0) - should.equal(result.numOfRegistrants, 0) - should.equal(result.terms.length, 2) - should.equal(testHelper.deepCompareArrays(result.terms, _.map(data.defaultProjectTerms, t => t.id)), true) - }) - - it('create challenge successfully with completed status', async () => { - const challengeData = testCompletedChallengeData - const result = await service.createChallenge({ isMachine: true, sub: 'sub' }, challengeData) - should.exist(result.id) - id2 = result.id - should.equal(result.typeId, data.completedChallenge.typeId) - should.equal(result.track, data.completedChallenge.track) - should.equal(result.name, data.completedChallenge.name) - should.equal(result.description, data.completedChallenge.description) - should.equal(result.timelineTemplateId, data.completedChallenge.timelineTemplateId) + should.equal(result.trackId, data.challenge.trackId) + should.equal(result.name, testChallengeData.name) + should.equal(result.description, testChallengeData.description) + should.equal(result.timelineTemplateId, testChallengeData.timelineTemplateId) should.equal(result.phases.length, 2) should.exist(result.phases[0].id) should.equal(result.phases[0].phaseId, data.phase.id) @@ -156,79 +151,42 @@ describe('challenge service unit tests', () => { should.equal(testHelper.getDatesDiff(result.phases[0].scheduledStartDate, challengeData.startDate), 0) should.equal(testHelper.getDatesDiff(result.phases[0].scheduledEndDate, challengeData.startDate), challengeData.phases[0].duration * 1000) - should.equal(testHelper.getDatesDiff(result.phases[0].actualStartDate, challengeData.startDate), 0) - should.equal(testHelper.getDatesDiff(result.phases[0].actualEndDate, challengeData.startDate), - challengeData.phases[0].duration * 1000) should.exist(result.phases[1].id) should.equal(result.phases[1].phaseId, data.phase2.id) - should.equal(result.phases[1].predecessor, result.phases[0].id) + should.equal(result.phases[1].predecessor, result.phases[0].phaseId) should.equal(result.phases[1].duration, challengeData.phases[1].duration) should.equal(testHelper.getDatesDiff(result.phases[1].scheduledStartDate, challengeData.startDate), challengeData.phases[0].duration * 1000) should.equal(testHelper.getDatesDiff(result.phases[1].scheduledEndDate, challengeData.startDate), challengeData.phases[0].duration * 1000 + challengeData.phases[1].duration * 1000) - should.equal(testHelper.getDatesDiff(result.phases[1].actualStartDate, challengeData.startDate), - challengeData.phases[0].duration * 1000) - should.equal(testHelper.getDatesDiff(result.phases[1].actualEndDate, challengeData.startDate), - challengeData.phases[0].duration * 1000 + challengeData.phases[1].duration * 1000) should.equal(result.prizeSets.length, 1) - should.equal(result.prizeSets[0].type, data.completedChallenge.prizeSets[0].type) - should.equal(result.prizeSets[0].description, data.completedChallenge.prizeSets[0].description) + should.equal(result.prizeSets[0].type, testChallengeData.prizeSets[0].type) + should.equal(result.prizeSets[0].description, testChallengeData.prizeSets[0].description) should.equal(result.prizeSets[0].prizes.length, 1) - should.equal(result.prizeSets[0].prizes[0].description, data.completedChallenge.prizeSets[0].prizes[0].description) - should.equal(result.prizeSets[0].prizes[0].type, data.completedChallenge.prizeSets[0].prizes[0].type) - should.equal(result.prizeSets[0].prizes[0].value, data.completedChallenge.prizeSets[0].prizes[0].value) - should.equal(result.reviewType, data.completedChallenge.reviewType) - should.equal(result.tags.length, 1) - should.equal(result.tags[0], data.completedChallenge.tags[0]) - should.equal(result.projectId, data.completedChallenge.projectId) - should.equal(result.legacyId, data.completedChallenge.legacyId) - should.equal(result.forumId, data.completedChallenge.forumId) - should.equal(result.status, data.completedChallenge.status) - should.equal(result.groups.length, 1) - should.equal(result.groups[0], data.completedChallenge.groups[0]) - should.equal(result.gitRepoURLs.length, 1) - should.equal(result.gitRepoURLs[0], data.completedChallenge.gitRepoURLs[0]) - should.equal(result.createdBy, 'sub') + should.equal(result.prizeSets[0].prizes[0].description, testChallengeData.prizeSets[0].prizes[0].description) + should.equal(result.prizeSets[0].prizes[0].type, testChallengeData.prizeSets[0].prizes[0].type) + should.equal(result.prizeSets[0].prizes[0].value, testChallengeData.prizeSets[0].prizes[0].value) + should.equal(result.reviewType, testChallengeData.reviewType) + should.equal(result.tags.length, 2) + should.equal(result.tags[0], testChallengeData.tags[0]) + should.equal(_.isNil(result.projectId), _.isNil(testChallengeData.projectId)) + should.equal(result.legacyId, testChallengeData.legacyId) + should.equal(result.forumId, testChallengeData.forumId) + should.equal(result.status, testChallengeData.status) + should.equal(result.createdBy, 'testuser') should.exist(result.startDate) should.exist(result.created) should.equal(result.numOfSubmissions, 0) should.equal(result.numOfRegistrants, 0) - should.equal(result.terms.length, 2) - should.equal(testHelper.deepCompareArrays(result.terms, _.map(data.defaultProjectTerms, t => t.id)), true) }) it('create challenge - type not found', async () => { const challengeData = _.clone(testChallengeData) challengeData.typeId = notFoundId try { - await service.createChallenge({ isMachine: true, sub: 'sub' }, challengeData) - } catch (e) { - should.equal(e.message, `No challenge type found with id: ${notFoundId}.`) - return - } - throw new Error('should not reach here') - }) - - it(`create challenge - user doesn't have permission to create challenge under specific project`, async () => { - const challengeData = _.clone(testChallengeData) - challengeData.projectId = 200 - try { - await service.createChallenge({ userId: '16096823' }, challengeData, config.COPILOT_TOKEN) + await service.createChallenge({ isMachine: true, sub: 'sub', userId: 'testuser' }, challengeData, config.M2M_FULL_ACCESS_TOKEN) } catch (e) { - should.equal(e.response.data.result.content.message, 'You do not have permissions to perform this action') - return - } - throw new Error('should not reach here') - }) - - it('create challenge - project not found', async () => { - const challengeData = _.clone(testChallengeData) - challengeData.projectId = 100000 - try { - await service.createChallenge({ isMachine: true, sub: 'sub' }, challengeData) - } catch (e) { - should.equal(e.message, `Project with id: ${challengeData.projectId} doesn't exist`) + should.equal(e.message, `ChallengeType with id: ${notFoundId} doesn't exist`) return } throw new Error('should not reach here') @@ -238,7 +196,7 @@ describe('challenge service unit tests', () => { const challengeData = _.clone(testChallengeData) challengeData.projectId = -1 try { - await service.createChallenge({ isMachine: true, sub: 'sub' }, challengeData) + await service.createChallenge({ isMachine: true, sub: 'sub', userId: 'testuser' }, challengeData, config.M2M_FULL_ACCESS_TOKEN) } catch (e) { should.equal(e.message.indexOf('"projectId" must be a positive number') >= 0, true) return @@ -250,7 +208,7 @@ describe('challenge service unit tests', () => { const challengeData = _.clone(testChallengeData) delete challengeData.name try { - await service.createChallenge({ isMachine: true, sub: 'sub' }, challengeData) + await service.createChallenge({ isMachine: true, sub: 'sub', userId: 'testuser' }, challengeData, config.M2M_FULL_ACCESS_TOKEN) } catch (e) { should.equal(e.message.indexOf('"name" is required') >= 0, true) return @@ -262,9 +220,9 @@ describe('challenge service unit tests', () => { const challengeData = _.clone(testChallengeData) challengeData.startDate = 'abc' try { - await service.createChallenge({ isMachine: true, sub: 'sub' }, challengeData) + await service.createChallenge({ isMachine: true, sub: 'sub', userId: 'testuser' }, challengeData, config.M2M_FULL_ACCESS_TOKEN) } catch (e) { - should.equal(e.message.indexOf('"startDate" must be a number of milliseconds or valid date string') >= 0, true) + should.equal(e.message.indexOf('"startDate" must be a valid ISO 8601 date') >= 0, true) return } throw new Error('should not reach here') @@ -274,7 +232,7 @@ describe('challenge service unit tests', () => { const challengeData = _.clone(testChallengeData) challengeData.status = ['Active'] try { - await service.createChallenge({ isMachine: true, sub: 'sub' }, challengeData) + await service.createChallenge({ isMachine: true, sub: 'sub', userId: 'testuser' }, challengeData, config.M2M_FULL_ACCESS_TOKEN) } catch (e) { should.equal(e.message.indexOf('"status" must be a string') >= 0, true) return @@ -286,7 +244,7 @@ describe('challenge service unit tests', () => { const challengeData = _.clone(testChallengeData) challengeData.other = 123 try { - await service.createChallenge({ isMachine: true, sub: 'sub' }, challengeData) + await service.createChallenge({ isMachine: true, sub: 'sub', userId: 'testuser' }, challengeData, config.M2M_FULL_ACCESS_TOKEN) } catch (e) { should.equal(e.message.indexOf('"other" is not allowed') >= 0, true) return @@ -297,99 +255,45 @@ describe('challenge service unit tests', () => { describe('get challenge tests', () => { it('get challenge successfully', async () => { - const result = await service.getChallenge({ isMachine: true }, data.challenge.id) - should.equal(result.id, data.challenge.id) - should.equal(result.typeId, data.challenge.typeId) - should.equal(result.track, data.challenge.track) - should.equal(result.name, data.challenge.name) - should.equal(result.description, data.challenge.description) - should.equal(result.timelineTemplateId, data.challenge.timelineTemplateId) - should.equal(result.phases.length, 1) - should.equal(result.phases[0].id, data.challenge.phases[0].id) - should.equal(result.phases[0].name, data.challenge.phases[0].name) - should.equal(result.phases[0].description, data.challenge.phases[0].description) - should.equal(result.phases[0].isOpen, data.challenge.phases[0].isOpen) - should.equal(result.phases[0].duration, data.challenge.phases[0].duration) - should.equal(result.prizeSets.length, 1) - should.equal(result.prizeSets[0].type, data.challenge.prizeSets[0].type) - should.equal(result.prizeSets[0].description, data.challenge.prizeSets[0].description) - should.equal(result.prizeSets[0].prizes.length, 1) - should.equal(result.prizeSets[0].prizes[0].description, data.challenge.prizeSets[0].prizes[0].description) - should.equal(result.prizeSets[0].prizes[0].type, data.challenge.prizeSets[0].prizes[0].type) - should.equal(result.prizeSets[0].prizes[0].value, data.challenge.prizeSets[0].prizes[0].value) - should.equal(result.reviewType, data.challenge.reviewType) - should.equal(result.tags.length, 1) - should.equal(result.tags[0], data.challenge.tags[0]) - should.equal(result.projectId, data.challenge.projectId) - should.equal(result.legacyId, data.challenge.legacyId) - should.equal(result.forumId, data.challenge.forumId) - should.equal(result.status, data.challenge.status) - should.equal(result.groups.length, 1) - should.equal(result.groups[0], data.challenge.groups[0]) - should.equal(result.gitRepoURLs.length, 1) - should.equal(result.gitRepoURLs[0], data.challenge.gitRepoURLs[0]) - should.equal(result.createdBy, 'admin') - should.exist(result.startDate) - should.exist(result.created) - should.equal(result.numOfSubmissions, 0) - should.equal(result.numOfRegistrants, 0) - }) - - it('get challenge successfully with terms', async () => { - const result = await service.getChallenge({ isMachine: true }, id) - const challengeData = _.cloneDeep(testChallengeData) - should.equal(result.typeId, data.challenge.typeId) - should.equal(result.track, data.challenge.track) - should.equal(result.name, data.challenge.name) - should.equal(result.description, data.challenge.description) - should.equal(result.timelineTemplateId, data.challenge.timelineTemplateId) + const result = await service.getChallenge({ isMachine: true }, createdChallengeData.id) + should.equal(result.id, createdChallengeData.id) + should.equal(result.typeId, testChallengeData.typeId) + should.equal(result.trackId, testChallengeData.trackId) + should.equal(result.name, testChallengeData.name) + should.equal(result.description, testChallengeData.description) + should.equal(result.timelineTemplateId, testChallengeData.timelineTemplateId) should.equal(result.phases.length, 2) - should.exist(result.phases[0].id) should.equal(result.phases[0].phaseId, data.phase.id) - should.equal(result.phases[0].duration, challengeData.phases[0].duration) - should.equal(testHelper.getDatesDiff(result.phases[0].scheduledStartDate, challengeData.startDate), 0) - should.equal(testHelper.getDatesDiff(result.phases[0].scheduledEndDate, challengeData.startDate), - challengeData.phases[0].duration * 1000) - should.equal(testHelper.getDatesDiff(result.phases[0].actualStartDate, challengeData.startDate), 0) - should.equal(testHelper.getDatesDiff(result.phases[0].actualEndDate, challengeData.startDate), - challengeData.phases[0].duration * 1000) - should.exist(result.phases[1].id) + should.equal(result.phases[0].name, data.phase.name) + should.equal(result.phases[0].description, data.phase.description) + should.equal(result.phases[0].isOpen, false) + should.equal(result.phases[0].duration, testChallengeData.phases[0].duration) should.equal(result.phases[1].phaseId, data.phase2.id) - should.equal(result.phases[1].predecessor, result.phases[0].id) - should.equal(result.phases[1].duration, challengeData.phases[1].duration) - should.equal(testHelper.getDatesDiff(result.phases[1].scheduledStartDate, challengeData.startDate), - challengeData.phases[0].duration * 1000) - should.equal(testHelper.getDatesDiff(result.phases[1].scheduledEndDate, challengeData.startDate), - challengeData.phases[0].duration * 1000 + challengeData.phases[1].duration * 1000) - should.equal(testHelper.getDatesDiff(result.phases[1].actualStartDate, challengeData.startDate), - challengeData.phases[0].duration * 1000) - should.equal(testHelper.getDatesDiff(result.phases[1].actualEndDate, challengeData.startDate), - challengeData.phases[0].duration * 1000 + challengeData.phases[1].duration * 1000) + should.equal(result.phases[1].name, data.phase2.name) + should.equal(result.phases[1].predecessor, data.phase.id) + should.equal(result.phases[1].description, data.phase2.description) + should.equal(result.phases[1].isOpen, false) + should.equal(result.phases[1].duration, testChallengeData.phases[1].duration) should.equal(result.prizeSets.length, 1) - should.equal(result.prizeSets[0].type, data.challenge.prizeSets[0].type) - should.equal(result.prizeSets[0].description, data.challenge.prizeSets[0].description) + should.equal(result.prizeSets[0].type, testChallengeData.prizeSets[0].type) + should.equal(result.prizeSets[0].description, testChallengeData.prizeSets[0].description) should.equal(result.prizeSets[0].prizes.length, 1) - should.equal(result.prizeSets[0].prizes[0].description, data.challenge.prizeSets[0].prizes[0].description) - should.equal(result.prizeSets[0].prizes[0].type, data.challenge.prizeSets[0].prizes[0].type) - should.equal(result.prizeSets[0].prizes[0].value, data.challenge.prizeSets[0].prizes[0].value) - should.equal(result.reviewType, data.challenge.reviewType) - should.equal(result.tags.length, 1) - should.equal(result.tags[0], data.challenge.tags[0]) - should.equal(result.projectId, data.challenge.projectId) - should.equal(result.legacyId, data.challenge.legacyId) - should.equal(result.forumId, data.challenge.forumId) - should.equal(result.status, data.challenge.status) - should.equal(result.groups.length, 1) - should.equal(result.groups[0], data.challenge.groups[0]) - should.equal(result.gitRepoURLs.length, 1) - should.equal(result.gitRepoURLs[0], data.challenge.gitRepoURLs[0]) - should.equal(result.createdBy, 'sub') + should.equal(result.prizeSets[0].prizes[0].description, testChallengeData.prizeSets[0].prizes[0].description) + should.equal(result.prizeSets[0].prizes[0].type, testChallengeData.prizeSets[0].prizes[0].type) + should.equal(result.prizeSets[0].prizes[0].value, testChallengeData.prizeSets[0].prizes[0].value) + should.equal(result.reviewType, testChallengeData.reviewType) + should.equal(result.tags.length, 2) + should.equal(result.tags[0], testChallengeData.tags[0]) + should.equal(result.tags[1], testChallengeData.tags[1]) + should.equal(result.projectId, testChallengeData.projectId) + should.equal(result.legacyId, testChallengeData.legacyId) + should.equal(result.forumId, testChallengeData.forumId) + should.equal(result.status, testChallengeData.status) + should.equal(result.createdBy, 'testuser') should.exist(result.startDate) should.exist(result.created) should.equal(result.numOfSubmissions, 0) should.equal(result.numOfRegistrants, 0) - should.equal(result.terms.length, 2) - should.equal(testHelper.deepCompareArrays(result.terms, _.map(data.defaultProjectTerms, t => t.id)), true) }) it('get challenge - not found', async () => { @@ -414,61 +318,112 @@ describe('challenge service unit tests', () => { }) describe('search challenges tests', () => { + it('search challenges successfully by legacyId', async() => { + const res = await service.searchChallenges({ isMachine: true }, { + page: 1, + perPage: 10, + legacyId: testChallengeData.legacyId + }) + should.equal(res.total, 1) + should.equal(res.page, 1) + should.equal(res.perPage, 10) + should.equal(res.result.length, 1) + const result = res.result[0] + should.equal(result.id, id) + should.equal(result.type, data.challengeType.name) + should.equal(result.track, data.challengeTrack.name) + should.equal(result.name, testChallengeData.name) + should.equal(result.description, testChallengeData.description) + should.equal(result.timelineTemplateId, testChallengeData.timelineTemplateId) + should.equal(result.phases.length, 2) + should.equal(result.phases[0].phaseId, data.phase.id) + should.equal(result.phases[0].name, data.phase.name) + should.equal(result.phases[0].description, data.phase.description) + should.equal(result.phases[0].isOpen, false) + should.equal(result.phases[0].duration, testChallengeData.phases[0].duration) + should.equal(result.phases[1].phaseId, data.phase2.id) + should.equal(result.phases[1].name, data.phase2.name) + should.equal(result.phases[1].predecessor, data.phase.id) + should.equal(result.phases[1].description, data.phase2.description) + should.equal(result.phases[1].isOpen, false) + should.equal(result.phases[1].duration, testChallengeData.phases[1].duration) + should.equal(result.prizeSets.length, 1) + should.equal(result.prizeSets[0].type, testChallengeData.prizeSets[0].type) + should.equal(result.prizeSets[0].description, testChallengeData.prizeSets[0].description) + should.equal(result.prizeSets[0].prizes.length, 1) + should.equal(result.prizeSets[0].prizes[0].description, testChallengeData.prizeSets[0].prizes[0].description) + should.equal(result.prizeSets[0].prizes[0].type, testChallengeData.prizeSets[0].prizes[0].type) + should.equal(result.prizeSets[0].prizes[0].value, testChallengeData.prizeSets[0].prizes[0].value) + should.equal(result.reviewType, testChallengeData.reviewType) + should.equal(result.tags.length, 2) + should.equal(result.tags[0], testChallengeData.tags[0]) + should.equal(result.tags[1], testChallengeData.tags[1]) + should.equal(result.projectId, testChallengeData.projectId) + should.equal(result.legacyId, testChallengeData.legacyId) + should.equal(result.forumId, testChallengeData.forumId) + should.equal(result.status, testChallengeData.status) + should.equal(result.createdBy, 'testuser') + should.exist(result.startDate) + should.exist(result.created) + should.equal(result.numOfSubmissions, 0) + should.equal(result.numOfRegistrants, 0) + }) it('search challenges successfully 1', async () => { const res = await service.searchChallenges({ isMachine: true }, { page: 1, perPage: 10, - id: data.challenge.id, - typeId: data.challenge.typeId, - name: data.challenge.name.substring(2).trim().toUpperCase(), - description: data.challenge.description, - timelineTemplateId: data.challenge.timelineTemplateId, - tag: data.challenge.tags[0], - projectId: data.challenge.projectId, - legacyId: data.challenge.legacyId, - status: data.challenge.status, - group: data.challenge.groups[0], - gitRepoURL: data.challenge.gitRepoURLs[0], + id: id, + + typeId: testChallengeData.typeId, + name: testChallengeData.name.substring(2).trim(), + description: testChallengeData.description, + timelineTemplateId: testChallengeData.timelineTemplateId, + tag: testChallengeData.tags[0], + projectId: testChallengeData.projectId, + status: testChallengeData.status, createdDateStart: '1992-01-02', - createdDateEnd: '2022-01-02', - createdBy: data.challenge.createdBy + createdDateEnd: '2032-01-02', + createdBy: testChallengeData.createdBy }) should.equal(res.total, 1) should.equal(res.page, 1) should.equal(res.perPage, 10) should.equal(res.result.length, 1) const result = res.result[0] - should.equal(result.id, data.challenge.id) + should.equal(result.id, id) should.equal(result.type, data.challengeType.name) - should.equal(result.track, data.challenge.track) - should.equal(result.name, data.challenge.name) - should.equal(result.description, data.challenge.description) - should.equal(result.timelineTemplateId, data.challenge.timelineTemplateId) - should.equal(result.phases.length, 1) - should.equal(result.phases[0].id, data.challenge.phases[0].id) - should.equal(result.phases[0].name, data.challenge.phases[0].name) - should.equal(result.phases[0].description, data.challenge.phases[0].description) - should.equal(result.phases[0].isOpen, data.challenge.phases[0].isOpen) - should.equal(result.phases[0].duration, data.challenge.phases[0].duration) + should.equal(result.track, data.challengeTrack.name) + should.equal(result.name, testChallengeData.name) + should.equal(result.description, testChallengeData.description) + should.equal(result.timelineTemplateId, testChallengeData.timelineTemplateId) + should.equal(result.phases.length, 2) + should.equal(result.phases[0].phaseId, data.phase.id) + should.equal(result.phases[0].name, data.phase.name) + should.equal(result.phases[0].description, data.phase.description) + should.equal(result.phases[0].isOpen, false) + should.equal(result.phases[0].duration, testChallengeData.phases[0].duration) + should.equal(result.phases[1].phaseId, data.phase2.id) + should.equal(result.phases[1].name, data.phase2.name) + should.equal(result.phases[1].predecessor, data.phase.id) + should.equal(result.phases[1].description, data.phase2.description) + should.equal(result.phases[1].isOpen, false) + should.equal(result.phases[1].duration, testChallengeData.phases[1].duration) should.equal(result.prizeSets.length, 1) - should.equal(result.prizeSets[0].type, data.challenge.prizeSets[0].type) - should.equal(result.prizeSets[0].description, data.challenge.prizeSets[0].description) + should.equal(result.prizeSets[0].type, testChallengeData.prizeSets[0].type) + should.equal(result.prizeSets[0].description, testChallengeData.prizeSets[0].description) should.equal(result.prizeSets[0].prizes.length, 1) - should.equal(result.prizeSets[0].prizes[0].description, data.challenge.prizeSets[0].prizes[0].description) - should.equal(result.prizeSets[0].prizes[0].type, data.challenge.prizeSets[0].prizes[0].type) - should.equal(result.prizeSets[0].prizes[0].value, data.challenge.prizeSets[0].prizes[0].value) - should.equal(result.reviewType, data.challenge.reviewType) - should.equal(result.tags.length, 1) - should.equal(result.tags[0], data.challenge.tags[0]) - should.equal(result.projectId, data.challenge.projectId) - should.equal(result.legacyId, data.challenge.legacyId) - should.equal(result.forumId, data.challenge.forumId) - should.equal(result.status, data.challenge.status) - should.equal(result.groups.length, 1) - should.equal(result.groups[0], data.challenge.groups[0]) - should.equal(result.gitRepoURLs.length, 1) - should.equal(result.gitRepoURLs[0], data.challenge.gitRepoURLs[0]) - should.equal(result.createdBy, 'admin') + should.equal(result.prizeSets[0].prizes[0].description, testChallengeData.prizeSets[0].prizes[0].description) + should.equal(result.prizeSets[0].prizes[0].type, testChallengeData.prizeSets[0].prizes[0].type) + should.equal(result.prizeSets[0].prizes[0].value, testChallengeData.prizeSets[0].prizes[0].value) + should.equal(result.reviewType, testChallengeData.reviewType) + should.equal(result.tags.length, 2) + should.equal(result.tags[0], testChallengeData.tags[0]) + should.equal(result.tags[1], testChallengeData.tags[1]) + should.equal(result.projectId, testChallengeData.projectId) + should.equal(result.legacyId, testChallengeData.legacyId) + should.equal(result.forumId, testChallengeData.forumId) + should.equal(result.status, testChallengeData.status) + should.equal(result.createdBy, 'testuser') should.exist(result.startDate) should.exist(result.created) should.equal(result.numOfSubmissions, 0) @@ -497,14 +452,11 @@ describe('challenge service unit tests', () => { tag: data.challenge.tags[0], projectId: data.challenge.projectId, forumId: data.challenge.forumId, - legacyId: data.challenge.legacyId, - status: data.challenge.status, - group: data.challenge.groups[0], - gitRepoURL: data.challenge.gitRepoURLs[0], + status: _.capitalize(data.challenge.status.toLowerCase()), createdDateStart: '1992-01-02', createdDateEnd: '2022-01-02', createdBy: data.challenge.createdBy, - memberId: 23124329 + memberId: '23124329' }) should.equal(res.total, 0) should.equal(res.page, 1) @@ -516,7 +468,7 @@ describe('challenge service unit tests', () => { const res = await service.searchChallenges({ isMachine: true }, { page: 1, perPage: 10, - id: id + id }) const challengeData = _.cloneDeep(testChallengeData) should.equal(res.total, 1) @@ -526,57 +478,41 @@ describe('challenge service unit tests', () => { const result = res.result[0] should.equal(result.type, data.challengeType.name) - should.equal(result.track, challengeData.track) + should.equal(result.track, data.challengeTrack.name) should.equal(result.name, challengeData.name) should.equal(result.description, challengeData.description) should.equal(result.timelineTemplateId, challengeData.timelineTemplateId) should.equal(result.phases.length, 2) - should.exist(result.phases[0].id) should.equal(result.phases[0].phaseId, data.phase.id) + should.equal(result.phases[0].name, data.phase.name) + should.equal(result.phases[0].description, data.phase.description) + should.equal(result.phases[0].isOpen, false) should.equal(result.phases[0].duration, challengeData.phases[0].duration) - should.equal(testHelper.getDatesDiff(result.phases[0].scheduledStartDate, challengeData.startDate), 0) - should.equal(testHelper.getDatesDiff(result.phases[0].scheduledEndDate, challengeData.startDate), - challengeData.phases[0].duration * 1000) - should.equal(testHelper.getDatesDiff(result.phases[0].actualStartDate, challengeData.startDate), 0) - should.equal(testHelper.getDatesDiff(result.phases[0].actualEndDate, challengeData.startDate), - challengeData.phases[0].duration * 1000) - should.exist(result.phases[1].id) should.equal(result.phases[1].phaseId, data.phase2.id) - should.equal(result.phases[1].predecessor, result.phases[0].id) + should.equal(result.phases[1].name, data.phase2.name) + should.equal(result.phases[1].predecessor, data.phase.id) + should.equal(result.phases[1].description, data.phase2.description) + should.equal(result.phases[1].isOpen, false) should.equal(result.phases[1].duration, challengeData.phases[1].duration) - should.equal(testHelper.getDatesDiff(result.phases[1].scheduledStartDate, challengeData.startDate), - challengeData.phases[0].duration * 1000) - should.equal(testHelper.getDatesDiff(result.phases[1].scheduledEndDate, challengeData.startDate), - challengeData.phases[0].duration * 1000 + challengeData.phases[1].duration * 1000) - should.equal(testHelper.getDatesDiff(result.phases[1].actualStartDate, challengeData.startDate), - challengeData.phases[0].duration * 1000) - should.equal(testHelper.getDatesDiff(result.phases[1].actualEndDate, challengeData.startDate), - challengeData.phases[0].duration * 1000 + challengeData.phases[1].duration * 1000) should.equal(result.prizeSets.length, 1) - should.equal(result.prizeSets[0].type, data.challenge.prizeSets[0].type) - should.equal(result.prizeSets[0].description, data.challenge.prizeSets[0].description) + should.equal(result.prizeSets[0].type, challengeData.prizeSets[0].type) + should.equal(result.prizeSets[0].description, challengeData.prizeSets[0].description) should.equal(result.prizeSets[0].prizes.length, 1) - should.equal(result.prizeSets[0].prizes[0].description, data.challenge.prizeSets[0].prizes[0].description) - should.equal(result.prizeSets[0].prizes[0].type, data.challenge.prizeSets[0].prizes[0].type) - should.equal(result.prizeSets[0].prizes[0].value, data.challenge.prizeSets[0].prizes[0].value) - should.equal(result.reviewType, data.challenge.reviewType) - should.equal(result.tags.length, 1) - should.equal(result.tags[0], data.challenge.tags[0]) - should.equal(result.projectId, data.challenge.projectId) - should.equal(result.legacyId, data.challenge.legacyId) - should.equal(result.forumId, data.challenge.forumId) - should.equal(result.status, data.challenge.status) - should.equal(result.groups.length, 1) - should.equal(result.groups[0], data.challenge.groups[0]) - should.equal(result.gitRepoURLs.length, 1) - should.equal(result.gitRepoURLs[0], data.challenge.gitRepoURLs[0]) - should.equal(result.createdBy, 'sub') + should.equal(result.prizeSets[0].prizes[0].description, challengeData.prizeSets[0].prizes[0].description) + should.equal(result.prizeSets[0].prizes[0].type, challengeData.prizeSets[0].prizes[0].type) + should.equal(result.prizeSets[0].prizes[0].value, challengeData.prizeSets[0].prizes[0].value) + should.equal(result.reviewType, challengeData.reviewType) + should.equal(result.tags.length, 2) + should.equal(result.tags[0], challengeData.tags[0]) + should.equal(result.projectId, challengeData.projectId) + should.equal(result.legacyId, challengeData.legacyId) + should.equal(result.forumId, challengeData.forumId) + should.equal(result.status, challengeData.status) + should.equal(result.createdBy, 'testuser') should.exist(result.startDate) should.exist(result.created) should.equal(result.numOfSubmissions, 0) should.equal(result.numOfRegistrants, 0) - should.equal(result.terms.length, 2) - should.equal(testHelper.deepCompareArrays(result.terms, _.map(data.defaultProjectTerms, t => t.id)), true) }) it('search challenges successfully 5 - with tco eligible events', async () => { @@ -597,21 +533,11 @@ describe('challenge service unit tests', () => { throw new Error('should not reach here') }) - it('search challenges - invalid memberId', async () => { - try { - await service.searchChallenges({ isMachine: true }, { memberId: 'abcde' }) - } catch (e) { - should.equal(e.message.indexOf('"memberId" must be a number') >= 0, true) - return - } - throw new Error('should not reach here') - }) - it('search challenges - invalid forumId', async () => { try { - await service.searchChallenges({ isMachine: true }, { forumId: -1 }) + await service.searchChallenges({ isMachine: true }, { forumId: 'invalid' }) } catch (e) { - should.equal(e.message.indexOf('"forumId" must be a positive number') >= 0, true) + should.equal(e.message.indexOf('"forumId" must be a number') >= 0, true) return } throw new Error('should not reach here') @@ -716,349 +642,22 @@ describe('challenge service unit tests', () => { } throw new Error('should not reach here') }) - - it('search challenges - unexpected field', async () => { - try { - await service.searchChallenges({ isMachine: true }, { other: 123 }) - } catch (e) { - should.equal(e.message.indexOf('"other" is not allowed') >= 0, true) - return - } - throw new Error('should not reach here') - }) - }) - - describe('fully update challenge tests', () => { - it('fully update challenge successfully', async () => { - const challengeData = _.clone(testChallengeData) - challengeData.projectId = 112233 - challengeData.legacyId = 445566 - challengeData.attachmentIds = [attachment.id] - const result = await service.fullyUpdateChallenge({ isMachine: true, sub: 'sub2' }, id, challengeData) - should.equal(result.id, id) - should.equal(result.typeId, data.challenge.typeId) - should.equal(result.name, data.challenge.name) - should.equal(result.description, data.challenge.description) - should.equal(result.timelineTemplateId, data.challenge.timelineTemplateId) - should.equal(result.phases.length, 2) - should.exist(result.phases[0].id) - should.equal(result.phases[0].phaseId, data.phase.id) - should.equal(result.phases[0].duration, challengeData.phases[0].duration) - should.equal(testHelper.getDatesDiff(result.phases[0].scheduledStartDate, challengeData.startDate), 0) - should.equal(testHelper.getDatesDiff(result.phases[0].scheduledEndDate, challengeData.startDate), - challengeData.phases[0].duration * 1000) - should.equal(testHelper.getDatesDiff(result.phases[0].actualStartDate, challengeData.startDate), 0) - should.equal(testHelper.getDatesDiff(result.phases[0].actualEndDate, challengeData.startDate), - challengeData.phases[0].duration * 1000) - should.exist(result.phases[1].id) - should.equal(result.phases[1].phaseId, data.phase2.id) - should.equal(result.phases[1].predecessor, result.phases[0].id) - should.equal(result.phases[1].duration, challengeData.phases[1].duration) - should.equal(testHelper.getDatesDiff(result.phases[1].scheduledStartDate, challengeData.startDate), - challengeData.phases[0].duration * 1000) - should.equal(testHelper.getDatesDiff(result.phases[1].scheduledEndDate, challengeData.startDate), - challengeData.phases[0].duration * 1000 + challengeData.phases[1].duration * 1000) - should.equal(testHelper.getDatesDiff(result.phases[1].actualStartDate, challengeData.startDate), - challengeData.phases[0].duration * 1000) - should.equal(testHelper.getDatesDiff(result.phases[1].actualEndDate, challengeData.startDate), - challengeData.phases[0].duration * 1000 + challengeData.phases[1].duration * 1000) - should.equal(result.prizeSets.length, 1) - should.equal(result.prizeSets[0].type, data.challenge.prizeSets[0].type) - should.equal(result.prizeSets[0].description, data.challenge.prizeSets[0].description) - should.equal(result.prizeSets[0].prizes.length, 1) - should.equal(result.prizeSets[0].prizes[0].description, data.challenge.prizeSets[0].prizes[0].description) - should.equal(result.prizeSets[0].prizes[0].type, data.challenge.prizeSets[0].prizes[0].type) - should.equal(result.prizeSets[0].prizes[0].value, data.challenge.prizeSets[0].prizes[0].value) - should.equal(result.reviewType, data.challenge.reviewType) - should.equal(result.tags.length, 1) - should.equal(result.tags[0], data.challenge.tags[0]) - should.equal(result.projectId, 112233) - should.equal(result.legacyId, 445566) - should.equal(result.forumId, data.challenge.forumId) - should.equal(result.status, data.challenge.status) - should.equal(result.groups.length, 1) - should.equal(result.groups[0], data.challenge.groups[0]) - should.equal(result.gitRepoURLs.length, 1) - should.equal(result.gitRepoURLs[0], data.challenge.gitRepoURLs[0]) - should.equal(result.attachments.length, 1) - should.equal(result.attachments[0].id, attachment.id) - should.equal(result.attachments[0].fileSize, attachment.fileSize) - should.equal(result.attachments[0].fileName, attachment.fileName) - should.equal(result.attachments[0].challengeId, attachment.challengeId) - should.equal(result.createdBy, 'sub') - should.equal(result.updatedBy, 'sub2') - should.exist(result.startDate) - should.exist(result.created) - should.exist(result.updated) - should.equal(result.terms.length, 2) - should.equal(testHelper.deepCompareArrays(result.terms, _.map(data.defaultProjectTerms, t => t.id)), true) - }) - - it('fully update challenge with winners successfully', async () => { - const challengeData = _.clone(testCompletedChallengeData) - challengeData.projectId = 112233 - challengeData.legacyId = 445566 - challengeData.attachmentIds = [attachment.id] - challengeData.winners = winners - const result = await service.fullyUpdateChallenge({ isMachine: true, sub: 'sub2' }, id2, challengeData) - should.equal(result.id, id2) - should.equal(result.typeId, data.completedChallenge.typeId) - should.equal(result.track, data.completedChallenge.track) - should.equal(result.name, data.completedChallenge.name) - should.equal(result.description, data.completedChallenge.description) - should.equal(result.timelineTemplateId, data.completedChallenge.timelineTemplateId) - should.equal(result.phases.length, 2) - should.exist(result.phases[0].id) - should.equal(result.phases[0].phaseId, data.phase.id) - should.equal(result.phases[0].duration, challengeData.phases[0].duration) - should.equal(testHelper.getDatesDiff(result.phases[0].scheduledStartDate, challengeData.startDate), 0) - should.equal(testHelper.getDatesDiff(result.phases[0].scheduledEndDate, challengeData.startDate), - challengeData.phases[0].duration * 1000) - should.equal(testHelper.getDatesDiff(result.phases[0].actualStartDate, challengeData.startDate), 0) - should.equal(testHelper.getDatesDiff(result.phases[0].actualEndDate, challengeData.startDate), - challengeData.phases[0].duration * 1000) - should.exist(result.phases[1].id) - should.equal(result.phases[1].phaseId, data.phase2.id) - should.equal(result.phases[1].predecessor, result.phases[0].id) - should.equal(result.phases[1].duration, challengeData.phases[1].duration) - should.equal(testHelper.getDatesDiff(result.phases[1].scheduledStartDate, challengeData.startDate), - challengeData.phases[0].duration * 1000) - should.equal(testHelper.getDatesDiff(result.phases[1].scheduledEndDate, challengeData.startDate), - challengeData.phases[0].duration * 1000 + challengeData.phases[1].duration * 1000) - should.equal(testHelper.getDatesDiff(result.phases[1].actualStartDate, challengeData.startDate), - challengeData.phases[0].duration * 1000) - should.equal(testHelper.getDatesDiff(result.phases[1].actualEndDate, challengeData.startDate), - challengeData.phases[0].duration * 1000 + challengeData.phases[1].duration * 1000) - should.equal(result.prizeSets.length, 1) - should.equal(result.prizeSets[0].type, data.completedChallenge.prizeSets[0].type) - should.equal(result.prizeSets[0].description, data.completedChallenge.prizeSets[0].description) - should.equal(result.prizeSets[0].prizes.length, 1) - should.equal(result.prizeSets[0].prizes[0].description, data.completedChallenge.prizeSets[0].prizes[0].description) - should.equal(result.prizeSets[0].prizes[0].type, data.completedChallenge.prizeSets[0].prizes[0].type) - should.equal(result.prizeSets[0].prizes[0].value, data.completedChallenge.prizeSets[0].prizes[0].value) - should.equal(result.reviewType, data.completedChallenge.reviewType) - should.equal(result.tags.length, 1) - should.equal(result.tags[0], data.completedChallenge.tags[0]) - should.equal(result.projectId, 112233) - should.equal(result.legacyId, 445566) - should.equal(result.forumId, data.completedChallenge.forumId) - should.equal(result.status, data.completedChallenge.status) - should.equal(result.groups.length, 1) - should.equal(result.groups[0], data.completedChallenge.groups[0]) - should.equal(result.gitRepoURLs.length, 1) - should.equal(result.gitRepoURLs[0], data.completedChallenge.gitRepoURLs[0]) - should.equal(result.attachments.length, 1) - should.equal(result.attachments[0].id, attachment.id) - should.equal(result.attachments[0].fileSize, attachment.fileSize) - should.equal(result.attachments[0].fileName, attachment.fileName) - should.equal(result.attachments[0].challengeId, attachment.challengeId) - should.equal(result.winners.length, 2) - should.equal(result.winners[0].userId, winners[0].userId) - should.equal(result.winners[0].handle, winners[0].handle) - should.equal(result.winners[0].placement, winners[0].placement) - should.equal(result.winners[1].userId, winners[1].userId) - should.equal(result.winners[1].handle, winners[1].handle) - should.equal(result.winners[1].placement, winners[1].placement) - should.equal(result.createdBy, 'sub') - should.equal(result.updatedBy, 'sub2') - should.exist(result.startDate) - should.exist(result.created) - should.exist(result.updated) - should.equal(result.terms.length, 2) - should.equal(testHelper.deepCompareArrays(result.terms, _.map(data.defaultProjectTerms, t => t.id)), true) - }) - - it('fully update challenge - not found', async () => { - const challengeData = _.clone(testChallengeData) - challengeData.privateDescription = 'updated-pd' - try { - await service.fullyUpdateChallenge({ isMachine: true, sub: 'sub2' }, notFoundId, challengeData) - } catch (e) { - should.equal(e.message, `Challenge with id: ${notFoundId} doesn't exist`) - return - } - throw new Error('should not reach here') - }) - - it('fully update challenge - invalid id', async () => { - const challengeData = _.clone(testChallengeData) - challengeData.track = 'updated-track' - challengeData.attachmentIds = [attachment.id] - try { - await service.fullyUpdateChallenge({ isMachine: true, sub: 'sub2' }, 'invalid', challengeData) - } catch (e) { - should.equal(e.message.indexOf('"challengeId" must be a valid GUID') >= 0, true) - return - } - throw new Error('should not reach here') - }) - - it(`fully update challenge - project not found`, async () => { - const challengeData = _.clone(testChallengeData) - challengeData.projectId = 100000 - try { - await service.fullyUpdateChallenge({ userId: '16096823' }, id, challengeData, config.COPILOT_TOKEN) - } catch (e) { - should.equal(e.message, `Project with id: 100000 doesn't exist`) - return - } - throw new Error('should not reach here') - }) - - it(`fully update challenge - user doesn't have permission to update challenge under specific project`, async () => { - const challengeData = _.clone(testChallengeData) - challengeData.projectId = 200 - try { - await service.fullyUpdateChallenge({ userId: '16096823' }, id, challengeData, config.COPILOT_TOKEN) - } catch (e) { - should.equal(e.response.data.result.content.message, 'You do not have permissions to perform this action') - return - } - throw new Error('should not reach here') - }) - - it('fully update challenge - null name', async () => { - const challengeData = _.clone(testChallengeData) - try { - challengeData.name = null - await service.fullyUpdateChallenge({ isMachine: true, sub: 'sub2' }, id, challengeData) - } catch (e) { - should.equal(e.message.indexOf('"name" must be a string') >= 0, true) - return - } - throw new Error('should not reach here') - }) - - it('fully update challenge - invalid name', async () => { - const challengeData = _.clone(testChallengeData) - challengeData.name = ['abc'] - try { - await service.fullyUpdateChallenge({ isMachine: true, sub: 'sub2' }, id, challengeData) - } catch (e) { - should.equal(e.message.indexOf('"name" must be a string') >= 0, true) - return - } - throw new Error('should not reach here') - }) - - it('fully update challenge - invalid status', async () => { - const challengeData = _.clone(testChallengeData) - challengeData.status = 'invalid' - try { - await service.fullyUpdateChallenge({ isMachine: true, sub: 'sub2' }, id, challengeData) - } catch (e) { - should.equal(e.message.indexOf('"status" must be') >= 0, true) - return - } - throw new Error('should not reach here') - }) - - it('fully update challenge - Completed to Active status', async () => { - const challengeData = _.clone(testChallengeData) - challengeData.status = constants.challengeStatuses.Active - try { - await service.fullyUpdateChallenge({ isMachine: true, sub: 'sub2' }, id2, challengeData) - } catch (e) { - should.equal(e.message.indexOf('Cannot change Completed challenge status to Active status') >= 0, true) - return - } - throw new Error('should not reach here') - }) - - it('fully update challenge - set winners with non-completed Active status', async () => { - const challengeData = _.clone(testChallengeData) - challengeData.winners = winners - try { - await service.fullyUpdateChallenge({ isMachine: true, sub: 'sub2' }, id, challengeData) - } catch (e) { - should.equal(e.message.indexOf('Cannot set winners for challenge with non-completed Active status') >= 0, true) - return - } - throw new Error('should not reach here') - }) - - it('fully update challenge - Duplicate member with placement 1', async () => { - const challengeData = _.clone(testCompletedChallengeData) - challengeData.winners = [{ - userId: 12345678, - handle: 'thomaskranitsas', - placement: 1 - }, - { - userId: 12345678, - handle: 'thomaskranitsas', - placement: 1 - }] - try { - await service.fullyUpdateChallenge({ isMachine: true, sub: 'sub2' }, id2, challengeData) - } catch (e) { - should.equal(e.message.indexOf('Duplicate member with placement') >= 0, true) - return - } - throw new Error('should not reach here') - }) - - it('fully update challenge - Only one member can have placement 1', async () => { - const challengeData = _.clone(testCompletedChallengeData) - challengeData.winners = [ - { - userId: 12345678, - handle: 'thomaskranitsas', - placement: 1 - }, - { - userId: 3456789, - handle: 'tonyj', - placement: 1 - } - ] - try { - await service.fullyUpdateChallenge({ isMachine: true, sub: 'sub2' }, id2, challengeData) - } catch (e) { - should.equal(e.message.indexOf('Only one member can have a placement') >= 0, true) - return - } - throw new Error('should not reach here') - }) - - it('fully update challenge - The same member 12345678 cannot have multiple placements', async () => { - const challengeData = _.clone(testCompletedChallengeData) - challengeData.winners = [ - { - userId: 12345678, - handle: 'thomaskranitsas', - placement: 1 - }, - { - userId: 12345678, - handle: 'thomaskranitsas', - placement: 2 - } - ] - try { - await service.fullyUpdateChallenge({ isMachine: true, sub: 'sub2' }, id2, challengeData) - } catch (e) { - should.equal(e.message.indexOf('The same member 12345678 cannot have multiple placements') >= 0, true) - return - } - throw new Error('should not reach here') - }) }) - describe('partially update challenge tests', () => { - it('partially update challenge successfully 1', async () => { + describe('update challenge tests', () => { + it('update challenge successfully 1', async () => { const challengeData = testChallengeData - const result = await service.partiallyUpdateChallenge({ isMachine: true, sub: 'sub3' }, id, { + const result = await service.updateChallenge({ isMachine: true, sub: 'sub3', userId: 22838965 }, id, { privateDescription: 'track 333', description: 'updated desc', - attachmentIds: [] // this will delete attachments + attachments: [] // this will delete attachments }) should.equal(result.id, id) should.equal(result.typeId, data.challenge.typeId) should.equal(result.privateDescription, 'track 333') - should.equal(result.name, data.challenge.name) + should.equal(result.name, challengeData.name) should.equal(result.description, 'updated desc') - should.equal(result.timelineTemplateId, data.challenge.timelineTemplateId) + should.equal(result.timelineTemplateId, challengeData.timelineTemplateId) should.equal(result.phases.length, 2) should.exist(result.phases[0].id) should.equal(result.phases[0].phaseId, data.phase.id) @@ -1066,140 +665,99 @@ describe('challenge service unit tests', () => { should.equal(testHelper.getDatesDiff(result.phases[0].scheduledStartDate, challengeData.startDate), 0) should.equal(testHelper.getDatesDiff(result.phases[0].scheduledEndDate, challengeData.startDate), challengeData.phases[0].duration * 1000) - should.equal(testHelper.getDatesDiff(result.phases[0].actualStartDate, challengeData.startDate), 0) - should.equal(testHelper.getDatesDiff(result.phases[0].actualEndDate, challengeData.startDate), - challengeData.phases[0].duration * 1000) should.exist(result.phases[1].id) should.equal(result.phases[1].phaseId, data.phase2.id) - should.equal(result.phases[1].predecessor, result.phases[0].id) + should.equal(result.phases[1].predecessor, result.phases[0].phaseId) should.equal(result.phases[1].duration, challengeData.phases[1].duration) should.equal(testHelper.getDatesDiff(result.phases[1].scheduledStartDate, challengeData.startDate), challengeData.phases[0].duration * 1000) should.equal(testHelper.getDatesDiff(result.phases[1].scheduledEndDate, challengeData.startDate), challengeData.phases[0].duration * 1000 + challengeData.phases[1].duration * 1000) - should.equal(testHelper.getDatesDiff(result.phases[1].actualStartDate, challengeData.startDate), - challengeData.phases[0].duration * 1000) - should.equal(testHelper.getDatesDiff(result.phases[1].actualEndDate, challengeData.startDate), - challengeData.phases[0].duration * 1000 + challengeData.phases[1].duration * 1000) should.equal(result.prizeSets.length, 1) - should.equal(result.prizeSets[0].type, data.challenge.prizeSets[0].type) - should.equal(result.prizeSets[0].description, data.challenge.prizeSets[0].description) + should.equal(result.prizeSets[0].type, challengeData.prizeSets[0].type) + should.equal(result.prizeSets[0].description, challengeData.prizeSets[0].description) should.equal(result.prizeSets[0].prizes.length, 1) - should.equal(result.prizeSets[0].prizes[0].description, data.challenge.prizeSets[0].prizes[0].description) - should.equal(result.prizeSets[0].prizes[0].type, data.challenge.prizeSets[0].prizes[0].type) - should.equal(result.prizeSets[0].prizes[0].value, data.challenge.prizeSets[0].prizes[0].value) - should.equal(result.reviewType, data.challenge.reviewType) - should.equal(result.tags.length, 1) - should.equal(result.tags[0], data.challenge.tags[0]) - should.equal(result.projectId, 112233) - should.equal(result.legacyId, 445566) - should.equal(result.forumId, data.challenge.forumId) - should.equal(result.status, data.challenge.status) - should.equal(result.groups.length, 1) - should.equal(result.groups[0], data.challenge.groups[0]) - should.equal(result.gitRepoURLs.length, 1) - should.equal(result.gitRepoURLs[0], data.challenge.gitRepoURLs[0]) + should.equal(result.prizeSets[0].prizes[0].description, challengeData.prizeSets[0].prizes[0].description) + should.equal(result.prizeSets[0].prizes[0].type, challengeData.prizeSets[0].prizes[0].type) + should.equal(result.prizeSets[0].prizes[0].value, challengeData.prizeSets[0].prizes[0].value) + should.equal(result.reviewType, challengeData.reviewType) + should.equal(result.tags.length, 2) + should.equal(result.tags[0], challengeData.tags[0]) + should.equal(result.tags[1], challengeData.tags[1]) + should.equal(result.projectId, challengeData.projectId) + should.equal(result.legacyId, challengeData.legacyId) + should.equal(result.forumId, challengeData.forumId) + should.equal(result.status, challengeData.status) should.equal(!result.attachments || result.attachments.length === 0, true) - should.equal(result.createdBy, 'sub') - should.equal(result.updatedBy, 'sub3') + should.equal(result.createdBy, 'testuser') + should.equal(result.updatedBy, '22838965') should.exist(result.startDate) should.exist(result.created) should.exist(result.updated) - should.equal(result.terms.length, 2) - should.equal(testHelper.deepCompareArrays(result.terms, _.map(data.defaultProjectTerms, t => t.id)), true) - }) + }).timeout(3000) - it('partially update challenge successfully with winners', async () => { - const challengeData = testChallengeData - const result = await service.partiallyUpdateChallenge({ isMachine: true, sub: 'sub3' }, id2, { + it('update challenge successfully with winners', async () => { + const result = await service.updateChallenge({ isMachine: true, sub: 'sub3', userId: 22838965 }, data.challenge.id, { winners: [{ userId: 12345678, handle: 'thomaskranitsas', - placement: 1 + placement: 1, + type: constants.prizeSetTypes.ChallengePrizes }] }) - should.equal(result.id, id2) - should.equal(result.typeId, data.completedChallenge.typeId) - should.equal(result.track, data.completedChallenge.track) - should.equal(result.name, data.completedChallenge.name) - should.equal(result.description, data.completedChallenge.description) - should.equal(result.timelineTemplateId, data.completedChallenge.timelineTemplateId) - should.equal(result.phases.length, 2) - should.exist(result.phases[0].id) - should.equal(result.phases[0].phaseId, data.phase.id) - should.equal(result.phases[0].duration, challengeData.phases[0].duration) - should.equal(testHelper.getDatesDiff(result.phases[0].scheduledStartDate, challengeData.startDate), 0) - should.equal(testHelper.getDatesDiff(result.phases[0].scheduledEndDate, challengeData.startDate), - challengeData.phases[0].duration * 1000) - should.equal(testHelper.getDatesDiff(result.phases[0].actualStartDate, challengeData.startDate), 0) - should.equal(testHelper.getDatesDiff(result.phases[0].actualEndDate, challengeData.startDate), - challengeData.phases[0].duration * 1000) - should.exist(result.phases[1].id) - should.equal(result.phases[1].phaseId, data.phase2.id) - should.equal(result.phases[1].predecessor, result.phases[0].id) - should.equal(result.phases[1].duration, challengeData.phases[1].duration) - should.equal(testHelper.getDatesDiff(result.phases[1].scheduledStartDate, challengeData.startDate), - challengeData.phases[0].duration * 1000) - should.equal(testHelper.getDatesDiff(result.phases[1].scheduledEndDate, challengeData.startDate), - challengeData.phases[0].duration * 1000 + challengeData.phases[1].duration * 1000) - should.equal(testHelper.getDatesDiff(result.phases[1].actualStartDate, challengeData.startDate), - challengeData.phases[0].duration * 1000) - should.equal(testHelper.getDatesDiff(result.phases[1].actualEndDate, challengeData.startDate), - challengeData.phases[0].duration * 1000 + challengeData.phases[1].duration * 1000) - should.equal(result.prizeSets.length, 1) - should.equal(result.prizeSets[0].type, data.completedChallenge.prizeSets[0].type) - should.equal(result.prizeSets[0].description, data.completedChallenge.prizeSets[0].description) - should.equal(result.prizeSets[0].prizes.length, 1) - should.equal(result.prizeSets[0].prizes[0].description, data.completedChallenge.prizeSets[0].prizes[0].description) - should.equal(result.prizeSets[0].prizes[0].type, data.completedChallenge.prizeSets[0].prizes[0].type) - should.equal(result.prizeSets[0].prizes[0].value, data.completedChallenge.prizeSets[0].prizes[0].value) - should.equal(result.reviewType, data.completedChallenge.reviewType) + should.equal(result.id, data.challenge.id) + should.equal(result.typeId, data.challenge.typeId) + should.equal(result.trackId, data.challenge.trackId) + should.equal(result.name, data.challenge.name) + should.equal(result.description, data.challenge.description) + should.equal(result.timelineTemplateId, data.challenge.timelineTemplateId) + should.equal(result.phases.length, 0) + should.equal(result.prizeSets.length, 0) + should.equal(result.reviewType, data.challenge.reviewType) should.equal(result.tags.length, 1) - should.equal(result.tags[0], data.completedChallenge.tags[0]) - should.equal(result.projectId, 112233) - should.equal(result.legacyId, 445566) - should.equal(result.forumId, data.completedChallenge.forumId) - should.equal(result.status, data.completedChallenge.status) - should.equal(result.groups.length, 1) - should.equal(result.groups[0], data.completedChallenge.groups[0]) - should.equal(result.gitRepoURLs.length, 1) - should.equal(result.gitRepoURLs[0], data.completedChallenge.gitRepoURLs[0]) + should.equal(result.tags[0], data.challenge.tags[0]) + should.equal(result.projectId, data.challenge.projectId) + should.equal(result.legacyId, data.challenge.legacyId) + should.equal(result.forumId, data.challenge.forumId) + should.equal(result.status.toUpperCase(), data.challenge.status.toUpperCase()) should.equal(result.winners.length, 1) should.equal(result.winners[0].userId, winners[0].userId) should.equal(result.winners[0].handle, winners[0].handle) should.equal(result.winners[0].placement, winners[0].placement) - should.equal(result.createdBy, 'sub') - should.equal(result.updatedBy, 'sub3') + should.equal(result.winners[0].type, constants.prizeSetTypes.ChallengePrizes) + should.equal(result.createdBy, 'admin') + should.equal(result.updatedBy, '22838965') should.exist(result.startDate) should.exist(result.created) should.exist(result.updated) - should.equal(result.terms.length, 2) - should.equal(testHelper.deepCompareArrays(result.terms, _.map(data.defaultProjectTerms, t => t.id)), true) }) - it(`partially update challenge - project not found`, async () => { + it('update challenge - project not found', async () => { try { - await service.partiallyUpdateChallenge({ userId: '16096823' }, id, { projectId: 100000 }, config.COPILOT_TOKEN) + await service.updateChallenge( + { userId: '16096823', handle: '', roles: [constants.UserRoles.Admin] }, + id, + { projectId: 100000 }) } catch (e) { - should.equal(e.message, `Project with id: 100000 doesn't exist`) + should.equal(e.message, 'Project with id: 100000 doesn\'t exist') return } throw new Error('should not reach here') }) - it(`partially update challenge - user doesn't have permission to update challenge under specific project`, async () => { + it('update challenge - user doesn\'t have permission to update challenge under specific project', async () => { try { - await service.partiallyUpdateChallenge({ userId: '16096823' }, id, { projectId: 200 }, config.COPILOT_TOKEN) + await service.updateChallenge({ userId: '16096823', handle: '' }, id, { projectId: 200 }) } catch (e) { - should.equal(e.response.data.result.content.message, 'You do not have permissions to perform this action') + should.equal(e.message, 'Only M2M, admin, challenge\'s copilot or users with full access can perform modification.') return } throw new Error('should not reach here') }) - it('partially update challenge - timeline template not found', async () => { + it('update challenge - timeline template not found', async () => { try { - await service.partiallyUpdateChallenge({ isMachine: true, sub: 'sub3' }, id, { + await service.updateChallenge({ isMachine: true, sub: 'sub3' }, id, { timelineTemplateId: notFoundId }) } catch (e) { @@ -1209,9 +767,9 @@ describe('challenge service unit tests', () => { throw new Error('should not reach here') }) - it('partially update challenge - challenge not found', async () => { + it('update challenge - challenge not found', async () => { try { - await service.partiallyUpdateChallenge({ isMachine: true, sub: 'sub3' }, notFoundId, { + await service.updateChallenge({ isMachine: true, sub: 'sub3' }, notFoundId, { privateDescription: 'track 333' }) } catch (e) { @@ -1221,9 +779,9 @@ describe('challenge service unit tests', () => { throw new Error('should not reach here') }) - it('partially update challenge - invalid type id', async () => { + it('update challenge - invalid type id', async () => { try { - await service.partiallyUpdateChallenge({ isMachine: true, sub: 'sub3' }, id, { + await service.updateChallenge({ isMachine: true, sub: 'sub3' }, id, { typeId: 'invalid' }) } catch (e) { @@ -1233,33 +791,21 @@ describe('challenge service unit tests', () => { throw new Error('should not reach here') }) - it('partially update challenge - empty tags', async () => { + it('update challenge - invalid start date', async () => { try { - await service.partiallyUpdateChallenge({ isMachine: true, sub: 'sub3' }, id, { - tags: [] - }) - } catch (e) { - should.equal(e.message.indexOf('"tags" does not contain 1 required value(s)') >= 0, true) - return - } - throw new Error('should not reach here') - }) - - it('partially update challenge - invalid start date', async () => { - try { - await service.partiallyUpdateChallenge({ isMachine: true, sub: 'sub3' }, id, { + await service.updateChallenge({ isMachine: true, sub: 'sub3' }, id, { startDate: 'abc' }) } catch (e) { - should.equal(e.message.indexOf('"startDate" must be a number of milliseconds or valid date string') >= 0, true) + should.equal(e.message.indexOf('"startDate" must be a valid ISO 8601 date') >= 0, true) return } throw new Error('should not reach here') }) - it('partially update challenge - empty name', async () => { + it('update challenge - empty name', async () => { try { - await service.partiallyUpdateChallenge({ isMachine: true, sub: 'sub3' }, id, { + await service.updateChallenge({ isMachine: true, sub: 'sub3' }, id, { name: '' }) } catch (e) { @@ -1269,21 +815,9 @@ describe('challenge service unit tests', () => { throw new Error('should not reach here') }) - it('partially update challenge - unexpected field', async () => { - try { - await service.partiallyUpdateChallenge({ isMachine: true, sub: 'sub3' }, id, { - other: '123' - }) - } catch (e) { - should.equal(e.message.indexOf('"other" is not allowed') >= 0, true) - return - } - throw new Error('should not reach here') - }) - - it('partially update challenge - Completed to Active status', async () => { + it('update challenge - Completed to Active status', async () => { try { - await service.partiallyUpdateChallenge({ isMachine: true, sub: 'sub3' }, id2, { + await service.updateChallenge({ isMachine: true, sub: 'sub3' }, data.challenge.id, { status: constants.challengeStatuses.Active }) } catch (e) { @@ -1293,30 +827,32 @@ describe('challenge service unit tests', () => { throw new Error('should not reach here') }) - it('partially update challenge - set winners with non-completed Active status', async () => { + it('update challenge - set winners with non-completed Active status', async () => { try { - await service.partiallyUpdateChallenge({ isMachine: true, sub: 'sub3' }, id, { + await service.updateChallenge({ isMachine: true, sub: 'sub3' }, id, { winners }) } catch (e) { - should.equal(e.message.indexOf('Cannot set winners for challenge with non-completed Active status') >= 0, true) + should.equal(e.message.indexOf('Cannot set winners for challenge with non-completed') >= 0, true) return } throw new Error('should not reach here') }) - it('partially update challenge - Duplicate member with placement 1', async () => { + it('update challenge - Duplicate member with placement 1', async () => { try { - await service.partiallyUpdateChallenge({ isMachine: true, sub: 'sub3' }, id2, { + await service.updateChallenge({ isMachine: true, sub: 'sub3' }, data.challenge.id, { winners: [{ userId: 12345678, handle: 'thomaskranitsas', - placement: 1 + placement: 1, + type: constants.prizeSetTypes.ChallengePrizes }, { userId: 12345678, handle: 'thomaskranitsas', - placement: 1 + placement: 1, + type: constants.prizeSetTypes.ChallengePrizes }] }) } catch (e) { @@ -1326,19 +862,21 @@ describe('challenge service unit tests', () => { throw new Error('should not reach here') }) - it('partially update challenge - Only one member can have placement 1', async () => { + it('update challenge - Only one member can have placement 1', async () => { try { - await service.partiallyUpdateChallenge({ isMachine: true, sub: 'sub3' }, id2, { + await service.updateChallenge({ isMachine: true, sub: 'sub3' }, data.challenge.id, { winners: [ { userId: 12345678, handle: 'thomaskranitsas', - placement: 1 + placement: 1, + type: constants.prizeSetTypes.ChallengePrizes }, { userId: 3456789, handle: 'tonyj', - placement: 1 + placement: 1, + type: constants.prizeSetTypes.ChallengePrizes } ] }) @@ -1349,19 +887,21 @@ describe('challenge service unit tests', () => { throw new Error('should not reach here') }) - it('partially update challenge - The same member 12345678 cannot have multiple placements', async () => { + it('update challenge - The same member 12345678 cannot have multiple placements', async () => { try { - await service.partiallyUpdateChallenge({ isMachine: true, sub: 'sub3' }, id2, { + await service.updateChallenge({ isMachine: true, sub: 'sub3' }, data.challenge.id, { winners: [ { userId: 12345678, handle: 'thomaskranitsas', - placement: 1 + placement: 1, + type: constants.prizeSetTypes.ChallengePrizes }, { userId: 12345678, handle: 'thomaskranitsas', - placement: 2 + placement: 2, + type: constants.prizeSetTypes.ChallengePrizes } ] }) diff --git a/test/unit/ChallengeTypeService.test.js b/test/unit/ChallengeTypeService.test.js index cdc613e9..16f927ba 100644 --- a/test/unit/ChallengeTypeService.test.js +++ b/test/unit/ChallengeTypeService.test.js @@ -18,48 +18,43 @@ describe('challenge type service unit tests', () => { const name2 = `test2${new Date().getTime()}` const abbreviation = `abb1${new Date().getTime()}` const abbreviation2 = `abb2${new Date().getTime()}` - const legacyId = new Date().getTime() - const legacyId2 = legacyId + 123 const notFoundId = uuid() + const authUser = { userId: 'testuser' } describe('create challenge type tests', () => { it('create challenge type successfully 1', async () => { - const result = await service.createChallengeType({ + const result = await service.createChallengeType(authUser, { name, description: 'desc', isActive: true, - abbreviation, - legacyId + abbreviation }) should.equal(result.name, name) should.equal(result.description, 'desc') should.equal(result.isActive, true) should.equal(result.abbreviation, abbreviation) - should.equal(result.legacyId, legacyId) should.exist(result.id) id = result.id }) it('create challenge type successfully 2', async () => { - const result = await service.createChallengeType({ + const result = await service.createChallengeType(authUser, { name: name2, description: 'desc2', isActive: false, - abbreviation: abbreviation2, - legacyId: legacyId2 + abbreviation: abbreviation2 }) should.equal(result.name, name2) should.equal(result.description, 'desc2') should.equal(result.isActive, false) should.equal(result.abbreviation, abbreviation2) - should.equal(result.legacyId, legacyId2) should.exist(result.id) id2 = result.id }) it('create challenge type - name already used', async () => { try { - await service.createChallengeType({ + await service.createChallengeType(authUser, { name, description: 'desc', isActive: false, @@ -74,7 +69,7 @@ describe('challenge type service unit tests', () => { it('create challenge type - abbreviation already used', async () => { try { - await service.createChallengeType({ + await service.createChallengeType(authUser, { name: `name-abc-${new Date().getTime()}`, description: 'desc', isActive: false, @@ -87,25 +82,9 @@ describe('challenge type service unit tests', () => { throw new Error('should not reach here') }) - it('create challenge type - legacyId already used', async () => { - try { - await service.createChallengeType({ - name: `name-abc-${new Date().getTime()}`, - description: 'desc', - isActive: false, - abbreviation: `name-abb-${new Date().getTime()}`, - legacyId - }) - } catch (e) { - should.equal(e.message, `ChallengeType with legacyId: ${legacyId} already exist`) - return - } - throw new Error('should not reach here') - }) - it('create challenge type - missing name', async () => { try { - await service.createChallengeType({ + await service.createChallengeType(authUser, { description: 'desc', isActive: false, abbreviation: 'abb' @@ -119,7 +98,7 @@ describe('challenge type service unit tests', () => { it('create challenge type - missing abbreviation', async () => { try { - await service.createChallengeType({ + await service.createChallengeType(authUser, { name: 'nnnnn', description: 'desc', isActive: false @@ -133,7 +112,7 @@ describe('challenge type service unit tests', () => { it('create challenge type - invalid name', async () => { try { - await service.createChallengeType({ + await service.createChallengeType(authUser, { name: ['xx'], description: 'desc', isActive: false, @@ -148,7 +127,7 @@ describe('challenge type service unit tests', () => { it('create challenge type - invalid isActive', async () => { try { - await service.createChallengeType({ + await service.createChallengeType(authUser, { name: 'some name', description: 'desc', isActive: 'abc', @@ -161,25 +140,9 @@ describe('challenge type service unit tests', () => { throw new Error('should not reach here') }) - it('create challenge type - invalid legacyId', async () => { - try { - await service.createChallengeType({ - name: 'some name', - description: 'desc', - isActive: true, - abbreviation: 'abb', - legacyId: 'abc' - }) - } catch (e) { - should.equal(e.message.indexOf('"legacyId" must be a number') >= 0, true) - return - } - throw new Error('should not reach here') - }) - it('create challenge type - unexpected field', async () => { try { - await service.createChallengeType({ + await service.createChallengeType(authUser, { name: 'some name', description: 'desc', isActive: false, @@ -202,7 +165,6 @@ describe('challenge type service unit tests', () => { should.equal(result.description, 'desc2') should.equal(result.isActive, false) should.equal(result.abbreviation, abbreviation2) - should.equal(result.legacyId, legacyId2) }) it('get challenge type - not found', async () => { @@ -231,11 +193,10 @@ describe('challenge type service unit tests', () => { const result = await service.searchChallengeTypes({ page: 1, perPage: 10, - name: name2.substring(1).toUpperCase(), + // name: name2.substring(1).toUpperCase(), description: 'desc', isActive: false, - abbreviation: abbreviation2, - legacyId: legacyId2 + abbreviation: abbreviation2 }) should.equal(result.total, 1) should.equal(result.page, 1) @@ -246,7 +207,6 @@ describe('challenge type service unit tests', () => { should.equal(result.result[0].description, 'desc2') should.equal(result.result[0].isActive, false) should.equal(result.result[0].abbreviation, abbreviation2) - should.equal(result.result[0].legacyId, legacyId2) }) it('search challenge types successfully 2', async () => { @@ -320,24 +280,22 @@ describe('challenge type service unit tests', () => { describe('fully update challenge type tests', () => { it('fully update challenge type successfully', async () => { - const result = await service.fullyUpdateChallengeType(id2, { + const result = await service.fullyUpdateChallengeType(authUser, id2, { name: `${name2}-updated`, description: 'desc222', isActive: true, - abbreviation: `${abbreviation2}-updated`, - legacyId: legacyId2 + abbreviation: `${abbreviation2}-updated` }) should.equal(result.id, id2) should.equal(result.name, `${name2}-updated`) should.equal(result.description, 'desc222') should.equal(result.isActive, true) should.equal(result.abbreviation, `${abbreviation2}-updated`) - should.equal(result.legacyId, legacyId2) }) it('fully update challenge type - name already used', async () => { try { - await service.fullyUpdateChallengeType(id2, { + await service.fullyUpdateChallengeType(authUser, id2, { name, description: 'desc', isActive: false, @@ -352,7 +310,7 @@ describe('challenge type service unit tests', () => { it('fully update challenge type - abbreviation already used', async () => { try { - await service.fullyUpdateChallengeType(id2, { + await service.fullyUpdateChallengeType(authUser, id2, { name: `test-name-123-${new Date().getTime()}`, description: 'desc', isActive: false, @@ -365,25 +323,9 @@ describe('challenge type service unit tests', () => { throw new Error('should not reach here') }) - it('fully update challenge type - legacyId already used', async () => { - try { - await service.fullyUpdateChallengeType(id2, { - name: `test-name-123-${new Date().getTime()}`, - description: 'desc', - isActive: false, - abbreviation: `test-abb-123-${new Date().getTime()}`, - legacyId - }) - } catch (e) { - should.equal(e.message, `ChallengeType with legacyId: ${legacyId} already exist`) - return - } - throw new Error('should not reach here') - }) - it('fully update challenge type - not found', async () => { try { - await service.fullyUpdateChallengeType(notFoundId, { + await service.fullyUpdateChallengeType(authUser, notFoundId, { name: 'slkdjflskjdf', description: 'desc', isActive: false, @@ -398,7 +340,7 @@ describe('challenge type service unit tests', () => { it('fully update challenge type - invalid id', async () => { try { - await service.fullyUpdateChallengeType('invalid', { + await service.fullyUpdateChallengeType(authUser, 'invalid', { name: 'slkdjflskjdf', description: 'desc', isActive: false, @@ -413,7 +355,7 @@ describe('challenge type service unit tests', () => { it('fully update challenge type - null name', async () => { try { - await service.fullyUpdateChallengeType(id, { + await service.fullyUpdateChallengeType(authUser, id, { name: null, description: 'desc', isActive: false, @@ -428,7 +370,7 @@ describe('challenge type service unit tests', () => { it('fully update challenge type - invalid name', async () => { try { - await service.fullyUpdateChallengeType(id, { + await service.fullyUpdateChallengeType(authUser, id, { name: { invalid: 'x' }, description: 'desc', isActive: false, @@ -443,7 +385,7 @@ describe('challenge type service unit tests', () => { it('fully update challenge type - invalid description', async () => { try { - await service.fullyUpdateChallengeType(id, { + await service.fullyUpdateChallengeType(authUser, id, { name: 'some name', description: ['desc'], isActive: false, @@ -458,7 +400,7 @@ describe('challenge type service unit tests', () => { it('fully update challenge type - invalid abbreviation', async () => { try { - await service.fullyUpdateChallengeType(id, { + await service.fullyUpdateChallengeType(authUser, id, { name: 'some name', description: 'desc', isActive: false, @@ -471,25 +413,9 @@ describe('challenge type service unit tests', () => { throw new Error('should not reach here') }) - it('fully update challenge type - invalid legacyId', async () => { - try { - await service.fullyUpdateChallengeType(id, { - name: 'some name', - description: 'desc', - isActive: false, - abbreviation: 'ab', - legacyId: 'abc' - }) - } catch (e) { - should.equal(e.message.indexOf('"legacyId" must be a number') >= 0, true) - return - } - throw new Error('should not reach here') - }) - it('fully update challenge type - empty name', async () => { try { - await service.fullyUpdateChallengeType(id, { + await service.fullyUpdateChallengeType(authUser, id, { name: '', description: 'desc', isActive: false, @@ -504,7 +430,7 @@ describe('challenge type service unit tests', () => { it('fully update challenge type - invalid isActive', async () => { try { - await service.fullyUpdateChallengeType(id, { + await service.fullyUpdateChallengeType(authUser, id, { name: 'asdfsadfsdf', description: 'desc', isActive: 'invalid', @@ -520,7 +446,7 @@ describe('challenge type service unit tests', () => { describe('partially update challenge type tests', () => { it('partially update challenge type successfully 1', async () => { - const result = await service.partiallyUpdateChallengeType(id2, { + const result = await service.partiallyUpdateChallengeType(authUser, id2, { name: `${name2}-33`, description: 'desc33' }) @@ -529,12 +455,11 @@ describe('challenge type service unit tests', () => { should.equal(result.description, 'desc33') should.equal(result.isActive, true) should.equal(result.abbreviation, `${abbreviation2}-updated`) - should.equal(result.legacyId, legacyId2) }) it('partially update challenge type - name already used', async () => { try { - await service.partiallyUpdateChallengeType(id2, { + await service.partiallyUpdateChallengeType(authUser, id2, { name }) } catch (e) { @@ -546,7 +471,7 @@ describe('challenge type service unit tests', () => { it('partially update challenge type - abbreviation already used', async () => { try { - await service.partiallyUpdateChallengeType(id2, { + await service.partiallyUpdateChallengeType(authUser, id2, { abbreviation }) } catch (e) { @@ -556,21 +481,9 @@ describe('challenge type service unit tests', () => { throw new Error('should not reach here') }) - it('partially update challenge type - legacyId already used', async () => { - try { - await service.partiallyUpdateChallengeType(id2, { - legacyId - }) - } catch (e) { - should.equal(e.message, `ChallengeType with legacyId: ${legacyId} already exist`) - return - } - throw new Error('should not reach here') - }) - it('partially update challenge type - not found', async () => { try { - await service.partiallyUpdateChallengeType(notFoundId, { + await service.partiallyUpdateChallengeType(authUser, notFoundId, { name: 'slkdjflskjdf' }) } catch (e) { @@ -582,7 +495,7 @@ describe('challenge type service unit tests', () => { it('partially update challenge type - invalid id', async () => { try { - await service.partiallyUpdateChallengeType('invalid', { name: 'hufdufhdfx' }) + await service.partiallyUpdateChallengeType(authUser, 'invalid', { name: 'hufdufhdfx' }) } catch (e) { should.equal(e.message.indexOf('"id" must be a valid GUID') >= 0, true) return @@ -592,7 +505,7 @@ describe('challenge type service unit tests', () => { it('partially update challenge type - null name', async () => { try { - await service.partiallyUpdateChallengeType(id, { name: null }) + await service.partiallyUpdateChallengeType(authUser, id, { name: null }) } catch (e) { should.equal(e.message.indexOf('"name" must be a string') >= 0, true) return @@ -602,7 +515,7 @@ describe('challenge type service unit tests', () => { it('partially update challenge type - invalid description', async () => { try { - await service.partiallyUpdateChallengeType(id, { description: { invalid: 'x' } }) + await service.partiallyUpdateChallengeType(authUser, id, { description: { invalid: 'x' } }) } catch (e) { should.equal(e.message.indexOf('"description" must be a string') >= 0, true) return @@ -612,7 +525,7 @@ describe('challenge type service unit tests', () => { it('partially update challenge type - empty name', async () => { try { - await service.partiallyUpdateChallengeType(id, { name: '' }) + await service.partiallyUpdateChallengeType(authUser, id, { name: '' }) } catch (e) { should.equal(e.message.indexOf('"name" is not allowed to be empty') >= 0, true) return @@ -622,7 +535,7 @@ describe('challenge type service unit tests', () => { it('partially update challenge type - unexpected field', async () => { try { - await service.partiallyUpdateChallengeType(id, { name: 'xx', other: 'xx' }) + await service.partiallyUpdateChallengeType(authUser, id, { name: 'xx', other: 'xx' }) } catch (e) { should.equal(e.message.indexOf('"other" is not allowed') >= 0, true) return @@ -661,7 +574,7 @@ describe('challenge type service unit tests', () => { try { await service.deleteChallengeType('invalid') } catch (e) { - should.equal(e.message.indexOf('"challengeType" must be a valid GUID') >= 0, true) + should.equal(e.message.indexOf('"id" must be a valid GUID') >= 0, true) return } throw new Error('should not reach here') diff --git a/test/unit/ChallengeTypeTimelineTemplateService.test.js b/test/unit/ChallengeTypeTimelineTemplateService.test.js deleted file mode 100644 index ab4a8ea0..00000000 --- a/test/unit/ChallengeTypeTimelineTemplateService.test.js +++ /dev/null @@ -1,362 +0,0 @@ -/* - * Unit tests of challenge type timeline template service - */ - -require('../../app-bootstrap') -const uuid = require('uuid/v4') -const chai = require('chai') -const service = require('../../src/services/ChallengeTypeTimelineTemplateService') -const helper = require('../../src/common/helper') - -const should = chai.should() - -describe('timeline template service unit tests', () => { - // created entity id - let id - // reference data - let type - let type2 - let timelineTemplate - - const notFoundId = uuid() - - before(async () => { - type = await helper.create('ChallengeType', { - id: uuid(), - name: `type-${new Date().getTime()}`, // random name - description: 'desc', - isActive: true, - abbreviation: 'test' - }) - type2 = await helper.create('ChallengeType', { - id: uuid(), - name: `type2-${new Date().getTime()}`, // random name - description: 'desc2', - isActive: true, - abbreviation: 'test2' - }) - timelineTemplate = await helper.create('TimelineTemplate', { - id: uuid(), - name: `template-${new Date().getTime()}`, // random name - description: 'desc', - isActive: true, - phases: [{ - id: uuid(), - name: 'test', - isOpen: true, - duration: 123 - }] - }) - }) - - after(async () => { - await type.delete() - await type2.delete() - await timelineTemplate.delete() - }) - - describe('create challenge type timeline template tests', () => { - it('create challenge type timeline template successfully', async () => { - const result = await service.createChallengeTypeTimelineTemplate({ - typeId: type.id, - timelineTemplateId: timelineTemplate.id - }) - should.exist(result.id) - id = result.id - should.equal(result.typeId, type.id) - should.equal(result.timelineTemplateId, timelineTemplate.id) - }) - - it('create challenge type timeline template - already defined', async () => { - try { - await service.createChallengeTypeTimelineTemplate({ - typeId: type.id, - timelineTemplateId: timelineTemplate.id - }) - } catch (e) { - should.equal(e.message, 'The challenge type timeline template is already defined.') - return - } - throw new Error('should not reach here') - }) - - it('create challenge type timeline template - missing typeId', async () => { - try { - await service.createChallengeTypeTimelineTemplate({ - timelineTemplateId: timelineTemplate.id - }) - } catch (e) { - should.equal(e.message.indexOf('"typeId" is required') >= 0, true) - return - } - throw new Error('should not reach here') - }) - - it('create challenge type timeline template - invalid typeId', async () => { - try { - await service.createChallengeTypeTimelineTemplate({ - typeId: 'abc', - timelineTemplateId: timelineTemplate.id - }) - } catch (e) { - should.equal(e.message.indexOf('"typeId" must be a valid GUID') >= 0, true) - return - } - throw new Error('should not reach here') - }) - - it('create challenge type timeline template - missing timelineTemplateId', async () => { - try { - await service.createChallengeTypeTimelineTemplate({ - typeId: type.id - }) - } catch (e) { - should.equal(e.message.indexOf('"timelineTemplateId" is required') >= 0, true) - return - } - throw new Error('should not reach here') - }) - - it('create challenge type timeline template - invalid timelineTemplateId', async () => { - try { - await service.createChallengeTypeTimelineTemplate({ - typeId: type.id, - timelineTemplateId: 'abc' - }) - } catch (e) { - should.equal(e.message.indexOf('"timelineTemplateId" must be a valid GUID') >= 0, true) - return - } - throw new Error('should not reach here') - }) - - it('create challenge type timeline template - unexpected field', async () => { - try { - await service.createChallengeTypeTimelineTemplate({ - typeId: type.id, - timelineTemplateId: timelineTemplate.id, - other: 'abc' - }) - } catch (e) { - should.equal(e.message.indexOf('"other" is not allowed') >= 0, true) - return - } - throw new Error('should not reach here') - }) - }) - - describe('get challenge type timeline template tests', () => { - it('get challenge type timeline template successfully', async () => { - const result = await service.getChallengeTypeTimelineTemplate(id) - should.equal(result.id, id) - should.equal(result.typeId, type.id) - should.equal(result.timelineTemplateId, timelineTemplate.id) - }) - - it('get challenge type timeline template - not found', async () => { - try { - await service.getChallengeTypeTimelineTemplate(notFoundId) - } catch (e) { - should.equal(e.message, `ChallengeTypeTimelineTemplate with id: ${notFoundId} doesn't exist`) - return - } - throw new Error('should not reach here') - }) - - it('get challenge type timeline template - invalid id', async () => { - try { - await service.getChallengeTypeTimelineTemplate('invalid') - } catch (e) { - should.equal(e.message.indexOf('"challengeTypeTimelineTemplateId" must be a valid GUID') >= 0, true) - return - } - throw new Error('should not reach here') - }) - }) - - describe('search challenge type timeline templates tests', () => { - it('search timeline templates successfully 1', async () => { - const result = await service.searchChallengeTypeTimelineTemplates({}) - should.equal(result.length, 1) - should.equal(result[0].typeId, type.id) - should.equal(result[0].timelineTemplateId, timelineTemplate.id) - }) - - it('search timeline templates successfully 2', async () => { - const result = await service.searchChallengeTypeTimelineTemplates({ typeId: type.id }) - should.equal(result.length, 1) - should.equal(result[0].typeId, type.id) - should.equal(result[0].timelineTemplateId, timelineTemplate.id) - }) - - it('search timeline templates successfully 3', async () => { - const result = await service.searchChallengeTypeTimelineTemplates({ timelineTemplateId: timelineTemplate.id }) - should.equal(result.length, 1) - should.equal(result[0].typeId, type.id) - should.equal(result[0].timelineTemplateId, timelineTemplate.id) - }) - - it('search timeline templates successfully 4', async () => { - const result = await service.searchChallengeTypeTimelineTemplates({ typeId: notFoundId }) - should.equal(result.length, 0) - }) - - it('search timeline templates - invalid typeId', async () => { - try { - await service.searchChallengeTypeTimelineTemplates({ typeId: ['invalid'] }) - } catch (e) { - should.equal(e.message.indexOf('"typeId" must be a string') >= 0, true) - return - } - throw new Error('should not reach here') - }) - - it('search timeline templates - invalid timelineTemplateId', async () => { - try { - await service.searchChallengeTypeTimelineTemplates({ timelineTemplateId: 'abc' }) - } catch (e) { - should.equal(e.message.indexOf('"timelineTemplateId" must be a valid GUID') >= 0, true) - return - } - throw new Error('should not reach here') - }) - - it('search timeline templates - unexpected field', async () => { - try { - await service.searchChallengeTypeTimelineTemplates({ other: 123 }) - } catch (e) { - should.equal(e.message.indexOf('"other" is not allowed') >= 0, true) - return - } - throw new Error('should not reach here') - }) - }) - - describe('fully update challenge type timeline template tests', () => { - it('fully update challenge type timeline template successfully', async () => { - const result = await service.fullyUpdateChallengeTypeTimelineTemplate(id, { - typeId: type2.id, - timelineTemplateId: timelineTemplate.id - }) - should.equal(result.id, id) - should.equal(result.typeId, type2.id) - should.equal(result.timelineTemplateId, timelineTemplate.id) - }) - - it('fully update challenge type timeline template - not found', async () => { - try { - await service.fullyUpdateChallengeTypeTimelineTemplate(notFoundId, { - typeId: type2.id, - timelineTemplateId: timelineTemplate.id - }) - } catch (e) { - should.equal(e.message, `ChallengeTypeTimelineTemplate with id: ${notFoundId} doesn't exist`) - return - } - throw new Error('should not reach here') - }) - - it('fully update challenge type timeline template - invalid id', async () => { - try { - await service.fullyUpdateChallengeTypeTimelineTemplate('invalid', { - typeId: type2.id, - timelineTemplateId: timelineTemplate.id - }) - } catch (e) { - should.equal(e.message.indexOf('"challengeTypeTimelineTemplateId" must be a valid GUID') >= 0, true) - return - } - throw new Error('should not reach here') - }) - - it('fully update challenge type timeline template - null typeId', async () => { - try { - await service.fullyUpdateChallengeTypeTimelineTemplate(id, { - typeId: null, - timelineTemplateId: timelineTemplate.id - }) - } catch (e) { - should.equal(e.message.indexOf('"typeId" must be a string') >= 0, true) - return - } - throw new Error('should not reach here') - }) - - it('fully update challenge type timeline template - invalid typeId', async () => { - try { - await service.fullyUpdateChallengeTypeTimelineTemplate(id, { - typeId: { invalid: 'x' }, - timelineTemplateId: timelineTemplate.id - }) - } catch (e) { - should.equal(e.message.indexOf('"typeId" must be a string') >= 0, true) - return - } - throw new Error('should not reach here') - }) - - it('fully update challenge type timeline template - empty timelineTemplateId', async () => { - try { - await service.fullyUpdateChallengeTypeTimelineTemplate(id, { - typeId: type.id, - timelineTemplateId: '' - }) - } catch (e) { - should.equal(e.message.indexOf('"timelineTemplateId" is not allowed to be empty') >= 0, true) - return - } - throw new Error('should not reach here') - }) - - it('fully update challenge type timeline template - missing timelineTemplateId', async () => { - try { - await service.fullyUpdateChallengeTypeTimelineTemplate(id, { - typeId: type.id - }) - } catch (e) { - should.equal(e.message.indexOf('"timelineTemplateId" is required') >= 0, true) - return - } - throw new Error('should not reach here') - }) - }) - - describe('remove challenge type timeline template tests', () => { - it('remove challenge type timeline template successfully', async () => { - const result = await service.deleteChallengeTypeTimelineTemplate(id) - should.equal(result.id, id) - should.equal(result.typeId, type2.id) - should.equal(result.timelineTemplateId, timelineTemplate.id) - }) - - it('remove challenge type timeline template - not found 1', async () => { - try { - await service.deleteChallengeTypeTimelineTemplate(notFoundId) - } catch (e) { - should.equal(e.message, `ChallengeTypeTimelineTemplate with id: ${notFoundId} doesn't exist`) - return - } - throw new Error('should not reach here') - }) - - it('remove challenge type timeline template - not found 2', async () => { - try { - await service.deleteChallengeTypeTimelineTemplate(id) - } catch (e) { - should.equal(e.message, `ChallengeTypeTimelineTemplate with id: ${id} doesn't exist`) - return - } - throw new Error('should not reach here') - }) - - it('remove challenge type timeline template - invalid id', async () => { - try { - await service.deleteChallengeTypeTimelineTemplate('invalid') - } catch (e) { - should.equal(e.message.indexOf('"challengeTypeTimelineTemplateId" must be a valid GUID') >= 0, true) - return - } - throw new Error('should not reach here') - }) - }) -}) diff --git a/test/unit/PhaseService.test.js b/test/unit/PhaseService.test.js index 083f7ab7..b74ac103 100644 --- a/test/unit/PhaseService.test.js +++ b/test/unit/PhaseService.test.js @@ -17,10 +17,13 @@ describe('phase service unit tests', () => { const name = `test1${new Date().getTime()}` const name2 = `test2${new Date().getTime()}` const notFoundId = uuid() + const authUser = { + userId: 'testuser' + } describe('create phase tests', () => { it('create phase successfully 1', async () => { - const result = await service.createPhase({ + const result = await service.createPhase(authUser, { name, description: 'desc', isOpen: true, @@ -35,7 +38,7 @@ describe('phase service unit tests', () => { }) it('create phase successfully 2', async () => { - const result = await service.createPhase({ + const result = await service.createPhase(authUser, { name: name2, description: 'desc2', isOpen: false, @@ -51,7 +54,7 @@ describe('phase service unit tests', () => { it('create phase - name already used', async () => { try { - await service.createPhase({ + await service.createPhase(authUser, { name, description: 'desc', isOpen: false, @@ -66,7 +69,7 @@ describe('phase service unit tests', () => { it('create phase - missing name', async () => { try { - await service.createPhase({ + await service.createPhase(authUser, { description: 'desc', isOpen: false, duration: 456 @@ -80,7 +83,7 @@ describe('phase service unit tests', () => { it('create phase - invalid name', async () => { try { - await service.createPhase({ + await service.createPhase(authUser, { name: ['xx'], description: 'desc', isOpen: false, @@ -95,7 +98,7 @@ describe('phase service unit tests', () => { it('create phase - invalid duration', async () => { try { - await service.createPhase({ + await service.createPhase(authUser, { name: 'some name', description: 'desc', isOpen: false, @@ -110,7 +113,7 @@ describe('phase service unit tests', () => { it('create phase - unexpected field', async () => { try { - await service.createPhase({ + await service.createPhase(authUser, { name: 'some name', description: 'desc', isOpen: false, @@ -158,7 +161,7 @@ describe('phase service unit tests', () => { describe('search phases tests', () => { it('search phases successfully 1', async () => { - const result = await service.searchPhases({ page: 1, perPage: 10, name: name2.substring(1).toUpperCase() }) + const result = await service.searchPhases({ page: 1, perPage: 10, name: name2 }) should.equal(result.total, 1) should.equal(result.page, 1) should.equal(result.perPage, 10) @@ -221,7 +224,7 @@ describe('phase service unit tests', () => { describe('fully update phase tests', () => { it('fully update phase successfully', async () => { - const result = await service.fullyUpdatePhase(id2, { + const result = await service.fullyUpdatePhase(authUser, id2, { name: `${name2}-updated`, description: 'desc222', isOpen: true, @@ -236,7 +239,7 @@ describe('phase service unit tests', () => { it('fully update phase - name already used', async () => { try { - await service.fullyUpdatePhase(id2, { + await service.fullyUpdatePhase(authUser, id2, { name, description: 'desc', isOpen: false, @@ -251,7 +254,7 @@ describe('phase service unit tests', () => { it('fully update phase - not found', async () => { try { - await service.fullyUpdatePhase(notFoundId, { + await service.fullyUpdatePhase(authUser, notFoundId, { name: 'slkdjflskjdf', description: 'desc', isOpen: false, @@ -266,7 +269,7 @@ describe('phase service unit tests', () => { it('fully update phase - invalid id', async () => { try { - await service.fullyUpdatePhase('invalid', { + await service.fullyUpdatePhase(authUser, 'invalid', { name: 'slkdjflskjdf', description: 'desc', isOpen: false, @@ -281,7 +284,7 @@ describe('phase service unit tests', () => { it('fully update phase - null name', async () => { try { - await service.fullyUpdatePhase(id, { + await service.fullyUpdatePhase(authUser, id, { name: null, description: 'desc', isOpen: false, @@ -296,7 +299,7 @@ describe('phase service unit tests', () => { it('fully update phase - invalid name', async () => { try { - await service.fullyUpdatePhase(id, { + await service.fullyUpdatePhase(authUser, id, { name: { invalid: 'x' }, description: 'desc', isOpen: false, @@ -311,7 +314,7 @@ describe('phase service unit tests', () => { it('fully update phase - empty name', async () => { try { - await service.fullyUpdatePhase(id, { + await service.fullyUpdatePhase(authUser, id, { name: '', description: 'desc', isOpen: false, @@ -326,7 +329,7 @@ describe('phase service unit tests', () => { it('fully update phase - invalid isOpen', async () => { try { - await service.fullyUpdatePhase(id, { + await service.fullyUpdatePhase(authUser, id, { name: 'asdfsadfsdf', description: 'desc', isOpen: 'invalid', @@ -342,7 +345,7 @@ describe('phase service unit tests', () => { describe('partially update phase tests', () => { it('partially update phase successfully 1', async () => { - const result = await service.partiallyUpdatePhase(id2, { + const result = await service.partiallyUpdatePhase(authUser, id2, { name: `${name2}-33`, description: 'desc33', duration: 111 @@ -356,7 +359,7 @@ describe('phase service unit tests', () => { it('partially update phase - name already used', async () => { try { - await service.partiallyUpdatePhase(id2, { + await service.partiallyUpdatePhase(authUser, id2, { name }) } catch (e) { @@ -368,7 +371,7 @@ describe('phase service unit tests', () => { it('partially update phase - not found', async () => { try { - await service.partiallyUpdatePhase(notFoundId, { + await service.partiallyUpdatePhase(authUser, notFoundId, { name: 'slkdjflskjdf' }) } catch (e) { @@ -380,7 +383,7 @@ describe('phase service unit tests', () => { it('partially update phase - invalid id', async () => { try { - await service.partiallyUpdatePhase('invalid', { name: 'hufdufhdfx' }) + await service.partiallyUpdatePhase(authUser, 'invalid', { name: 'hufdufhdfx' }) } catch (e) { should.equal(e.message.indexOf('"phaseId" must be a valid GUID') >= 0, true) return @@ -390,7 +393,7 @@ describe('phase service unit tests', () => { it('partially update phase - null name', async () => { try { - await service.partiallyUpdatePhase(id, { name: null }) + await service.partiallyUpdatePhase(authUser, id, { name: null }) } catch (e) { should.equal(e.message.indexOf('"name" must be a string') >= 0, true) return @@ -400,7 +403,7 @@ describe('phase service unit tests', () => { it('partially update phase - invalid description', async () => { try { - await service.partiallyUpdatePhase(id, { description: { invalid: 'x' } }) + await service.partiallyUpdatePhase(authUser, id, { description: { invalid: 'x' } }) } catch (e) { should.equal(e.message.indexOf('"description" must be a string') >= 0, true) return @@ -410,7 +413,7 @@ describe('phase service unit tests', () => { it('partially update phase - empty name', async () => { try { - await service.partiallyUpdatePhase(id, { name: '' }) + await service.partiallyUpdatePhase(authUser, id, { name: '' }) } catch (e) { should.equal(e.message.indexOf('"name" is not allowed to be empty') >= 0, true) return @@ -420,7 +423,7 @@ describe('phase service unit tests', () => { it('partially update phase - unexpected field', async () => { try { - await service.partiallyUpdatePhase(id, { name: 'xx', other: 'xx' }) + await service.partiallyUpdatePhase(authUser, id, { name: 'xx', other: 'xx' }) } catch (e) { should.equal(e.message.indexOf('"other" is not allowed') >= 0, true) return diff --git a/test/unit/TimelineTemplateService.test.js b/test/unit/TimelineTemplateService.test.js index fa96bfbc..02ff3b72 100644 --- a/test/unit/TimelineTemplateService.test.js +++ b/test/unit/TimelineTemplateService.test.js @@ -6,7 +6,7 @@ require('../../app-bootstrap') const uuid = require('uuid/v4') const chai = require('chai') const service = require('../../src/services/TimelineTemplateService') -const helper = require('../../src/common/helper') +const prisma = require('../../src/common/prisma').getClient() const should = chai.should() @@ -21,24 +21,31 @@ describe('timeline template service unit tests', () => { // reference data let phase const predecessor = uuid() + const authUser = { + userId: 'testuser' + } before(async () => { - phase = await helper.create('Phase', { - id: uuid(), - name: `phase${new Date().getTime()}`, // random name - description: 'desc', - isOpen: true, - duration: 12 + phase = await prisma.phase.create({ + data: { + id: uuid(), + name: `phase${new Date().getTime()}`, // random name + description: 'desc', + isOpen: true, + duration: 12, + createdBy: authUser.userId, + updatedBy: authUser.userId + } }) }) after(async () => { - await phase.delete() + await prisma.phase.delete({ where: { id: phase.id } }) }) describe('create timeline template tests', () => { it('create timeline template successfully 1', async () => { - const result = await service.createTimelineTemplate({ + const result = await service.createTimelineTemplate(authUser, { name, description: 'desc', isActive: true, @@ -56,7 +63,7 @@ describe('timeline template service unit tests', () => { }) it('create timeline template successfully 2', async () => { - const result = await service.createTimelineTemplate({ + const result = await service.createTimelineTemplate(authUser, { name: name2, description: 'desc', isActive: false, @@ -75,7 +82,7 @@ describe('timeline template service unit tests', () => { it('create timeline template - name already used', async () => { try { - await service.createTimelineTemplate({ + await service.createTimelineTemplate(authUser, { name, description: 'desc', isActive: false, @@ -90,7 +97,7 @@ describe('timeline template service unit tests', () => { it('create timeline template - missing name', async () => { try { - await service.createTimelineTemplate({ + await service.createTimelineTemplate(authUser, { description: 'desc', isActive: false, phases: [{ phaseId: phase.id, predecessor, defaultDuration: 123 }] @@ -104,7 +111,7 @@ describe('timeline template service unit tests', () => { it('create timeline template - invalid name', async () => { try { - await service.createTimelineTemplate({ + await service.createTimelineTemplate(authUser, { name: ['xx'], description: 'desc', isActive: false, @@ -117,24 +124,9 @@ describe('timeline template service unit tests', () => { throw new Error('should not reach here') }) - it('create timeline template - invalid phases', async () => { - try { - await service.createTimelineTemplate({ - name: 'jjghurturt34', - description: 'desc', - isActive: false, - phases: [{ phaseId: notFoundId, defaultDuration: 123 }] - }) - } catch (e) { - should.equal(e.message.indexOf('phases are invalid') >= 0, true) - return - } - throw new Error('should not reach here') - }) - it('create timeline template - missing phases', async () => { try { - await service.createTimelineTemplate({ + await service.createTimelineTemplate(authUser, { name: 'jjghurturt34', description: 'desc', isActive: false, @@ -149,7 +141,7 @@ describe('timeline template service unit tests', () => { it('create timeline template - unexpected field', async () => { try { - await service.createTimelineTemplate({ + await service.createTimelineTemplate(authUser, { name: 'some name 1232323', description: 'desc', isActive: false, @@ -200,7 +192,7 @@ describe('timeline template service unit tests', () => { describe('search timeline templates tests', () => { it('search timeline templates successfully 1', async () => { - const result = await service.searchTimelineTemplates({ page: 1, perPage: 10, name: name.substring(1).toUpperCase() }) + const result = await service.searchTimelineTemplates({ page: 1, perPage: 10, name }) should.equal(result.total, 1) should.equal(result.page, 1) should.equal(result.perPage, 10) @@ -266,7 +258,7 @@ describe('timeline template service unit tests', () => { describe('fully update timeline template tests', () => { it('fully update timeline template successfully', async () => { - const result = await service.fullyUpdateTimelineTemplate(id, { + const result = await service.fullyUpdateTimelineTemplate(authUser, id, { name: `${name}-updated`, description: 'desc222', isActive: false, @@ -284,14 +276,14 @@ describe('timeline template service unit tests', () => { it('fully update timeline template - name already used', async () => { try { - await service.fullyUpdateTimelineTemplate(id, { + await service.fullyUpdateTimelineTemplate(authUser, id, { name: name2, description: 'desc', isActive: false, phases: [{ phaseId: phase.id, predecessor, defaultDuration: 123 }] }) } catch (e) { - should.equal(e.message, `TimelineTemplate with name: ${name2} already exist`) + should.equal(e.message, `Timeline template with name ${name2} already exists`) return } throw new Error('should not reach here') @@ -299,7 +291,7 @@ describe('timeline template service unit tests', () => { it('fully update timeline template - not found', async () => { try { - await service.fullyUpdateTimelineTemplate(notFoundId, { + await service.fullyUpdateTimelineTemplate(authUser, notFoundId, { name: 'slkdjflskjdf', description: 'desc', isActive: false, @@ -314,7 +306,7 @@ describe('timeline template service unit tests', () => { it('fully update timeline template - invalid id', async () => { try { - await service.fullyUpdateTimelineTemplate('invalid', { + await service.fullyUpdateTimelineTemplate(authUser, 'invalid', { name: 'slkdjflskjdf', description: 'desc', isActive: false, @@ -329,7 +321,7 @@ describe('timeline template service unit tests', () => { it('fully update timeline template - null name', async () => { try { - await service.fullyUpdateTimelineTemplate(id, { + await service.fullyUpdateTimelineTemplate(authUser, id, { name: null, description: 'desc', isActive: false, @@ -344,7 +336,7 @@ describe('timeline template service unit tests', () => { it('fully update timeline template - invalid name', async () => { try { - await service.fullyUpdateTimelineTemplate(id, { + await service.fullyUpdateTimelineTemplate(authUser, id, { name: { invalid: 'x' }, description: 'desc', isActive: false, @@ -359,7 +351,7 @@ describe('timeline template service unit tests', () => { it('fully update timeline template - empty name', async () => { try { - await service.fullyUpdateTimelineTemplate(id, { + await service.fullyUpdateTimelineTemplate(authUser, id, { name: '', description: 'desc', isActive: false, @@ -374,7 +366,7 @@ describe('timeline template service unit tests', () => { it('fully update timeline template - invalid isActive', async () => { try { - await service.fullyUpdateTimelineTemplate(id, { + await service.fullyUpdateTimelineTemplate(authUser, id, { name: 'asdfsadfsdf', description: 'desc', isActive: 'invalid', @@ -389,7 +381,7 @@ describe('timeline template service unit tests', () => { it('fully update timeline template - missing phases', async () => { try { - await service.fullyUpdateTimelineTemplate(id, { + await service.fullyUpdateTimelineTemplate(authUser, id, { name: 'asdfsadfsdf', description: 'desc', isActive: true @@ -404,7 +396,7 @@ describe('timeline template service unit tests', () => { describe('partially update timeline template tests', () => { it('partially update timeline template successfully 1', async () => { - const result = await service.partiallyUpdateTimelineTemplate(id, { + const result = await service.partiallyUpdateTimelineTemplate(authUser, id, { name: `${name}-33`, description: 'desc33' }) @@ -420,11 +412,11 @@ describe('timeline template service unit tests', () => { it('partially update timeline template - name already used', async () => { try { - await service.partiallyUpdateTimelineTemplate(id, { + await service.partiallyUpdateTimelineTemplate(authUser, id, { name: name2 }) } catch (e) { - should.equal(e.message, `TimelineTemplate with name: ${name2} already exist`) + should.equal(e.message, `Timeline template with name ${name2} already exists`) return } throw new Error('should not reach here') @@ -432,7 +424,7 @@ describe('timeline template service unit tests', () => { it('partially update timeline template - not found', async () => { try { - await service.partiallyUpdateTimelineTemplate(notFoundId, { + await service.partiallyUpdateTimelineTemplate(authUser, notFoundId, { name: 'slkdjflskjdf' }) } catch (e) { @@ -444,7 +436,7 @@ describe('timeline template service unit tests', () => { it('partially update timeline template - invalid id', async () => { try { - await service.partiallyUpdateTimelineTemplate('invalid', { name: 'hufdufhdfx' }) + await service.partiallyUpdateTimelineTemplate(authUser, 'invalid', { name: 'hufdufhdfx' }) } catch (e) { should.equal(e.message.indexOf('"timelineTemplateId" must be a valid GUID') >= 0, true) return @@ -454,7 +446,7 @@ describe('timeline template service unit tests', () => { it('partially update timeline template - null name', async () => { try { - await service.partiallyUpdateTimelineTemplate(id, { name: null }) + await service.partiallyUpdateTimelineTemplate(authUser, id, { name: null }) } catch (e) { should.equal(e.message.indexOf('"name" must be a string') >= 0, true) return @@ -464,7 +456,7 @@ describe('timeline template service unit tests', () => { it('partially update timeline template - invalid description', async () => { try { - await service.partiallyUpdateTimelineTemplate(id, { description: { invalid: 'x' } }) + await service.partiallyUpdateTimelineTemplate(authUser, id, { description: { invalid: 'x' } }) } catch (e) { should.equal(e.message.indexOf('"description" must be a string') >= 0, true) return @@ -474,7 +466,7 @@ describe('timeline template service unit tests', () => { it('partially update timeline template - invalid isActive', async () => { try { - await service.partiallyUpdateTimelineTemplate(id, { isActive: 'abc' }) + await service.partiallyUpdateTimelineTemplate(authUser, id, { isActive: 'abc' }) } catch (e) { should.equal(e.message.indexOf('"isActive" must be a boolean') >= 0, true) return @@ -484,7 +476,7 @@ describe('timeline template service unit tests', () => { it('partially update timeline template - empty name', async () => { try { - await service.partiallyUpdateTimelineTemplate(id, { name: '' }) + await service.partiallyUpdateTimelineTemplate(authUser, id, { name: '' }) } catch (e) { should.equal(e.message.indexOf('"name" is not allowed to be empty') >= 0, true) return @@ -494,7 +486,7 @@ describe('timeline template service unit tests', () => { it('partially update timeline template - unexpected field', async () => { try { - await service.partiallyUpdateTimelineTemplate(id, { name: 'ww', other: 'ww' }) + await service.partiallyUpdateTimelineTemplate(authUser, id, { name: 'ww', other: 'ww' }) } catch (e) { should.equal(e.message.indexOf('"other" is not allowed') >= 0, true) return diff --git a/yarn.lock b/yarn.lock index 93941524..623e4e0f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,150 +2,189 @@ # yarn lockfile v1 -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - -"@babel/code-frame@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" - integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== - dependencies: - "@babel/highlight" "^7.23.4" - chalk "^2.4.2" - -"@babel/generator@^7.23.6", "@babel/generator@^7.4.0": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" - integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== - dependencies: - "@babel/types" "^7.23.6" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/helper-environment-visitor@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - -"@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== - dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" - -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-string-parser@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" - integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== - -"@babel/helper-validator-identifier@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== - -"@babel/highlight@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" - integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" +"@ampproject/remapping@^2.2.0": + version "2.3.0" + resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@babel/code-frame@^7.26.2": + version "7.26.2" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz" + integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== + dependencies: + "@babel/helper-validator-identifier" "^7.25.9" js-tokens "^4.0.0" + picocolors "^1.0.0" + +"@babel/compat-data@^7.26.5": + version "7.26.8" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz" + integrity sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ== + +"@babel/core@^7.0.0", "@babel/core@^7.23.9": + version "7.26.9" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz" + integrity sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.26.9" + "@babel/helper-compilation-targets" "^7.26.5" + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helpers" "^7.26.9" + "@babel/parser" "^7.26.9" + "@babel/template" "^7.26.9" + "@babel/traverse" "^7.26.9" + "@babel/types" "^7.26.9" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.26.9": + version "7.26.9" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.26.9.tgz" + integrity sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg== + dependencies: + "@babel/parser" "^7.26.9" + "@babel/types" "^7.26.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^3.0.2" + +"@babel/helper-compilation-targets@^7.26.5": + version "7.26.5" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz" + integrity sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA== + dependencies: + "@babel/compat-data" "^7.26.5" + "@babel/helper-validator-option" "^7.25.9" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-module-imports@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz" + integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-module-transforms@^7.26.0": + version "7.26.0" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz" + integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/helper-string-parser@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz" + integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== + +"@babel/helper-validator-identifier@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz" + integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== -"@babel/parser@^7.23.9", "@babel/parser@^7.4.3": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b" - integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA== +"@babel/helper-validator-option@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz" + integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== + +"@babel/helpers@^7.26.9": + version "7.26.9" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.9.tgz" + integrity sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA== + dependencies: + "@babel/template" "^7.26.9" + "@babel/types" "^7.26.9" + +"@babel/parser@^7.23.9", "@babel/parser@^7.26.9": + version "7.26.9" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz" + integrity sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A== + dependencies: + "@babel/types" "^7.26.9" "@babel/runtime@^7.15.4": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.9.tgz#47791a15e4603bb5f905bc0753801cf21d6345f7" - integrity sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw== + version "7.26.9" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.9.tgz" + integrity sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.22.15", "@babel/template@^7.4.0": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.23.9.tgz#f881d0487cba2828d3259dcb9ef5005a9731011a" - integrity sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA== - dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/parser" "^7.23.9" - "@babel/types" "^7.23.9" - -"@babel/traverse@^7.4.3": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.9.tgz#2f9d6aead6b564669394c5ce0f9302bb65b9d950" - integrity sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg== - dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.6" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.9" - "@babel/types" "^7.23.9" +"@babel/template@^7.26.9": + version "7.26.9" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz" + integrity sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/parser" "^7.26.9" + "@babel/types" "^7.26.9" + +"@babel/traverse@^7.25.9", "@babel/traverse@^7.26.9": + version "7.26.9" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.9.tgz" + integrity sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.26.9" + "@babel/parser" "^7.26.9" + "@babel/template" "^7.26.9" + "@babel/types" "^7.26.9" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.23.9", "@babel/types@^7.4.0": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002" - integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q== +"@babel/types@^7.25.9", "@babel/types@^7.26.9": + version "7.26.9" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz" + integrity sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw== dependencies: - "@babel/helper-string-parser" "^7.23.4" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" + "@babel/helper-string-parser" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" -"@colors/colors@1.6.0", "@colors/colors@^1.6.0": +"@colors/colors@^1.6.0", "@colors/colors@1.6.0": version "1.6.0" - resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.6.0.tgz#ec6cd237440700bc23ca23087f513c75508958b0" + resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz" integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA== "@dabh/diagnostics@^2.0.2": version "2.0.3" - resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.3.tgz#7f7e97ee9a725dffc7808d93668cc984e1dc477a" + resolved "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz" integrity sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA== dependencies: colorspace "1.1.x" enabled "2.0.x" kuler "^2.0.0" +"@esbuild/linux-x64@0.25.1": + version "0.25.1" + resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.1.tgz" + integrity sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA== + "@eslint-community/eslint-utils@^4.2.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + version "4.4.1" + resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz" + integrity sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA== dependencies: - eslint-visitor-keys "^3.3.0" + eslint-visitor-keys "^3.4.3" "@eslint-community/regexpp@^4.6.1": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" - integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== + version "4.12.1" + resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz" + integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== "@eslint/eslintrc@^2.1.4": version "2.1.4" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz" integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== dependencies: ajv "^6.12.4" @@ -158,83 +197,103 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.56.0": - version "8.56.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b" - integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A== - -"@grpc/grpc-js@^1.8.0", "@grpc/grpc-js@^1.8.12", "@grpc/grpc-js@^1.8.7": - version "1.10.0" - resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.10.0.tgz#23b5defd6a021a20924b4baca2dd1b3a3ecc3716" - integrity sha512-tx+eoEsqkMkLCHR4OOplwNIaJ7SVZWzeVKzEMBz8VR+TbssgBYOP4a0P+KQiQ6LaTG4SGaIEu7YTS8xOmkOWLA== - dependencies: - "@grpc/proto-loader" "^0.7.8" - "@types/node" ">=12.12.47" - -"@grpc/proto-loader@^0.7.8": - version "0.7.10" - resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.7.10.tgz#6bf26742b1b54d0a473067743da5d3189d06d720" - integrity sha512-CAqDfoaQ8ykFd9zqBDn4k6iWT9loLAlc2ETmDFS9JCD70gDcnA4L3AFEo2iV7KyAtAAHFW9ftq1Fz+Vsgq80RQ== - dependencies: - lodash.camelcase "^4.3.0" - long "^5.0.0" - protobufjs "^7.2.4" - yargs "^17.7.2" +"@eslint/js@8.57.1": + version "8.57.1" + resolved "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz" + integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== -"@humanwhocodes/config-array@^0.11.13": - version "0.11.14" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" - integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== +"@humanwhocodes/config-array@^0.13.0": + version "0.13.0" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz" + integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== dependencies: - "@humanwhocodes/object-schema" "^2.0.2" + "@humanwhocodes/object-schema" "^2.0.3" debug "^4.3.1" minimatch "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" - integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== +"@humanwhocodes/object-schema@^2.0.3": + version "2.0.3" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz" + integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" -"@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== +"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": + version "0.1.3" + resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.8" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz" + integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== dependencies: - "@jridgewell/set-array" "^1.0.1" + "@jridgewell/set-array" "^1.2.1" "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/trace-mapping" "^0.3.24" "@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + version "3.1.2" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + version "1.5.0" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.22" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz#72a621e5de59f5f1ef792d0793a82ee20f645e4c" - integrity sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw== +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" +"@jsep-plugin/assignment@^1.3.0": + version "1.3.0" + resolved "https://registry.npmjs.org/@jsep-plugin/assignment/-/assignment-1.3.0.tgz" + integrity sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ== + +"@jsep-plugin/regex@^1.0.4": + version "1.0.4" + resolved "https://registry.npmjs.org/@jsep-plugin/regex/-/regex-1.0.4.tgz" + integrity sha512-q7qL4Mgjs1vByCaTnDFcBnV9HS7GVPJX5vyVoCgZHNSC9rjwIlmbXG5sUuorR5ndfHAIlJ8pVStxvjXHbNvtUg== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" @@ -242,170 +301,120 @@ "@nodelib/fs.stat@2.0.5": version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.8": version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@opensearch-project/opensearch@^2.2.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@opensearch-project/opensearch/-/opensearch-2.5.0.tgz#0fff1fc5c6aa94b0cf87d132573a14eeb5e1df7f" - integrity sha512-RY5J6Jt/Jbbr2F9XByGY9LJr0VNmXJjgVvvntpKE4NtZa/r9ak3o8YtGK1iey1yHgzMzze25598qq7ZYFk42DA== - dependencies: - aws4 "^1.11.0" - debug "^4.3.1" - hpagent "^1.2.0" - ms "^2.1.3" - secure-json-parse "^2.4.0" - -"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" - integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== - -"@protobufjs/base64@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" - integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== - -"@protobufjs/codegen@^2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" - integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== - -"@protobufjs/eventemitter@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" - integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== - -"@protobufjs/fetch@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" - integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== - dependencies: - "@protobufjs/aspromise" "^1.1.1" - "@protobufjs/inquire" "^1.1.0" - -"@protobufjs/float@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" - integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== - -"@protobufjs/inquire@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" - integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== - -"@protobufjs/path@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" - integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== - -"@protobufjs/pool@^1.1.0": +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@prisma/client@^6.4.1": + version "6.4.1" + resolved "https://registry.npmjs.org/@prisma/client/-/client-6.4.1.tgz" + integrity sha512-A7Mwx44+GVZVexT5e2GF/WcKkEkNNKbgr059xpr5mn+oUm2ZW1svhe+0TRNBwCdzhfIZ+q23jEgsNPvKD9u+6g== + +"@prisma/debug@6.4.1": + version "6.4.1" + resolved "https://registry.npmjs.org/@prisma/debug/-/debug-6.4.1.tgz" + integrity sha512-Q9xk6yjEGIThjSD8zZegxd5tBRNHYd13GOIG0nLsanbTXATiPXCLyvlYEfvbR2ft6dlRsziQXfQGxAgv7zcMUA== + +"@prisma/engines-version@6.4.0-29.a9055b89e58b4b5bfb59600785423b1db3d0e75d": + version "6.4.0-29.a9055b89e58b4b5bfb59600785423b1db3d0e75d" + resolved "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.4.0-29.a9055b89e58b4b5bfb59600785423b1db3d0e75d.tgz" + integrity sha512-Xq54qw55vaCGrGgIJqyDwOq0TtjZPJEWsbQAHugk99hpDf2jcEeQhUcF+yzEsSqegBaDNLA4IC8Nn34sXmkiTQ== + +"@prisma/engines@6.4.1": + version "6.4.1" + resolved "https://registry.npmjs.org/@prisma/engines/-/engines-6.4.1.tgz" + integrity sha512-KldENzMHtKYwsOSLThghOIdXOBEsfDuGSrxAZjMnimBiDKd3AE4JQ+Kv+gBD/x77WoV9xIPf25GXMWffXZ17BA== + dependencies: + "@prisma/debug" "6.4.1" + "@prisma/engines-version" "6.4.0-29.a9055b89e58b4b5bfb59600785423b1db3d0e75d" + "@prisma/fetch-engine" "6.4.1" + "@prisma/get-platform" "6.4.1" + +"@prisma/fetch-engine@6.4.1": + version "6.4.1" + resolved "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.4.1.tgz" + integrity sha512-uZ5hVeTmDspx7KcaRCNoXmcReOD+84nwlO2oFvQPRQh9xiFYnnUKDz7l9bLxp8t4+25CsaNlgrgilXKSQwrIGQ== + dependencies: + "@prisma/debug" "6.4.1" + "@prisma/engines-version" "6.4.0-29.a9055b89e58b4b5bfb59600785423b1db3d0e75d" + "@prisma/get-platform" "6.4.1" + +"@prisma/get-platform@6.4.1": + version "6.4.1" + resolved "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.4.1.tgz" + integrity sha512-gXqZaDI5scDkBF8oza7fOD3Q3QMD0e0rBynlzDDZdTWbWmzjuW58PRZtj+jkvKje2+ZigCWkH8SsWZAsH6q1Yw== + dependencies: + "@prisma/debug" "6.4.1" + +"@rtsao/scc@^1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" - integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== + resolved "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz" + integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== -"@protobufjs/utf8@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" - integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== +"@scarf/scarf@=1.4.0": + version "1.4.0" + resolved "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.4.0.tgz" + integrity sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ== "@tootallnate/once@1": version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== "@tootallnate/once@2": version "2.0.0" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== -"@topcoder-framework/client-relational@^0.24.1": - version "0.24.1" - resolved "https://topcoder-409275337247.d.codeartifact.us-east-1.amazonaws.com/npm/topcoder-framework/@topcoder-framework/client-relational/-/client-relational-0.24.1.tgz#a01c4bb5a6117c38d5b61e1a79ded58abeb5b7c5" - integrity sha512-yZJS2N6l1YT/wadWRgMhMzrtFNfPgCBMVLUPO2ORHq182xXSIBkpXLRvX99z2XVPRGpjCVkfumh+jANQKX8AXw== - dependencies: - "@grpc/grpc-js" "^1.8.0" - "@topcoder-framework/lib-common" "^0.24.1" - topcoder-proto-registry "0.2.0" - tslib "^2.4.1" - -"@topcoder-framework/domain-acl@^0.24.0": - version "0.24.1" - resolved "https://topcoder-409275337247.d.codeartifact.us-east-1.amazonaws.com/npm/topcoder-framework/@topcoder-framework/domain-acl/-/domain-acl-0.24.1.tgz#61435da8d28756a319bc31bfd4f5b4458614f64f" - integrity sha512-7+uvCxkfURuXsBIwQBvn9aBobBheZCKlKQWzH4Dk5sCBxyhbjQ0B+TkFnfn2+65NzblwuvYEAEnJdLyAYu4RPA== - dependencies: - "@grpc/grpc-js" "^1.8.7" - "@topcoder-framework/client-relational" "^0.24.1" - "@topcoder-framework/lib-common" "^0.24.1" - topcoder-proto-registry "0.2.0" - tslib "^2.4.1" - -"@topcoder-framework/domain-challenge@^0.24.1": - version "0.24.1" - resolved "https://topcoder-409275337247.d.codeartifact.us-east-1.amazonaws.com/npm/topcoder-framework/@topcoder-framework/domain-challenge/-/domain-challenge-0.24.1.tgz#912cb9c7903236345ee036574e2fe82fe810b659" - integrity sha512-Zp7YEqCMxBel+VHFsmg9C7ZoZwkq5xMB3V0e2OxRdd0QZwyzXHll66NsajPNpkkEAAaMmzMmZTbKxF6KTJ97GQ== - dependencies: - "@grpc/grpc-js" "^1.8.0" - "@topcoder-framework/client-relational" "^0.24.1" - "@topcoder-framework/lib-common" "^0.24.1" - topcoder-proto-registry "0.2.0" - tslib "^2.4.1" - -"@topcoder-framework/lib-common@^0.24.1": - version "0.24.1" - resolved "https://topcoder-409275337247.d.codeartifact.us-east-1.amazonaws.com/npm/topcoder-framework/@topcoder-framework/lib-common/-/lib-common-0.24.1.tgz#fc69af0f3deb263d347bfb8ac014065c5a7ceeec" - integrity sha512-Av/v5YybzyrJlhxANFxy+uJR938OWzd4vkcBZvAWmY4wX9D8UOiBA1nF2EMZ5+9xhY+PD3O/yuqnfqUs/4qT+g== - dependencies: - "@grpc/grpc-js" "^1.8.0" - rimraf "^3.0.2" - topcoder-proto-registry "0.2.0" - tslib "^2.4.1" - "@types/body-parser@*": version "1.19.5" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" + resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz" integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== dependencies: "@types/connect" "*" "@types/node" "*" "@types/chai@4": - version "4.3.11" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.11.tgz#e95050bf79a932cb7305dd130254ccdf9bde671c" - integrity sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ== + version "4.3.20" + resolved "https://registry.npmjs.org/@types/chai/-/chai-4.3.20.tgz" + integrity sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ== "@types/connect@*": version "3.4.38" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" + resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz" integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== dependencies: "@types/node" "*" "@types/cookiejar@*": version "2.1.5" - resolved "https://registry.yarnpkg.com/@types/cookiejar/-/cookiejar-2.1.5.tgz#14a3e83fa641beb169a2dd8422d91c3c345a9a78" + resolved "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz" integrity sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q== "@types/express-jwt@0.0.42": version "0.0.42" - resolved "https://registry.yarnpkg.com/@types/express-jwt/-/express-jwt-0.0.42.tgz#4f04e1fadf9d18725950dc041808a4a4adf7f5ae" + resolved "https://registry.npmjs.org/@types/express-jwt/-/express-jwt-0.0.42.tgz" integrity sha512-WszgUddvM1t5dPpJ3LhWNH8kfNN8GPIBrAGxgIYXVCEGx6Bx4A036aAuf/r5WH9DIEdlmp7gHOYvSM6U87B0ag== dependencies: "@types/express" "*" "@types/express-unless" "*" -"@types/express-serve-static-core@^4.17.33": - version "4.17.43" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz#10d8444be560cb789c4735aea5eac6e5af45df54" - integrity sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg== +"@types/express-serve-static-core@^5.0.0": + version "5.0.6" + resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz" + integrity sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA== dependencies: "@types/node" "*" "@types/qs" "*" @@ -413,79 +422,74 @@ "@types/send" "*" "@types/express-unless@*": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/express-unless/-/express-unless-2.0.1.tgz#7d5728315caf95a315a6bcc19ac99f6a8becbe49" - integrity sha512-PJLiNw03EjkWDkQbhNjIXXDLObC3eMQhFASDV+WakFbT8eL7YdjlbV6MXd3Av5Lejq499d6pFuV1jyK+EHyG3Q== + version "0.5.3" + resolved "https://registry.npmjs.org/@types/express-unless/-/express-unless-0.5.3.tgz" + integrity sha512-TyPLQaF6w8UlWdv4gj8i46B+INBVzURBNRahCozCSXfsK2VTlL1wNyTlMKw817VHygBtlcl5jfnPadlydr06Yw== dependencies: - express-unless "*" + "@types/express" "*" "@types/express@*": - version "4.17.21" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" - integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== + version "5.0.0" + resolved "https://registry.npmjs.org/@types/express/-/express-5.0.0.tgz" + integrity sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ== dependencies: "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.33" + "@types/express-serve-static-core" "^5.0.0" "@types/qs" "*" "@types/serve-static" "*" "@types/http-errors@*": version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" + resolved "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz" integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== "@types/json5@^0.0.29": version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -"@types/mime@*": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.4.tgz#2198ac274de6017b44d941e00261d5bc6a0e0a45" - integrity sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw== - "@types/mime@^1": version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" + resolved "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz" integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== -"@types/node@*", "@types/node@>=12.12.47", "@types/node@>=13.7.0": - version "20.11.17" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.17.tgz#cdd642d0e62ef3a861f88ddbc2b61e32578a9292" - integrity sha512-QmgQZGWu1Yw9TDyAP9ZzpFJKynYNeOvwMJmaxABfieQoVoiVOS6MN1WSpqpRcbeA5+RW82kraAVxCCJg+780Qw== +"@types/node@*": + version "22.13.10" + resolved "https://registry.npmjs.org/@types/node/-/node-22.13.10.tgz" + integrity sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw== dependencies: - undici-types "~5.26.4" + undici-types "~6.20.0" "@types/qs@*": - version "6.9.11" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.11.tgz#208d8a30bc507bd82e03ada29e4732ea46a6bbda" - integrity sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ== + version "6.9.18" + resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz" + integrity sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA== "@types/range-parser@*": version "1.2.7" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" + resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz" integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== "@types/send@*": version "0.17.4" - resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" + resolved "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz" integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== dependencies: "@types/mime" "^1" "@types/node" "*" "@types/serve-static@*": - version "1.15.5" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.5.tgz#15e67500ec40789a1e8c9defc2d32a896f05b033" - integrity sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ== + version "1.15.7" + resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz" + integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== dependencies: "@types/http-errors" "*" - "@types/mime" "*" "@types/node" "*" + "@types/send" "*" "@types/superagent@4.1.13": version "4.1.13" - resolved "https://registry.yarnpkg.com/@types/superagent/-/superagent-4.1.13.tgz#0aaa3f4ff9404b94932d1dcdfb7f3d39d23997a0" + resolved "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.13.tgz" integrity sha512-YIGelp3ZyMiH0/A09PMAORO0EBGlF5xIKfDpK74wdYvWUs2o96b5CItJcWPdH409b7SAXIIG6p8NdU/4U2Maww== dependencies: "@types/cookiejar" "*" @@ -493,27 +497,27 @@ "@types/triple-beam@^1.3.2": version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.5.tgz#74fef9ffbaa198eb8b588be029f38b00299caa2c" + resolved "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz" integrity sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw== +"@types/trusted-types@^2.0.7": + version "2.0.7" + resolved "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz" + integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== + "@ungap/structured-clone@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" - integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + version "1.3.0" + resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz" + integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== abab@^2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" + resolved "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz" integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - accepts@~1.3.8: version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== dependencies: mime-types "~2.1.34" @@ -521,7 +525,7 @@ accepts@~1.3.8: acorn-globals@^7.0.0: version "7.0.1" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-7.0.1.tgz#0dbf05c44fa7c94332914c02066d5beff62c40c3" + resolved "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz" integrity sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q== dependencies: acorn "^8.1.0" @@ -529,36 +533,46 @@ acorn-globals@^7.0.0: acorn-jsx@^5.3.2: version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn-walk@^8.0.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" - integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== + version "8.3.4" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz" + integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== + dependencies: + acorn "^8.11.0" -acorn@^8.1.0, acorn@^8.8.2, acorn@^8.9.0: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.1.0, acorn@^8.11.0, acorn@^8.8.2, acorn@^8.9.0: + version "8.14.1" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz" + integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg== agent-base@6: version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: debug "4" agentkeepalive@^3.4.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" - integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ== + version "3.5.3" + resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.3.tgz" + integrity sha512-yqXL+k5rr8+ZRpOAntkaaRgWgE5o8ESAj5DyRmVTCSoZxXmqemb9Dd7T4i5UzwuERdLAJUy6XzR9zFVuf0kzkw== dependencies: humanize-ms "^1.2.1" +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + ajv@^6.12.3, ajv@^6.12.4: version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" @@ -566,232 +580,223 @@ ajv@^6.12.3, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ansi-colors@3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" - integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== +ansi-colors@^4.1.3: + version "4.1.3" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== ansi-regex@^2.0.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== -ansi-regex@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" - integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== - -ansi-regex@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" - integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== - ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +ansi-regex@^6.0.1: + version "6.1.0" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz" + integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== + ansi-styles@^2.2.1: version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz" integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== +ansi-styles@^4.0.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: - color-convert "^1.9.0" + color-convert "^2.0.1" -ansi-styles@^4.0.0, ansi-styles@^4.1.0: +ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + anymatch@~3.1.2: version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" -append-transform@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab" - integrity sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw== +append-transform@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz" + integrity sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg== dependencies: - default-require-extensions "^2.0.0" + default-require-extensions "^3.0.0" archy@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + resolved "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz" integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== argparse@^1.0.7: version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" argparse@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" - integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== +array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz" + integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== dependencies: - call-bind "^1.0.5" - is-array-buffer "^3.0.4" + call-bound "^1.0.3" + is-array-buffer "^3.0.5" array-flatten@1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== -array-includes@^3.1.6, array-includes@^3.1.7: - version "3.1.7" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" - integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== +array-includes@^3.1.6, array-includes@^3.1.8: + version "3.1.8" + resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz" + integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" is-string "^1.0.7" -array.prototype.filter@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz#423771edeb417ff5914111fff4277ea0624c0d0e" - integrity sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw== +array.prototype.findlast@^1.2.5: + version "1.2.5" + resolved "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz" + integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.7" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" -array.prototype.findlastindex@^1.2.3: - version "1.2.4" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz#d1c50f0b3a9da191981ff8942a0aedd82794404f" - integrity sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ== +array.prototype.findlastindex@^1.2.5: + version "1.2.5" + resolved "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz" + integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== dependencies: - call-bind "^1.0.5" + call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.22.3" + es-abstract "^1.23.2" es-errors "^1.3.0" + es-object-atoms "^1.0.0" es-shim-unscopables "^1.0.2" array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" - integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -array.prototype.flatmap@^1.3.1, array.prototype.flatmap@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" - integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== + version "1.3.3" + resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz" + integrity sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" -array.prototype.reduce@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.6.tgz#63149931808c5fc1e1354814923d92d45f7d96d5" - integrity sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg== +array.prototype.flatmap@^1.3.2, array.prototype.flatmap@^1.3.3: + version "1.3.3" + resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz" + integrity sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.7" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" -array.prototype.tosorted@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz#c8c89348337e51b8a3c48a9227f9ce93ceedcba8" - integrity sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg== +array.prototype.tosorted@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz" + integrity sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA== dependencies: - call-bind "^1.0.5" + call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.1.0" + es-abstract "^1.23.3" + es-errors "^1.3.0" es-shim-unscopables "^1.0.2" -arraybuffer.prototype.slice@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" - integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== +arraybuffer.prototype.slice@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz" + integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== dependencies: array-buffer-byte-length "^1.0.1" - call-bind "^1.0.5" + call-bind "^1.0.8" define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.2.1" - get-intrinsic "^1.2.3" + es-abstract "^1.23.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" is-array-buffer "^3.0.4" - is-shared-array-buffer "^1.0.2" asap@^2.0.0: version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== asn1@~0.2.3: version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== dependencies: safer-buffer "~2.1.0" -assert-plus@1.0.0, assert-plus@^1.0.0: +assert-plus@^1.0.0, assert-plus@1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== assertion-error@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== -async@^3.2.3: - version "3.2.5" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" - integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== - -asynciterator.prototype@^1.0.0: +async-function@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz#8c5df0514936cdd133604dfcc9d3fb93f09b2b62" - integrity sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg== - dependencies: - has-symbols "^1.0.3" + resolved "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz" + integrity sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA== + +async@^3.2.3: + version "3.2.6" + resolved "https://registry.npmjs.org/async/-/async-3.2.6.tgz" + integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== asynckit@^0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== -available-typed-arrays@^1.0.5, available-typed-arrays@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz#ac812d8ce5a6b976d738e1c45f08d0b00bc7d725" - integrity sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg== +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" aws-sdk@^2.1145.0: - version "2.1555.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1555.0.tgz#7949469e60bde38a7f0662fd6c585e274a061ece" - integrity sha512-hjYs1MQkJxdHnoZm8hypqGy4PQKWVUs19McdXRXWNXr97V0il4xcUpIfvjHQ9x9EjP0p/jyIx9/BtyrR68jnUQ== + version "2.1692.0" + resolved "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1692.0.tgz" + integrity sha512-x511uiJ/57FIsbgUe5csJ13k3uzu25uWQE+XqfBis/sB0SFoiElJWXRkgEAUh0U6n40eT3ay5Ue4oPkRMu1LYw== dependencies: buffer "4.9.2" events "1.1.1" @@ -806,17 +811,17 @@ aws-sdk@^2.1145.0: aws-sign2@~0.7.0: version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz" integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== -aws4@^1.11.0, aws4@^1.8.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" - integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== +aws4@^1.8.0: + version "1.13.2" + resolved "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz" + integrity sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw== axios-retry@^3.4.0: version "3.9.1" - resolved "https://registry.yarnpkg.com/axios-retry/-/axios-retry-3.9.1.tgz#c8924a8781c8e0a2c5244abf773deb7566b3830d" + resolved "https://registry.npmjs.org/axios-retry/-/axios-retry-3.9.1.tgz" integrity sha512-8PJDLJv7qTTMMwdnbMvrLYuvB47M81wRtxQmEdV5w4rgbTXTt+vtPkXwajOfOdSyv/wZICJOC+/UhXH4aQ/R+w== dependencies: "@babel/runtime" "^7.15.4" @@ -824,81 +829,72 @@ axios-retry@^3.4.0: axios@^0.19.0: version "0.19.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" + resolved "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz" integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== dependencies: follow-redirects "1.5.10" axios@^0.21.1: version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" + resolved "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz" integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== dependencies: follow-redirects "^1.14.0" +axios@^1.8.2: + version "1.8.2" + resolved "https://registry.npmjs.org/axios/-/axios-1.8.2.tgz" + integrity sha512-ls4GYBm5aig9vWx8AWDSGLpnpDQRtWAfrjU+EuytuODrFBkqesN2RkOQCBzrA1RQNHw1SmRMSDDDSwzNAYQ6Rg== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + babel-runtime@6.6.1: version "6.6.1" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.6.1.tgz#788b94b6f634e25b91bd6c5df72d467457afb000" + resolved "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.6.1.tgz" integrity sha512-5pdhO3jaxqh9L42oBfbrqy58swDhciM47sRGoODURdRxwfiqttEvK87LX27W/PYY6f4cJt2mEdyoLcr/+cM/iw== dependencies: core-js "^2.1.0" backoff@~2.5.0: version "2.5.0" - resolved "https://registry.yarnpkg.com/backoff/-/backoff-2.5.0.tgz#f616eda9d3e4b66b8ca7fca79f695722c5f8e26f" + resolved "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz" integrity sha512-wC5ihrnUXmR2douXmXLCe5O3zg3GKIyvRi/hi58a/XyRxVI+3/yM0PYueQOZXPXQ9pxBislYkw+sF9b7C/RuMA== dependencies: precond "0.2" balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base64-js@^1.0.2: version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== bcrypt-pbkdf@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== dependencies: tweetnacl "^0.14.3" binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + version "2.3.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== bluebird@^3.5.1: version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -body-parser@1.20.1: - version "1.20.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" - integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" - -body-parser@^1.15.1: - version "1.20.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" - integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== +body-parser@^1.15.1, body-parser@1.20.3: + version "1.20.3" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz" + integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== dependencies: bytes "3.1.2" content-type "~1.0.5" @@ -908,39 +904,56 @@ body-parser@^1.15.1: http-errors "2.0.0" iconv-lite "0.4.24" on-finished "2.4.1" - qs "6.11.0" + qs "6.13.0" raw-body "2.5.2" type-is "~1.6.18" unpipe "1.0.0" brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + version "3.0.3" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: - fill-range "^7.0.1" + fill-range "^7.1.1" -browser-stdout@1.3.1: +browser-stdout@^1.3.1: version "1.3.1" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== +browserslist@^4.24.0, "browserslist@>= 4.21.0": + version "4.24.4" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz" + integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A== + dependencies: + caniuse-lite "^1.0.30001688" + electron-to-chromium "^1.5.73" + node-releases "^2.0.19" + update-browserslist-db "^1.1.1" + buffer-equal-constant-time@1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + resolved "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz" integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== buffer@4.9.2: version "4.9.2" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + resolved "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz" integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== dependencies: base64-js "^1.0.2" @@ -948,15 +961,15 @@ buffer@4.9.2: isarray "^1.0.0" builtins@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" - integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== + version "5.1.0" + resolved "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz" + integrity sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg== dependencies: semver "^7.0.0" bunyan@^1.8.12: version "1.8.15" - resolved "https://registry.yarnpkg.com/bunyan/-/bunyan-1.8.15.tgz#8ce34ca908a17d0776576ca1b2f6cbd916e93b46" + resolved "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz" integrity sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig== optionalDependencies: dtrace-provider "~0.8" @@ -966,54 +979,80 @@ bunyan@^1.8.12: busboy@^1.6.0: version "1.6.0" - resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" + resolved "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz" integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== dependencies: streamsearch "^1.1.0" bytes@3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -caching-transform@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-3.0.2.tgz#601d46b91eca87687a281e71cef99791b0efca70" - integrity sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w== +caching-transform@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz" + integrity sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA== dependencies: - hasha "^3.0.0" - make-dir "^2.0.0" - package-hash "^3.0.0" - write-file-atomic "^2.4.2" + hasha "^5.0.0" + make-dir "^3.0.0" + package-hash "^4.0.0" + write-file-atomic "^3.0.0" -call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.6.tgz#6c46675fc7a5e9de82d75a233d586c8b7ac0d931" - integrity sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg== +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== dependencies: es-errors "^1.3.0" function-bind "^1.1.2" - get-intrinsic "^1.2.3" - set-function-length "^1.2.0" + +call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.7, call-bind@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz" + integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-define-property "^1.0.0" + get-intrinsic "^1.2.4" + set-function-length "^1.2.2" + +call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" callsites@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camelcase@^5.0.0: +camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== +camelcase@^6.0.0: + version "6.3.0" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001688: + version "1.0.30001703" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001703.tgz" + integrity sha512-kRlAGTRWgPsOj7oARC9m1okJEXdL/8fekFVcxA8Hl7GH4r/sN4OJn/i6Flde373T50KS7Y37oFbMwlE8+F42kQ== + caseless@~0.12.0: version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz" integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== chai-http@^4.2.1: version "4.4.0" - resolved "https://registry.yarnpkg.com/chai-http/-/chai-http-4.4.0.tgz#bb8c346caa25b3c76118c68f7a7cecc0493669b8" + resolved "https://registry.npmjs.org/chai-http/-/chai-http-4.4.0.tgz" integrity sha512-uswN3rZpawlRaa5NiDUHcDZ3v2dw5QgLyAwnQ2tnVNuP7CwIsOFuYJ0xR1WiR7ymD4roBnJIzOUep7w9jQMFJA== dependencies: "@types/chai" "4" @@ -1026,9 +1065,9 @@ chai-http@^4.2.1: superagent "^8.0.9" chai@^4.2.0: - version "4.4.1" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.4.1.tgz#3603fa6eba35425b0f2ac91a009fe924106e50d1" - integrity sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g== + version "4.5.0" + resolved "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz" + integrity sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw== dependencies: assertion-error "^1.1.0" check-error "^1.0.3" @@ -1036,11 +1075,11 @@ chai@^4.2.0: get-func-name "^2.0.2" loupe "^2.3.6" pathval "^1.1.1" - type-detect "^4.0.8" + type-detect "^4.1.0" chalk@^1.0.0: version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== dependencies: ansi-styles "^2.2.1" @@ -1049,18 +1088,17 @@ chalk@^1.0.0: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" + ansi-styles "^4.1.0" + supports-color "^7.1.0" -chalk@^4.0.0: +chalk@^4.1.0: version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" @@ -1068,19 +1106,19 @@ chalk@^4.0.0: charset@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/charset/-/charset-1.0.1.tgz#8d59546c355be61049a8fa9164747793319852bd" + resolved "https://registry.npmjs.org/charset/-/charset-1.0.1.tgz" integrity sha512-6dVyOOYjpfFcL1Y4qChrAoQLRHvj2ziyhcm0QJlhOcAhykL/k1kTUPbeo+87MNRTRdk2OIIsIXbuF3x2wi5EXg== check-error@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" + resolved "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz" integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== dependencies: get-func-name "^2.0.2" -chokidar@^3.5.2: +chokidar@^3.5.2, chokidar@^3.5.3: version "3.6.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: anymatch "~3.1.2" @@ -1093,63 +1131,68 @@ chokidar@^3.5.2: optionalDependencies: fsevents "~2.3.2" -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" cliui@^8.0.1: version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: string-width "^4.2.0" strip-ansi "^6.0.1" wrap-ansi "^7.0.0" -clone@2.x, clone@^2.1.2: +clone@^2.1.2, clone@2.x: version "2.1.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + resolved "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz" integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== codependency@0.1.4: version "0.1.4" - resolved "https://registry.yarnpkg.com/codependency/-/codependency-0.1.4.tgz#d1763ab7264bd70c91d9626e98862d3792bf8d4a" + resolved "https://registry.npmjs.org/codependency/-/codependency-0.1.4.tgz" integrity sha512-26yAvd3+17xSfDADtnzpnL5GK+8+x4QeZ3DegekkHyno6LWeHqXuSU7q8w/IrAur7SY6ISPApOWtWTfuIF0Xpg== dependencies: semver "5.0.1" -color-convert@^1.9.0, color-convert@^1.9.3: +color-convert@^1.9.3: version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" -color-name@1.1.3: +color-name@^1.0.0, color-name@1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== -color-name@^1.0.0, color-name@~1.1.4: +color-name@~1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== color-string@^1.6.0: version "1.9.1" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz" integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== dependencies: color-name "^1.0.0" @@ -1157,7 +1200,7 @@ color-string@^1.6.0: color@^3.1.3: version "3.2.1" - resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" + resolved "https://registry.npmjs.org/color/-/color-3.2.1.tgz" integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== dependencies: color-convert "^1.9.3" @@ -1165,7 +1208,7 @@ color@^3.1.3: colorspace@1.1.x: version "1.1.4" - resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.4.tgz#8d442d1186152f60453bf8070cd66eb364e59243" + resolved "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz" integrity sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w== dependencies: color "^3.1.3" @@ -1173,121 +1216,102 @@ colorspace@1.1.x: combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" commander@^2.20.3: version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== commondir@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== compare-versions@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-6.1.0.tgz#3f2131e3ae93577df111dba133e6db876ffe127a" - integrity sha512-LNZQXhqUvqUTotpZ00qLSaify3b4VFD588aRr8MKFw4CMUr98ytzCW5wDH5qx/DEY5kCDXcbcRuCqL0szEf2tg== + version "6.1.1" + resolved "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz" + integrity sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg== component-emitter@^1.2.0, component-emitter@^1.3.0: version "1.3.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.1.tgz#ef1d5796f7d93f135ee6fb684340b26403c97d17" + resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz" integrity sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ== concat-map@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== config@^3.0.1: - version "3.3.11" - resolved "https://registry.yarnpkg.com/config/-/config-3.3.11.tgz#009e802631363e456d4cf57767a65c1549069ba2" - integrity sha512-Dhn63ZoWCW5EMg4P0Sl/XNsj/7RLiUIA1x1npCy+m2cRwRHzLnt3UtYtxRDMZW/6oOMdWhCzaGYkOcajGgrAOA== + version "3.3.12" + resolved "https://registry.npmjs.org/config/-/config-3.3.12.tgz" + integrity sha512-Vmx389R/QVM3foxqBzXO8t2tUikYZP64Q6vQxGrsMpREeJc/aWRnPRERXWsYzOHAumx/AOoILWe6nU3ZJL+6Sw== dependencies: json5 "^2.2.3" content-disposition@0.5.4: version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== dependencies: safe-buffer "5.2.1" content-type@~1.0.4, content-type@~1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== -convert-source-map@^1.6.0: +convert-source-map@^1.7.0: version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + cookie-signature@1.0.6: version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== +cookie@0.7.1: + version "0.7.1" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz" + integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== cookiejar@^2.1.0, cookiejar@^2.1.4: version "2.1.4" - resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.4.tgz#ee669c1fea2cf42dc31585469d193fef0d65771b" + resolved "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz" integrity sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw== core-js@^2.1.0: version "2.6.12" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" + resolved "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz" integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== -core-util-is@1.0.2: +core-util-is@~1.0.0, core-util-is@1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - cors@^2.8.5: version "2.8.5" - resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== dependencies: object-assign "^4" vary "^1" -cp-file@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/cp-file/-/cp-file-6.2.0.tgz#40d5ea4a1def2a9acdd07ba5c0b0246ef73dc10d" - integrity sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA== - dependencies: - graceful-fs "^4.1.2" - make-dir "^2.0.0" - nested-error-stacks "^2.0.0" - pify "^4.0.1" - safe-buffer "^5.0.1" - -cross-spawn@^4: - version "4.0.2" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" - integrity sha512-yAXz/pA1tD8Gtg2S98Ekf/sewp3Lcp3YoFKJ4Hkp5h5yLWnKVTDU0kwjKJ8NDCYcfTLfyGkzTikst+jWypT1iA== - dependencies: - lru-cache "^4.0.1" - which "^1.2.9" - -cross-spawn@^7.0.2: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3, cross-spawn@^7.0.6: + version "7.0.6" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" @@ -1295,87 +1319,161 @@ cross-spawn@^7.0.2: cssfilter@0.0.10: version "0.0.10" - resolved "https://registry.yarnpkg.com/cssfilter/-/cssfilter-0.0.10.tgz#c6d2672632a2e5c83e013e6864a42ce8defd20ae" + resolved "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz" integrity sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw== cssstyle@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-3.0.0.tgz#17ca9c87d26eac764bb8cfd00583cff21ce0277a" + resolved "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz" integrity sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg== dependencies: rrweb-cssom "^0.6.0" dashdash@^1.12.0: version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== dependencies: assert-plus "^1.0.0" data-urls@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-4.0.0.tgz#333a454eca6f9a5b7b0f1013ff89074c3f522dd4" + resolved "https://registry.npmjs.org/data-urls/-/data-urls-4.0.0.tgz" integrity sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g== dependencies: abab "^2.0.6" whatwg-mimetype "^3.0.0" whatwg-url "^12.0.0" -debug@2.6.9, debug@^2.2.0: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== +data-view-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz" + integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== dependencies: - ms "2.0.0" + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" -debug@3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== +data-view-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz" + integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== dependencies: - ms "^2.1.1" + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== +data-view-byte-offset@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz" + integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== dependencies: - ms "2.1.2" + call-bound "^1.0.2" + es-errors "^1.3.0" + is-data-view "^1.0.1" -debug@=3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== +debug@^2.2.0, debug@2.6.9: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^3.1.0, debug@^3.2.7: +debug@^3.1.0: version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" -decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" -decimal.js@^10.4.3: - version "10.4.3" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" - integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== +debug@^4: + version "4.4.0" + resolved "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== + dependencies: + ms "^2.1.3" -deep-eql@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" - integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== +debug@^4.1.0, debug@4: + version "4.4.0" + resolved "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== dependencies: - type-detect "^4.0.0" + ms "^2.1.3" + +debug@^4.1.1: + version "4.4.0" + resolved "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== + dependencies: + ms "^2.1.3" + +debug@^4.3.1: + version "4.4.0" + resolved "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== + dependencies: + ms "^2.1.3" + +debug@^4.3.2: + version "4.4.0" + resolved "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== + dependencies: + ms "^2.1.3" + +debug@^4.3.4: + version "4.4.0" + resolved "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== + dependencies: + ms "^2.1.3" + +debug@^4.3.5: + version "4.4.0" + resolved "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== + dependencies: + ms "^2.1.3" + +debug@=3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== + +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +decimal.js@^10.4.3: + version "10.5.0" + resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz" + integrity sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw== + +deep-eql@^4.1.3: + version "4.1.4" + resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz" + integrity sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg== + dependencies: + type-detect "^4.0.0" deep-equal@^2.2.0: version "2.2.3" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.3.tgz#af89dafb23a396c7da3e862abc0be27cf51d56e1" + resolved "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz" integrity sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA== dependencies: array-buffer-byte-length "^1.0.0" @@ -1399,29 +1497,28 @@ deep-equal@^2.2.0: deep-is@^0.1.3: version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== -default-require-extensions@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-2.0.0.tgz#f5f8fbb18a7d6d50b21f641f649ebb522cfe24f7" - integrity sha512-B0n2zDIXpzLzKeoEozorDSa1cHc1t0NjmxP0zuAxbizNU2MBqYJJKYXrrFdKuQliojXynrxgd7l4ahfg/+aA5g== +default-require-extensions@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz" + integrity sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw== dependencies: - strip-bom "^3.0.0" + strip-bom "^4.0.0" -define-data-property@^1.0.1, define-data-property@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.2.tgz#f3c33b4f0102360cd7c0f5f28700f5678510b63a" - integrity sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g== +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== dependencies: + es-define-property "^1.0.0" es-errors "^1.3.0" - get-intrinsic "^1.2.2" gopd "^1.0.1" - has-property-descriptors "^1.0.1" -define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: +define-properties@^1.1.3, define-properties@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== dependencies: define-data-property "^1.0.1" @@ -1430,73 +1527,89 @@ define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.2.0, de delayed-stream@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== depd@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== destroy@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== dezalgo@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.4.tgz#751235260469084c132157dfa857f386d4c33d81" + resolved "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz" integrity sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig== dependencies: asap "^2.0.0" wrappy "1" -diff@3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== +diff@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz" + integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== doctrine@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== dependencies: esutils "^2.0.2" doctrine@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" domexception@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" + resolved "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz" integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== dependencies: webidl-conversions "^7.0.0" dompurify@^3.0.2: - version "3.0.8" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.0.8.tgz#e0021ab1b09184bc8af7e35c7dd9063f43a8a437" - integrity sha512-b7uwreMYL2eZhrSCRC4ahLTeZcPZxSmYfmcQGXGkXiZSNW1X85v+SDM5KsWcpivIiUBH47Ji7NtyUdpLeF5JZQ== + version "3.2.4" + resolved "https://registry.npmjs.org/dompurify/-/dompurify-3.2.4.tgz" + integrity sha512-ysFSFEDVduQpyhzAob/kkuJjf5zWkZD8/A9ywSp1byueyuCfHamrCBa14/Oc2iiB0e51B+NpxSl5gmzn+Ms/mg== + optionalDependencies: + "@types/trusted-types" "^2.0.7" dotenv@^8.2.0: version "8.6.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz" integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== dtrace-provider@~0.8: version "0.8.8" - resolved "https://registry.yarnpkg.com/dtrace-provider/-/dtrace-provider-0.8.8.tgz#2996d5490c37e1347be263b423ed7b297fb0d97e" + resolved "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz" integrity sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg== dependencies: nan "^2.14.0" +dunder-proto@^1.0.0, dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + ecc-jsbn@~0.1.1: version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== dependencies: jsbn "~0.1.0" @@ -1504,120 +1617,142 @@ ecc-jsbn@~0.1.1: ecdsa-sig-formatter@1.0.11: version "1.0.11" - resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" + resolved "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz" integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== dependencies: safe-buffer "^5.0.1" ee-first@1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== elasticsearch@^16.7.3: version "16.7.3" - resolved "https://registry.yarnpkg.com/elasticsearch/-/elasticsearch-16.7.3.tgz#bf0e1cc129ab2e0f06911953a1b1f3c740715fab" + resolved "https://registry.npmjs.org/elasticsearch/-/elasticsearch-16.7.3.tgz" integrity sha512-e9kUNhwnIlu47fGAr4W6yZJbkpsgQJB0TqNK8rCANe1J4P65B1sGnbCFTgcKY3/dRgCWnuP1AJ4obvzW604xEQ== dependencies: agentkeepalive "^3.4.1" chalk "^1.0.0" lodash "^4.17.10" -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== +electron-to-chromium@^1.5.73: + version "1.5.114" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.114.tgz" + integrity sha512-DFptFef3iktoKlFQK/afbo274/XNWD00Am0xa7M8FZUepHlHT8PEuiNBoRfFHbH1okqN58AlhbJ4QTkcnXorjA== emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + enabled@2.0.x: version "2.0.0" - resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" + resolved "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz" integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== encodeurl@~1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== -entities@^4.4.0: +encodeurl@~2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== + +entities@^4.5.0: version "4.5.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== entities@~3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" + resolved "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz" integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== error-ex@^1.3.1: version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" -es-abstract@^1.22.1, es-abstract@^1.22.3: - version "1.22.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" - integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== - dependencies: - array-buffer-byte-length "^1.0.0" - arraybuffer.prototype.slice "^1.0.2" - available-typed-arrays "^1.0.5" - call-bind "^1.0.5" - es-set-tostringtag "^2.0.1" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.6" - get-intrinsic "^1.2.2" - get-symbol-description "^1.0.0" - globalthis "^1.0.3" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" +es-abstract@^1.17.5, es-abstract@^1.23.2, es-abstract@^1.23.3, es-abstract@^1.23.5, es-abstract@^1.23.6, es-abstract@^1.23.9: + version "1.23.9" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz" + integrity sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA== + dependencies: + array-buffer-byte-length "^1.0.2" + arraybuffer.prototype.slice "^1.0.4" + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.3" + data-view-buffer "^1.0.2" + data-view-byte-length "^1.0.2" + data-view-byte-offset "^1.0.1" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-set-tostringtag "^2.1.0" + es-to-primitive "^1.3.0" + function.prototype.name "^1.1.8" + get-intrinsic "^1.2.7" + get-proto "^1.0.0" + get-symbol-description "^1.1.0" + globalthis "^1.0.4" + gopd "^1.2.0" + has-property-descriptors "^1.0.2" + has-proto "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + internal-slot "^1.1.0" + is-array-buffer "^3.0.5" is-callable "^1.2.7" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-typed-array "^1.1.12" - is-weakref "^1.0.2" - object-inspect "^1.13.1" + is-data-view "^1.0.2" + is-regex "^1.2.1" + is-shared-array-buffer "^1.0.4" + is-string "^1.1.1" + is-typed-array "^1.1.15" + is-weakref "^1.1.0" + math-intrinsics "^1.1.0" + object-inspect "^1.13.3" object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.1" - safe-array-concat "^1.0.1" - safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.8" - string.prototype.trimend "^1.0.7" - string.prototype.trimstart "^1.0.7" - typed-array-buffer "^1.0.0" - typed-array-byte-length "^1.0.0" - typed-array-byte-offset "^1.0.0" - typed-array-length "^1.0.4" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.13" - -es-array-method-boxes-properly@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" - integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + object.assign "^4.1.7" + own-keys "^1.0.1" + regexp.prototype.flags "^1.5.3" + safe-array-concat "^1.1.3" + safe-push-apply "^1.0.0" + safe-regex-test "^1.1.0" + set-proto "^1.0.0" + string.prototype.trim "^1.2.10" + string.prototype.trimend "^1.0.9" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.3" + typed-array-byte-length "^1.0.3" + typed-array-byte-offset "^1.0.4" + typed-array-length "^1.0.7" + unbox-primitive "^1.1.0" + which-typed-array "^1.1.18" + +es-define-property@^1.0.0, es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== -es-errors@^1.0.0, es-errors@^1.1.0, es-errors@^1.2.1, es-errors@^1.3.0: +es-errors@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== es-get-iterator@^1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" + resolved "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz" integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== dependencies: call-bind "^1.0.2" @@ -1630,80 +1765,127 @@ es-get-iterator@^1.1.3: isarray "^2.0.5" stop-iteration-iterator "^1.0.0" -es-iterator-helpers@^1.0.12: - version "1.0.16" - resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.16.tgz#495756d38dd5f9cc8e3091e913ee790d353e6f28" - integrity sha512-CREG2A9Vq7bpDRnldhFcMKuKArvkZtsH6Y0DHOHVg49qhf+LD8uEdUM3OkOAICv0EziGtDEnQtqY2/mfBILpFw== +es-iterator-helpers@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz" + integrity sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w== dependencies: - asynciterator.prototype "^1.0.0" - call-bind "^1.0.6" + call-bind "^1.0.8" + call-bound "^1.0.3" define-properties "^1.2.1" - es-abstract "^1.22.3" + es-abstract "^1.23.6" es-errors "^1.3.0" - es-set-tostringtag "^2.0.2" + es-set-tostringtag "^2.0.3" function-bind "^1.1.2" - get-intrinsic "^1.2.4" - globalthis "^1.0.3" - has-property-descriptors "^1.0.1" - has-proto "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.7" - iterator.prototype "^1.1.2" - safe-array-concat "^1.1.0" + get-intrinsic "^1.2.6" + globalthis "^1.0.4" + gopd "^1.2.0" + has-property-descriptors "^1.0.2" + has-proto "^1.2.0" + has-symbols "^1.1.0" + internal-slot "^1.1.0" + iterator.prototype "^1.1.4" + safe-array-concat "^1.1.3" + +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" -es-set-tostringtag@^2.0.1, es-set-tostringtag@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" - integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== +es-set-tostringtag@^2.0.3, es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== dependencies: - get-intrinsic "^1.2.2" - has-tostringtag "^1.0.0" - hasown "^2.0.0" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" -es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" - integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== +es-shim-unscopables@^1.0.2: + version "1.1.0" + resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz" + integrity sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw== dependencies: - hasown "^2.0.0" + hasown "^2.0.2" -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== +es-to-primitive@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz" + integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" + is-callable "^1.2.7" + is-date-object "^1.0.5" + is-symbol "^1.0.4" es6-error@^4.0.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" + resolved "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz" integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== -escalade@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" - integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== +esbuild-register@3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.6.0.tgz" + integrity sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg== + dependencies: + debug "^4.3.4" + +"esbuild@>=0.12 <1": + version "0.25.1" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.25.1.tgz" + integrity sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ== + optionalDependencies: + "@esbuild/aix-ppc64" "0.25.1" + "@esbuild/android-arm" "0.25.1" + "@esbuild/android-arm64" "0.25.1" + "@esbuild/android-x64" "0.25.1" + "@esbuild/darwin-arm64" "0.25.1" + "@esbuild/darwin-x64" "0.25.1" + "@esbuild/freebsd-arm64" "0.25.1" + "@esbuild/freebsd-x64" "0.25.1" + "@esbuild/linux-arm" "0.25.1" + "@esbuild/linux-arm64" "0.25.1" + "@esbuild/linux-ia32" "0.25.1" + "@esbuild/linux-loong64" "0.25.1" + "@esbuild/linux-mips64el" "0.25.1" + "@esbuild/linux-ppc64" "0.25.1" + "@esbuild/linux-riscv64" "0.25.1" + "@esbuild/linux-s390x" "0.25.1" + "@esbuild/linux-x64" "0.25.1" + "@esbuild/netbsd-arm64" "0.25.1" + "@esbuild/netbsd-x64" "0.25.1" + "@esbuild/openbsd-arm64" "0.25.1" + "@esbuild/openbsd-x64" "0.25.1" + "@esbuild/sunos-x64" "0.25.1" + "@esbuild/win32-arm64" "0.25.1" + "@esbuild/win32-ia32" "0.25.1" + "@esbuild/win32-x64" "0.25.1" + +escalade@^3.1.1, escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== escape-html@~1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.2: version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== escodegen@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" + resolved "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz" integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== dependencies: esprima "^4.0.1" @@ -1714,64 +1896,66 @@ escodegen@^2.0.0: eslint-config-standard-jsx@^11.0.0: version "11.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-standard-jsx/-/eslint-config-standard-jsx-11.0.0.tgz#70852d395731a96704a592be5b0bfaccfeded239" + resolved "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-11.0.0.tgz" integrity sha512-+1EV/R0JxEK1L0NGolAr8Iktm3Rgotx3BKwgaX+eAuSX8D952LULKtjgZD3F+e6SvibONnhLwoTi9DPxN5LvvQ== eslint-config-standard@17.1.0: version "17.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz#40ffb8595d47a6b242e07cbfd49dc211ed128975" + resolved "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz" integrity sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q== eslint-import-resolver-node@^0.3.9: version "0.3.9" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz" integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== dependencies: debug "^3.2.7" is-core-module "^2.13.0" resolve "^1.22.4" -eslint-module-utils@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" - integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== +eslint-module-utils@^2.12.0: + version "2.12.0" + resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz" + integrity sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg== dependencies: debug "^3.2.7" eslint-plugin-es@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz#f0822f0c18a535a97c3e714e89f88586a7641ec9" + resolved "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz" integrity sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ== dependencies: eslint-utils "^2.0.0" regexpp "^3.0.0" -eslint-plugin-import@^2.27.5: - version "2.29.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" - integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== +eslint-plugin-import@^2.25.2, eslint-plugin-import@^2.27.5: + version "2.31.0" + resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz" + integrity sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A== dependencies: - array-includes "^3.1.7" - array.prototype.findlastindex "^1.2.3" + "@rtsao/scc" "^1.1.0" + array-includes "^3.1.8" + array.prototype.findlastindex "^1.2.5" array.prototype.flat "^1.3.2" array.prototype.flatmap "^1.3.2" debug "^3.2.7" doctrine "^2.1.0" eslint-import-resolver-node "^0.3.9" - eslint-module-utils "^2.8.0" - hasown "^2.0.0" - is-core-module "^2.13.1" + eslint-module-utils "^2.12.0" + hasown "^2.0.2" + is-core-module "^2.15.1" is-glob "^4.0.3" minimatch "^3.1.2" - object.fromentries "^2.0.7" - object.groupby "^1.0.1" - object.values "^1.1.7" + object.fromentries "^2.0.8" + object.groupby "^1.0.3" + object.values "^1.2.0" semver "^6.3.1" + string.prototype.trimend "^1.0.8" tsconfig-paths "^3.15.0" -eslint-plugin-n@^15.7.0: +"eslint-plugin-n@^15.0.0 || ^16.0.0 ", eslint-plugin-n@^15.7.0: version "15.7.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz#e29221d8f5174f84d18f2eb94765f2eeea033b90" + resolved "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz" integrity sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q== dependencies: builtins "^5.0.1" @@ -1783,36 +1967,38 @@ eslint-plugin-n@^15.7.0: resolve "^1.22.1" semver "^7.3.8" -eslint-plugin-promise@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz#269a3e2772f62875661220631bd4dafcb4083816" - integrity sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig== +eslint-plugin-promise@^6.0.0, eslint-plugin-promise@^6.1.1: + version "6.6.0" + resolved "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.6.0.tgz" + integrity sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ== -eslint-plugin-react@^7.32.2: - version "7.33.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz#69ee09443ffc583927eafe86ffebb470ee737608" - integrity sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw== +eslint-plugin-react@^7.28.0, eslint-plugin-react@^7.36.1: + version "7.37.4" + resolved "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.4.tgz" + integrity sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ== dependencies: - array-includes "^3.1.6" - array.prototype.flatmap "^1.3.1" - array.prototype.tosorted "^1.1.1" + array-includes "^3.1.8" + array.prototype.findlast "^1.2.5" + array.prototype.flatmap "^1.3.3" + array.prototype.tosorted "^1.1.4" doctrine "^2.1.0" - es-iterator-helpers "^1.0.12" + es-iterator-helpers "^1.2.1" estraverse "^5.3.0" + hasown "^2.0.2" jsx-ast-utils "^2.4.1 || ^3.0.0" minimatch "^3.1.2" - object.entries "^1.1.6" - object.fromentries "^2.0.6" - object.hasown "^1.1.2" - object.values "^1.1.6" + object.entries "^1.1.8" + object.fromentries "^2.0.8" + object.values "^1.2.1" prop-types "^15.8.1" - resolve "^2.0.0-next.4" + resolve "^2.0.0-next.5" semver "^6.3.1" - string.prototype.matchall "^4.0.8" + string.prototype.matchall "^4.0.12" + string.prototype.repeat "^1.0.0" eslint-scope@^7.2.2: version "7.2.2" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz" integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== dependencies: esrecurse "^4.3.0" @@ -1820,43 +2006,43 @@ eslint-scope@^7.2.2: eslint-utils@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz" integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== dependencies: eslint-visitor-keys "^1.1.0" eslint-utils@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== dependencies: eslint-visitor-keys "^2.0.0" eslint-visitor-keys@^1.1.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== eslint-visitor-keys@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: +eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint@^8.41.0: - version "8.56.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.56.0.tgz#4957ce8da409dc0809f99ab07a1b94832ab74b15" - integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ== +"eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9", "eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^7.0.0 || ^8.0.0 || ^9.0.0", eslint@^8.0.1, eslint@^8.41.0, eslint@^8.8.0, eslint@>=4.19.1, eslint@>=5, eslint@>=7.0.0: + version "8.57.1" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz" + integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.56.0" - "@humanwhocodes/config-array" "^0.11.13" + "@eslint/js" "8.57.1" + "@humanwhocodes/config-array" "^0.13.0" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" "@ungap/structured-clone" "^1.2.0" @@ -1893,7 +2079,7 @@ eslint@^8.41.0: espree@^9.6.0, espree@^9.6.1: version "9.6.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz" integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== dependencies: acorn "^8.9.0" @@ -1902,98 +2088,93 @@ espree@^9.6.0, espree@^9.6.1: esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.4.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + version "1.6.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== dependencies: estraverse "^5.1.0" esrecurse@^4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== etag@~1.8.1: version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== eventemitter2@^6.4.4: version "6.4.9" - resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.9.tgz#41f2750781b4230ed58827bc119d293471ecb125" + resolved "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz" integrity sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg== events@1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + resolved "https://registry.npmjs.org/events/-/events-1.1.1.tgz" integrity sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw== express-fileupload@^1.1.6: - version "1.4.3" - resolved "https://registry.yarnpkg.com/express-fileupload/-/express-fileupload-1.4.3.tgz#32cbb405ba12f541d445838464e081defba4ef61" - integrity sha512-vRzZo2YELm68DfR/CX8RMXgeK9BTAANxigrKACPjCXFGEzkCt/QWbqaIXP3W61uaX/hLj0CAo3/EVelpSQXkqA== + version "1.5.1" + resolved "https://registry.npmjs.org/express-fileupload/-/express-fileupload-1.5.1.tgz" + integrity sha512-LsYG1ALXEB7vlmjuSw8ABeOctMp8a31aUC5ZF55zuz7O2jLFnmJYrCv10py357ky48aEoBQ/9bVXgFynjvaPmA== dependencies: busboy "^1.6.0" express-interceptor@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/express-interceptor/-/express-interceptor-1.2.0.tgz#33460a8e11dce7e5a022caf555d377e45ddb822a" + resolved "https://registry.npmjs.org/express-interceptor/-/express-interceptor-1.2.0.tgz" integrity sha512-fCbcJv8ZwabDg0M/3PmHUxfr/WKHGMpAicR9TfGdhANV4M1GBDSrBTenHIK3aegyRN5S6eDwlvyNFiLynnc19w== dependencies: debug "^2.2.0" -express-unless@*: - version "2.1.3" - resolved "https://registry.yarnpkg.com/express-unless/-/express-unless-2.1.3.tgz#f951c6cca52a24da3de32d42cfd4db57bc0f9a2e" - integrity sha512-wj4tLMyCVYuIIKHGt0FhCtIViBcwzWejX0EjNxveAa6dG+0XBCQhMbx+PnkLkFCxLC69qoFrxds4pIyL88inaQ== - -express@^4.15.4: - version "4.18.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" - integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== +express@^4.15.4, "express@>=4.0.0 || >=5.0.0-beta": + version "4.21.2" + resolved "https://registry.npmjs.org/express/-/express-4.21.2.tgz" + integrity sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA== dependencies: accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.20.1" + body-parser "1.20.3" content-disposition "0.5.4" content-type "~1.0.4" - cookie "0.5.0" + cookie "0.7.1" cookie-signature "1.0.6" debug "2.6.9" depd "2.0.0" - encodeurl "~1.0.2" + encodeurl "~2.0.0" escape-html "~1.0.3" etag "~1.8.1" - finalhandler "1.2.0" + finalhandler "1.3.1" fresh "0.5.2" http-errors "2.0.0" - merge-descriptors "1.0.1" + merge-descriptors "1.0.3" methods "~1.1.2" on-finished "2.4.1" parseurl "~1.3.3" - path-to-regexp "0.1.7" + path-to-regexp "0.1.12" proxy-addr "~2.0.7" - qs "6.11.0" + qs "6.13.0" range-parser "~1.2.1" safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" + send "0.19.0" + serve-static "1.16.2" setprototypeof "1.2.0" statuses "2.0.1" type-is "~1.6.18" @@ -2002,97 +2183,108 @@ express@^4.15.4: extend@^3.0.0, extend@~3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -extsprintf@1.3.0: +extsprintf@^1.2.0, extsprintf@1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== -extsprintf@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" - integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-json-stable-stringify@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@^2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fast-safe-stringify@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" + resolved "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz" integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== fastq@^1.6.0: - version "1.17.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" - integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== + version "1.19.1" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz" + integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== dependencies: reusify "^1.0.4" fecha@^4.2.0: version "4.2.3" - resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" + resolved "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz" integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== file-entry-cache@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: flat-cache "^3.0.4" -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== +finalhandler@1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz" + integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ== dependencies: debug "2.6.9" - encodeurl "~1.0.2" + encodeurl "~2.0.0" escape-html "~1.0.3" on-finished "2.4.1" parseurl "~1.3.3" statuses "2.0.1" unpipe "~1.0.0" -find-cache-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" - integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== +find-cache-dir@^3.2.0: + version "3.3.2" + resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== dependencies: commondir "^1.0.1" - make-dir "^2.0.0" - pkg-dir "^3.0.0" + make-dir "^3.0.2" + pkg-dir "^4.1.0" -find-up@3.0.0, find-up@^3.0.0: +find-up@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + resolved "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz" integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== dependencies: locate-path "^3.0.0" +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + find-up@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: locate-path "^6.0.0" @@ -2100,83 +2292,92 @@ find-up@^5.0.0: flat-cache@^3.0.4: version "3.2.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz" integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== dependencies: flatted "^3.2.9" keyv "^4.5.3" rimraf "^3.0.2" -flat@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.1.tgz#a392059cc382881ff98642f5da4dde0a959f309b" - integrity sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA== - dependencies: - is-buffer "~2.0.3" +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== flatted@^3.2.9: - version "3.2.9" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" - integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== + version "3.3.3" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz" + integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== fn.name@1.x.x: version "1.1.0" - resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" + resolved "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz" integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== +follow-redirects@^1.14.0, follow-redirects@^1.15.6: + version "1.15.9" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz" + integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== + follow-redirects@1.5.10: version "1.5.10" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz" integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== dependencies: debug "=3.1.0" -follow-redirects@^1.14.0: - version "1.15.5" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020" - integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== +for-each@^0.3.3, for-each@^0.3.5: + version "0.3.5" + resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz" + integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== + dependencies: + is-callable "^1.2.7" -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== +foreground-child@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz" + integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== dependencies: - is-callable "^1.1.3" + cross-spawn "^7.0.0" + signal-exit "^3.0.2" -foreground-child@^1.5.6: - version "1.5.6" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-1.5.6.tgz#4fd71ad2dfde96789b980a5c0a295937cb2f5ce9" - integrity sha512-3TOY+4TKV0Ml83PXJQY+JFQaHNV38lzQDIzzXYg1kWdBLenGgoZhAs0CKgzI31vi2pWEpQMq/Yi4bpKwCPkw7g== +foreground-child@^3.1.0, foreground-child@^3.3.0: + version "3.3.1" + resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz" + integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== dependencies: - cross-spawn "^4" - signal-exit "^3.0.0" + cross-spawn "^7.0.6" + signal-exit "^4.0.1" forever-agent@~0.6.1: version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== form-data@^2.3.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" - integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== + version "2.5.3" + resolved "https://registry.npmjs.org/form-data/-/form-data-2.5.3.tgz" + integrity sha512-XHIrMD0NpDrNM/Ckf7XJiBbLl57KEhT3+i3yY+eWm+cqYZJQTZrKo8Y8AWKnuV5GT4scfuUGt9LzNoIx3dU1nQ== dependencies: asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" + combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + mime-types "^2.1.35" + safe-buffer "^5.2.1" form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + version "4.0.2" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz" + integrity sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" mime-types "^2.1.12" form-data@~2.3.2: version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + resolved "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz" integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== dependencies: asynckit "^0.4.0" @@ -2185,12 +2386,12 @@ form-data@~2.3.2: formidable@^1.2.0: version "1.2.6" - resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.6.tgz#d2a51d60162bbc9b4a055d8457a7c75315d1a168" + resolved "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz" integrity sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ== formidable@^2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/formidable/-/formidable-2.1.2.tgz#fa973a2bec150e4ce7cac15589d7a25fc30ebd89" + resolved "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz" integrity sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g== dependencies: dezalgo "^1.0.4" @@ -2200,131 +2401,192 @@ formidable@^2.1.2: forwarded@0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== fresh@0.5.2: version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== +fromentries@^1.2.0: + version "1.3.2" + resolved "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz" + integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== + fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.1, function-bind@^1.1.2: +function-bind@^1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" - integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== +function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: + version "1.1.8" + resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz" + integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" functions-have-names "^1.2.3" + hasown "^2.0.2" + is-callable "^1.2.7" functions-have-names@^1.2.3: version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== +gensync@^1.0.0-beta.2: + 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== + get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-func-name@^2.0.1, get-func-name@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" + resolved "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz" integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== -get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== +get-intrinsic@^1.1.3, get-intrinsic@^1.2.2, get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" es-errors "^1.3.0" + es-object-atoms "^1.1.1" function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== get-parameter-names@^0.3.0: version "0.3.0" - resolved "https://registry.yarnpkg.com/get-parameter-names/-/get-parameter-names-0.3.0.tgz#2d2237cd592e6c5b859ab2efdab435f008e5bb97" + resolved "https://registry.npmjs.org/get-parameter-names/-/get-parameter-names-0.3.0.tgz" integrity sha512-KkR1dX7U1TynXFkqveVE/XoRn9qRAsM2q4Eu2WsGTFzoaSdnNQEfxbcK+LMv8DcFoQQT9BFjNL+bf9ZyTLkWpg== +get-proto@^1.0.0, get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + get-stdin@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53" + resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz" integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg== -get-symbol-description@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" - integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== +get-symbol-description@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz" + integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== dependencies: - call-bind "^1.0.5" + call-bound "^1.0.3" es-errors "^1.3.0" - get-intrinsic "^1.2.4" + get-intrinsic "^1.2.6" getpass@^0.1.1: version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== dependencies: assert-plus "^1.0.0" glob-parent@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: is-glob "^4.0.3" glob-parent@~5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" -glob@7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== +glob@^10.4.5: + version "10.4.5" + resolved "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz" + integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" + +glob@^6.0.1: + version "6.0.4" + resolved "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz" + integrity sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A== + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.5: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.4" + minimatch "^3.1.1" once "^1.3.0" path-is-absolute "^1.0.0" -glob@^6.0.1: - version "6.0.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" - integrity sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A== +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: + fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "2 || 3" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.4: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.5, glob@^7.1.3: +glob@^7.1.6: version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" @@ -2336,53 +2598,47 @@ glob@^7.0.5, glob@^7.1.3: globals@^11.1.0: version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.19.0: version "13.24.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + resolved "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz" integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== dependencies: type-fest "^0.20.2" -globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== +globalthis@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== dependencies: - define-properties "^1.1.3" + define-properties "^1.2.1" + gopd "^1.0.1" -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" +gopd@^1.0.1, gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: +graceful-fs@^4.1.15: version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== graphemer@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== -growl@1.10.5: - version "1.10.5" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" - integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== - har-schema@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + resolved "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz" integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== har-validator@~5.1.3: version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + resolved "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz" integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== dependencies: ajv "^6.12.3" @@ -2390,119 +2646,107 @@ har-validator@~5.1.3: has-ansi@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + resolved "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz" integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== dependencies: ansi-regex "^2.0.0" -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== +has-bigints@^1.0.2: + version "1.1.0" + resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz" + integrity sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg== has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: - get-intrinsic "^1.2.2" + es-define-property "^1.0.0" -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== +has-proto@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz" + integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== + dependencies: + dunder-proto "^1.0.0" -has-symbols@^1.0.0, has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== -has-tostringtag@^1.0.0, has-tostringtag@^1.0.1: +has-tostringtag@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz" integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: has-symbols "^1.0.3" hash-it@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/hash-it/-/hash-it-6.0.0.tgz#188df5a8ca2f8e036690e35f2ef88bd9417ff334" + resolved "https://registry.npmjs.org/hash-it/-/hash-it-6.0.0.tgz" integrity sha512-KHzmSFx1KwyMPw0kXeeUD752q/Kfbzhy6dAZrjXV9kAIXGqzGvv8vhkUqj+2MGZldTo0IBpw6v7iWE7uxsvH0w== -hasha@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/hasha/-/hasha-3.0.0.tgz#52a32fab8569d41ca69a61ff1a214f8eb7c8bd39" - integrity sha512-w0Kz8lJFBoyaurBiNrIvxPqr/gJ6fOfSkpAPOepN3oECqGJag37xPbOv57izi/KP8auHgNYxn5fXtAb+1LsJ6w== +hasha@^5.0.0: + version "5.2.2" + resolved "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz" + integrity sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ== dependencies: - is-stream "^1.0.1" + is-stream "^2.0.0" + type-fest "^0.8.0" -hasown@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa" - integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA== +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" -he@1.2.0: +he@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== hexoid@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/hexoid/-/hexoid-1.0.0.tgz#ad10c6573fb907de23d9ec63a711267d9dc9bc18" + resolved "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz" integrity sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g== hoek@5.x.x: version "5.0.4" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-5.0.4.tgz#0f7fa270a1cafeb364a4b2ddfaa33f864e4157da" + resolved "https://registry.npmjs.org/hoek/-/hoek-5.0.4.tgz" integrity sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w== hoek@6.x.x: version "6.1.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-6.1.3.tgz#73b7d33952e01fe27a38b0457294b79dd8da242c" + resolved "https://registry.npmjs.org/hoek/-/hoek-6.1.3.tgz" integrity sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ== -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -hpagent@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/hpagent/-/hpagent-1.2.0.tgz#0ae417895430eb3770c03443456b8d90ca464903" - integrity sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA== - html-encoding-sniffer@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" + resolved "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz" integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== dependencies: whatwg-encoding "^2.0.0" html-escaper@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -http-aws-es@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/http-aws-es/-/http-aws-es-6.0.0.tgz#1528978d2bee718b8732dcdced0856efa747aeff" - integrity sha512-g+qp7J110/m4aHrR3iit4akAlnW0UljZ6oTq/rCcbsI8KP9x+95vqUtx49M2XQ2JMpwJio3B6gDYx+E8WDxqiA== - http-errors@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== dependencies: depd "2.0.0" @@ -2513,7 +2757,7 @@ http-errors@2.0.0: http-proxy-agent@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== dependencies: "@tootallnate/once" "1" @@ -2522,7 +2766,7 @@ http-proxy-agent@^4.0.1: http-proxy-agent@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz" integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== dependencies: "@tootallnate/once" "2" @@ -2531,7 +2775,7 @@ http-proxy-agent@^5.0.0: http-signature@~1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz" integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== dependencies: assert-plus "^1.0.0" @@ -2540,12 +2784,12 @@ http-signature@~1.2.0: http-status-codes@^1.3.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/http-status-codes/-/http-status-codes-1.4.0.tgz#6e4c15d16ff3a9e2df03b89f3a55e1aae05fb477" + resolved "https://registry.npmjs.org/http-status-codes/-/http-status-codes-1.4.0.tgz" integrity sha512-JrT3ua+WgH8zBD3HEJYbeEgnuQaAnUeRRko/YojPAJjGmIfGD3KPU/asLdsLwKjfxOmQe5nXMQ0pt/7MyapVbQ== https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: agent-base "6" @@ -2553,423 +2797,461 @@ https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1: humanize-ms@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== dependencies: ms "^2.0.0" iconv-lite@0.4.24: version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" iconv-lite@0.6.3: version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -ieee754@1.1.13: +ieee754@^1.1.4, ieee754@1.1.13: version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz" integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== -ieee754@^1.1.4: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - ignore-by-default@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" + resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz" integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== ignore@^5.1.1, ignore@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" - integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== + version "5.3.2" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + version "3.3.1" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz" + integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + inflight@^1.0.4: version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@~2.0.3: +inherits@^2.0.3, inherits@~2.0.3, inherits@2, inherits@2.0.4: version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -internal-slot@^1.0.4, internal-slot@^1.0.5, internal-slot@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" - integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== +internal-slot@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz" + integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== dependencies: es-errors "^1.3.0" - hasown "^2.0.0" - side-channel "^1.0.4" + hasown "^2.0.2" + side-channel "^1.1.0" ip-regex@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + resolved "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz" integrity sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw== ipaddr.js@1.9.1: version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== is-arguments@^1.0.4, is-arguments@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + version "1.2.0" + resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz" + integrity sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA== dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" + call-bound "^1.0.2" + has-tostringtag "^1.0.2" -is-array-buffer@^3.0.2, is-array-buffer@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" - integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== +is-array-buffer@^3.0.2, is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: + version "3.0.5" + resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz" + integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" + call-bind "^1.0.8" + call-bound "^1.0.3" + get-intrinsic "^1.2.6" is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-arrayish@^0.3.1: version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== is-async-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" - integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== + version "2.1.1" + resolved "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz" + integrity sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ== dependencies: - has-tostringtag "^1.0.0" + async-function "^1.0.0" + call-bound "^1.0.3" + get-proto "^1.0.1" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== +is-bigint@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz" + integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== dependencies: - has-bigints "^1.0.1" + has-bigints "^1.0.2" is-binary-path@~2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== +is-boolean-object@^1.2.1: + version "1.2.2" + resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz" + integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-buffer@~2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + call-bound "^1.0.3" + has-tostringtag "^1.0.2" -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: +is-callable@^1.2.7: version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.13.1: - version "2.13.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" - integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== +is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.15.1, is-core-module@^2.16.0: + version "2.16.1" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== dependencies: - hasown "^2.0.0" + hasown "^2.0.2" -is-date-object@^1.0.1, is-date-object@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== +is-data-view@^1.0.1, is-data-view@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz" + integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== + dependencies: + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + is-typed-array "^1.1.13" + +is-date-object@^1.0.5, is-date-object@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz" + integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== dependencies: - has-tostringtag "^1.0.0" + call-bound "^1.0.2" + has-tostringtag "^1.0.2" is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== -is-finalizationregistry@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6" - integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== +is-finalizationregistry@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz" + integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== dependencies: - call-bind "^1.0.2" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== + call-bound "^1.0.3" is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-generator-function@^1.0.10, is-generator-function@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + version "1.1.0" + resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz" + integrity sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ== dependencies: - has-tostringtag "^1.0.0" + call-bound "^1.0.3" + get-proto "^1.0.0" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-ip@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ip/-/is-ip-2.0.0.tgz#68eea07e8a0a0a94c2d080dd674c731ab2a461ab" + resolved "https://registry.npmjs.org/is-ip/-/is-ip-2.0.0.tgz" integrity sha512-9MTn0dteHETtyUx8pxqMwg5hMBi3pvlyglJ+b79KOCca0po23337LbVV2Hl4xmMvfw++ljnO0/+5G6G+0Szh6g== dependencies: ip-regex "^2.0.0" -is-map@^2.0.1, is-map@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" - integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== +is-map@^2.0.2, is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== +is-number-object@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz" + integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== dependencies: - has-tostringtag "^1.0.0" + call-bound "^1.0.3" + has-tostringtag "^1.0.2" is-number@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-path-inside@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + is-potential-custom-element-name@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + resolved "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz" integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== +is-regex@^1.1.4, is-regex@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz" + integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" is-retry-allowed@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz#88f34cbd236e043e71b6932d09b0c65fb7b4d71d" + resolved "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz" integrity sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg== -is-set@^2.0.1, is-set@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" - integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== +is-set@^2.0.2, is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== +is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz" + integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== dependencies: - call-bind "^1.0.2" - -is-stream@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== + call-bound "^1.0.3" is-stream@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== +is-string@^1.0.7, is-string@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz" + integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== dependencies: - has-tostringtag "^1.0.0" + call-bound "^1.0.3" + has-tostringtag "^1.0.2" -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== +is-symbol@^1.0.4, is-symbol@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz" + integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== dependencies: - has-symbols "^1.0.2" + call-bound "^1.0.2" + has-symbols "^1.1.0" + safe-regex-test "^1.1.0" -is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.13, is-typed-array@^1.1.3, is-typed-array@^1.1.9: - version "1.1.13" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" - integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== +is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15, is-typed-array@^1.1.3: + version "1.1.15" + resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz" + integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== dependencies: - which-typed-array "^1.1.14" + which-typed-array "^1.1.16" -is-typedarray@~1.0.0: +is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== -is-weakmap@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" - integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== + +is-weakref@^1.0.2, is-weakref@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz" + integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== dependencies: - call-bind "^1.0.2" + call-bound "^1.0.3" -is-weakset@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" - integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== +is-weakset@^2.0.3: + version "2.0.4" + resolved "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz" + integrity sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" + call-bound "^1.0.3" + get-intrinsic "^1.2.6" + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isarray@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz" integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== isemail@3.x.x: version "3.2.0" - resolved "https://registry.yarnpkg.com/isemail/-/isemail-3.2.0.tgz#59310a021931a9fb06bbb51e155ce0b3f236832c" + resolved "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz" integrity sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg== dependencies: punycode "2.x.x" isexe@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== isstream@~0.1.2: version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== -istanbul-lib-coverage@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" - integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA== +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.2" + resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== -istanbul-lib-hook@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz#c95695f383d4f8f60df1f04252a9550e15b5b133" - integrity sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA== - dependencies: - append-transform "^1.0.0" - -istanbul-lib-instrument@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630" - integrity sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA== - dependencies: - "@babel/generator" "^7.4.0" - "@babel/parser" "^7.4.3" - "@babel/template" "^7.4.0" - "@babel/traverse" "^7.4.3" - "@babel/types" "^7.4.0" - istanbul-lib-coverage "^2.0.5" - semver "^6.0.0" +istanbul-lib-hook@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz" + integrity sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ== + dependencies: + append-transform "^2.0.0" -istanbul-lib-report@^2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33" - integrity sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ== +istanbul-lib-instrument@^6.0.2: + version "6.0.3" + resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz" + integrity sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q== + dependencies: + "@babel/core" "^7.23.9" + "@babel/parser" "^7.23.9" + "@istanbuljs/schema" "^0.1.3" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + +istanbul-lib-processinfo@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz" + integrity sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg== + dependencies: + archy "^1.0.0" + cross-spawn "^7.0.3" + istanbul-lib-coverage "^3.2.0" + p-map "^3.0.0" + rimraf "^3.0.0" + uuid "^8.3.2" + +istanbul-lib-report@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== dependencies: - istanbul-lib-coverage "^2.0.5" - make-dir "^2.1.0" - supports-color "^6.1.0" + istanbul-lib-coverage "^3.0.0" + make-dir "^4.0.0" + supports-color "^7.1.0" -istanbul-lib-source-maps@^3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8" - integrity sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw== +istanbul-lib-source-maps@^4.0.0: + 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== dependencies: debug "^4.1.1" - istanbul-lib-coverage "^2.0.5" - make-dir "^2.1.0" - rimraf "^2.6.3" + istanbul-lib-coverage "^3.0.0" source-map "^0.6.1" -istanbul-reports@^2.2.4: - version "2.2.7" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.7.tgz#5d939f6237d7b48393cc0959eab40cd4fd056931" - integrity sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg== +istanbul-reports@^3.0.2: + version "3.1.7" + resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== dependencies: html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" -iterator.prototype@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" - integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w== +iterator.prototype@^1.1.4: + version "1.1.5" + resolved "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz" + integrity sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g== dependencies: - define-properties "^1.2.1" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - reflect.getprototypeof "^1.0.4" - set-function-name "^2.0.1" + define-data-property "^1.1.4" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.6" + get-proto "^1.0.0" + has-symbols "^1.1.0" + set-function-name "^2.0.2" + +jackspeak@^3.1.2: + version "3.4.3" + resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" jmespath@0.16.0: version "0.16.0" - resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.16.0.tgz#b15b0a85dfd4d930d43e69ed605943c802785076" + resolved "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz" integrity sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw== joi@^13.4.0: version "13.7.0" - resolved "https://registry.yarnpkg.com/joi/-/joi-13.7.0.tgz#cfd85ebfe67e8a1900432400b4d03bbd93fb879f" + resolved "https://registry.npmjs.org/joi/-/joi-13.7.0.tgz" integrity sha512-xuY5VkHfeOYK3Hdi91ulocfuFopwgbSORmIwzcwHKESQhC7w1kD5jaVSPnqDxS2I8t3RZ9omCKAxNwXN5zG1/Q== dependencies: hoek "5.x.x" @@ -2978,7 +3260,7 @@ joi@^13.4.0: joi@^14.0.0: version "14.3.1" - resolved "https://registry.yarnpkg.com/joi/-/joi-14.3.1.tgz#164a262ec0b855466e0c35eea2a885ae8b6c703c" + resolved "https://registry.npmjs.org/joi/-/joi-14.3.1.tgz" integrity sha512-LQDdM+pkOrpAn4Lp+neNIFV3axv1Vna3j38bisbQhETPMANYRbFJFUyOZcOClYvM/hppMhGWuKSFEK9vjrB+bQ== dependencies: hoek "6.x.x" @@ -2987,20 +3269,12 @@ joi@^14.0.0: "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - js-yaml@^3.13.1: version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" @@ -3008,19 +3282,19 @@ js-yaml@^3.13.1: js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" jsbn@~0.1.0: version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== jsdom@^21.1.2: version "21.1.2" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-21.1.2.tgz#6433f751b8718248d646af1cdf6662dc8a1ca7f9" + resolved "https://registry.npmjs.org/jsdom/-/jsdom-21.1.2.tgz" integrity sha512-sCpFmK2jv+1sjff4u7fzft+pUh2KSUbUrEHYHyfSIbGTIcmnjyp83qg6qLwdJ/I3LpTXx33ACxeRL7Lsyc6lGQ== dependencies: abab "^2.0.6" @@ -3050,72 +3324,80 @@ jsdom@^21.1.2: ws "^8.13.0" xml-name-validator "^4.0.0" -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +jsep@^0.4.0||^1.0.0, jsep@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/jsep/-/jsep-1.4.0.tgz" + integrity sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw== + +jsesc@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== json-buffer@3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== json-parse-better-errors@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-rules-engine@^6.1.2: - version "6.5.0" - resolved "https://registry.yarnpkg.com/json-rules-engine/-/json-rules-engine-6.5.0.tgz#dead167b2171b2cd9c4925285fe3971f9aa6c887" - integrity sha512-W8SLmnfQRDNG1Nh3Agz3c9AZzhiZ/cUtjAhyfhujFzVFNBv7cSHm9WaLoRjOdRr/9je7RgLtmbYXFViL3CekPA== +json-rules-engine@^7.3.1: + version "7.3.1" + resolved "https://registry.npmjs.org/json-rules-engine/-/json-rules-engine-7.3.1.tgz" + integrity sha512-NyRTQZllvAt7AQ3g9P7/t4nIwlEB+EyZV7y8/WgXfZWSlpcDryt1UH9CsoU+Z+MDvj8umN9qqEcbE6qnk9JAHw== dependencies: clone "^2.1.2" eventemitter2 "^6.4.4" hash-it "^6.0.0" - jsonpath-plus "^7.2.0" - lodash.isobjectlike "^4.0.0" + jsonpath-plus "^10.3.0" json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-schema@0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -json-stringify-safe@5.0.1, json-stringify-safe@~5.0.1: +json-stringify-safe@~5.0.1, json-stringify-safe@5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== json5@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz" integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== dependencies: minimist "^1.2.0" json5@^2.2.3: version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -jsonpath-plus@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/jsonpath-plus/-/jsonpath-plus-7.2.0.tgz#7ad94e147b3ed42f7939c315d2b9ce490c5a3899" - integrity sha512-zBfiUPM5nD0YZSBT/o/fbCUlCcepMIdP0CJZxM1+KgA4f2T206f6VAg9e7mX35+KlMaIc5qXW34f3BnwJ3w+RA== +jsonpath-plus@^10.3.0: + version "10.3.0" + resolved "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-10.3.0.tgz" + integrity sha512-8TNmfeTCk2Le33A3vRRwtuworG/L5RrgMvdjhKZxvyShO+mBu2fP50OWUjRLNtvw344DdDarFh9buFAZs5ujeA== + dependencies: + "@jsep-plugin/assignment" "^1.3.0" + "@jsep-plugin/regex" "^1.0.4" + jsep "^1.4.0" -jsonwebtoken@^8.3.0, jsonwebtoken@^8.5.1: +jsonwebtoken@^8.5.1: version "8.5.1" - resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" + resolved "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz" integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== dependencies: jws "^3.2.2" @@ -3129,9 +3411,25 @@ jsonwebtoken@^8.3.0, jsonwebtoken@^8.5.1: ms "^2.1.1" semver "^5.6.0" +jsonwebtoken@^9.0.2: + version "9.0.2" + resolved "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz" + integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ== + dependencies: + jws "^3.2.2" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" + ms "^2.1.1" + semver "^7.5.4" + jsprim@^1.2.2: version "1.4.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" + resolved "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz" integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== dependencies: assert-plus "1.0.0" @@ -3141,7 +3439,7 @@ jsprim@^1.2.2: "jsx-ast-utils@^2.4.1 || ^3.0.0": version "3.3.5" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" + resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz" integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== dependencies: array-includes "^3.1.6" @@ -3151,7 +3449,7 @@ jsprim@^1.2.2: jwa@^1.4.1: version "1.4.1" - resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" + resolved "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz" integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== dependencies: buffer-equal-constant-time "1.0.1" @@ -3160,7 +3458,7 @@ jwa@^1.4.1: jwks-rsa@^1.6.0: version "1.12.3" - resolved "https://registry.yarnpkg.com/jwks-rsa/-/jwks-rsa-1.12.3.tgz#40232f85d16734cb82837f38bb3e350a34435400" + resolved "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-1.12.3.tgz" integrity sha512-cFipFDeYYaO9FhhYJcZWX/IyZgc0+g316rcHnDpT2dNRNIE/lMOmWKKqp09TkJoYlNFzrEVODsR4GgXJMgWhnA== dependencies: "@types/express-jwt" "0.0.42" @@ -3176,7 +3474,7 @@ jwks-rsa@^1.6.0: jws@^3.2.2: version "3.2.2" - resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" + resolved "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz" integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== dependencies: jwa "^1.4.1" @@ -3184,19 +3482,19 @@ jws@^3.2.2: keyv@^4.5.3: version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" kuler@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" + resolved "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz" integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== levn@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: prelude-ls "^1.2.1" @@ -3204,29 +3502,19 @@ levn@^0.4.1: limiter@^1.1.5: version "1.1.5" - resolved "https://registry.yarnpkg.com/limiter/-/limiter-1.1.5.tgz#8f92a25b3b16c6131293a0cc834b4a838a2aa7c2" + resolved "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz" integrity sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA== linkify-it@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-4.0.1.tgz#01f1d5e508190d06669982ba31a7d9f56a5751ec" + resolved "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz" integrity sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw== dependencies: uc.micro "^1.0.1" -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - load-json-file@^5.2.0: version "5.3.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-5.3.0.tgz#4d3c1e01fa1c03ea78a60ac7af932c9ce53403f3" + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz" integrity sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw== dependencies: graceful-fs "^4.1.15" @@ -3237,100 +3525,98 @@ load-json-file@^5.2.0: locate-path@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz" integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== dependencies: p-locate "^3.0.0" path-exists "^3.0.0" +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + locate-path@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: p-locate "^5.0.0" -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== - lodash.clonedeep@^4.5.0: version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + resolved "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz" integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== lodash.flattendeep@^4.4.0: version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" + resolved "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz" integrity sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ== lodash.includes@^4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + resolved "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz" integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== lodash.isboolean@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + resolved "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz" integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== lodash.isinteger@^4.0.4: version "4.0.4" - resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + resolved "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz" integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== lodash.isnumber@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + resolved "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz" integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== -lodash.isobjectlike@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/lodash.isobjectlike/-/lodash.isobjectlike-4.0.0.tgz#742c5fc65add27924d3d24191681aa9a17b2b60d" - integrity sha512-bbRt0Dief0yqjkTgpvzisSxnsmY3ZgVJvokHL30UE+ytsvnpNfiNaCJL4XBEWek8koQmrwZidBHb7coXC5vXlA== - lodash.isplainobject@^4.0.6: version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== lodash.isstring@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + resolved "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz" integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== lodash.merge@^4.6.2: version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== lodash.once@^4.0.0: version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + resolved "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz" integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== -lodash@4.17.15: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" - integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== - lodash@^4.17.10, lodash@^4.17.15, lodash@^4.17.19: version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== +lodash@4.17.15: + version "4.17.15" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: - chalk "^2.0.1" + chalk "^4.1.0" + is-unicode-supported "^0.1.0" -logform@^2.3.2, logform@^2.4.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/logform/-/logform-2.6.0.tgz#8c82a983f05d6eaeb2d75e3decae7a768b2bf9b5" - integrity sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ== +logform@^2.7.0: + version "2.7.0" + resolved "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz" + integrity sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ== dependencies: "@colors/colors" "1.6.0" "@types/triple-beam" "^1.3.2" @@ -3339,67 +3625,64 @@ logform@^2.3.2, logform@^2.4.0: safe-stable-stringify "^2.3.1" triple-beam "^1.3.0" -long@^5.0.0: - version "5.2.3" - resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" - integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== - loose-envify@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: js-tokens "^3.0.0 || ^4.0.0" loupe@^2.3.6: version "2.3.7" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" + resolved "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz" integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== dependencies: get-func-name "^2.0.1" -lru-cache@^4.0.1: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== +lru-cache@^10.2.0: + version "10.4.3" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" + yallist "^3.0.2" -lru-cache@^6.0.0: +lru-cache@6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" -lru-cache@~4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" - integrity sha512-uQw9OqphAGiZhkuPlpFGmdTU2tEuhxTourM/19qGJrxBPHAr/f8BT1a0i/lOclESnGatdJG/UCkP9kZB/Lh1iw== - dependencies: - pseudomap "^1.0.1" - yallist "^2.0.0" - lru-memoizer@^2.1.2: - version "2.2.0" - resolved "https://registry.yarnpkg.com/lru-memoizer/-/lru-memoizer-2.2.0.tgz#b9d90c91637b4b1a423ef76f3156566691293df8" - integrity sha512-QfOZ6jNkxCcM/BkIPnFsqDhtrazLRsghi9mBwFAzol5GCvj4EkFT899Za3+QwikCg5sRX8JstioBDwOxEyzaNw== + version "2.3.0" + resolved "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-2.3.0.tgz" + integrity sha512-GXn7gyHAMhO13WSKrIiNfztwxodVsP8IoZ3XfrJV4yH2x0/OeTO/FIaAHTY5YekdGgW94njfuKmyyt1E0mR6Ug== dependencies: lodash.clonedeep "^4.5.0" - lru-cache "~4.0.0" + lru-cache "6.0.0" -make-dir@^2.0.0, make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== +make-dir@^3.0.0, make-dir@^3.0.2: + 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== dependencies: - pify "^4.0.1" - semver "^5.6.0" + semver "^6.0.0" + +make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" markdown-it@^13.0.1: version "13.0.2" - resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-13.0.2.tgz#1bc22e23379a6952e5d56217fbed881e0c94d536" + resolved "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.2.tgz" integrity sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w== dependencies: argparse "^2.0.1" @@ -3408,155 +3691,171 @@ markdown-it@^13.0.1: mdurl "^1.0.1" uc.micro "^1.0.5" +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + mdurl@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + resolved "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz" integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== media-typer@0.3.0: version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== - -merge-source-map@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" - integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== - dependencies: - source-map "^0.6.1" +merge-descriptors@1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz" + integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== methods@^1.1.1, methods@^1.1.2, methods@~1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== millisecond@^0.1.2: version "0.1.2" - resolved "https://registry.yarnpkg.com/millisecond/-/millisecond-0.1.2.tgz#6cc5ad386241cab8e78aff964f87028eec92dac5" + resolved "https://registry.npmjs.org/millisecond/-/millisecond-0.1.2.tgz" integrity sha512-BJ8XtxY+woL+5TkP6uS6XvOArm0JVrX2otkgtWZseHpIax0oOOPW3cnwhOjRqbEJg7YRO/BDF7fO/PTWNT3T9Q== mime-db@1.52.0: version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.12, mime-types@^2.1.35, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" -mime@1.6.0, mime@^1.4.1: +mime@^1.4.1, mime@1.6.0: version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mime@2.6.0: version "2.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" + resolved "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz" integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== -"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.4, minimatch@^3.1.1: version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimatch@3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== +minimatch@^3.0.5: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.1.6: + version "5.1.6" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.4: + version "9.0.5" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + +"minimatch@2 || 3": + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: +minimist@^1.2.0, minimist@^1.2.6: version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== -mkdirp@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.4.tgz#fd01504a6797ec5c9be81ff43d204961ed64a512" - integrity sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw== - dependencies: - minimist "^1.2.5" +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== -mkdirp@^0.5.0, mkdirp@~0.5.1: +mkdirp@~0.5.1: version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: minimist "^1.2.6" mocha-prepare@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/mocha-prepare/-/mocha-prepare-0.1.0.tgz#5513227681222e4349481ee4e462472f31c6bb82" + resolved "https://registry.npmjs.org/mocha-prepare/-/mocha-prepare-0.1.0.tgz" integrity sha512-ZSa/Zq+CQv9ZS7kfgsB3iRbfM4WBLn+Oy3EHDp3IXxbUVmVrcu+cs2YOELH77Gj3amkHjhCpM5CAZHV6jz6scg== -mocha@^6.1.4: - version "6.2.3" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-6.2.3.tgz#e648432181d8b99393410212664450a4c1e31912" - integrity sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg== - dependencies: - ansi-colors "3.2.3" - browser-stdout "1.3.1" - debug "3.2.6" - diff "3.5.0" - escape-string-regexp "1.0.5" - find-up "3.0.0" - glob "7.1.3" - growl "1.10.5" - he "1.2.0" - js-yaml "3.13.1" - log-symbols "2.2.0" - minimatch "3.0.4" - mkdirp "0.5.4" - ms "2.1.1" - node-environment-flags "1.0.5" - object.assign "4.1.0" - strip-json-comments "2.0.1" - supports-color "6.0.0" - which "1.3.1" - wide-align "1.1.3" - yargs "13.3.2" - yargs-parser "13.1.2" - yargs-unparser "1.6.0" +mocha@^11.1.0, mocha@>=1.0.0: + version "11.1.0" + resolved "https://registry.npmjs.org/mocha/-/mocha-11.1.0.tgz" + integrity sha512-8uJR5RTC2NgpY3GrYcgpZrsEd9zKbPDpob1RezyR2upGHRQtHWofmzTMzTMSV6dru3tj5Ukt0+Vnq1qhFEEwAg== + dependencies: + ansi-colors "^4.1.3" + browser-stdout "^1.3.1" + chokidar "^3.5.3" + debug "^4.3.5" + diff "^5.2.0" + escape-string-regexp "^4.0.0" + find-up "^5.0.0" + glob "^10.4.5" + he "^1.2.0" + js-yaml "^4.1.0" + log-symbols "^4.1.0" + minimatch "^5.1.6" + ms "^2.1.3" + serialize-javascript "^6.0.2" + strip-json-comments "^3.1.1" + supports-color "^8.1.1" + workerpool "^6.5.1" + yargs "^17.7.2" + yargs-parser "^21.1.1" + yargs-unparser "^2.0.0" moment@^2.19.3, moment@^2.24.0: version "2.30.1" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" + resolved "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz" integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== -ms@2.0.0: +ms@^2.0.0, ms@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@^2.1.1, ms@^2.1.2, ms@^2.1.3: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -ms@2.1.3, ms@^2.0.0, ms@^2.1.1, ms@^2.1.2, ms@^2.1.3: +ms@2.1.3: version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== mv@~2: version "2.1.1" - resolved "https://registry.yarnpkg.com/mv/-/mv-2.1.1.tgz#ae6ce0d6f6d5e0a4f7d893798d03c1ea9559b6a2" + resolved "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz" integrity sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg== dependencies: mkdirp "~0.5.1" @@ -3564,459 +3863,452 @@ mv@~2: rimraf "~2.4.0" nan@^2.14.0: - version "2.18.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.18.0.tgz#26a6faae7ffbeb293a39660e88a76b82e30b7554" - integrity sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w== + version "2.22.2" + resolved "https://registry.npmjs.org/nan/-/nan-2.22.2.tgz" + integrity sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ== natural-compare@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== ncp@~2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3" + resolved "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz" integrity sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA== negotiator@0.6.3: version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== -nested-error-stacks@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz#26c8a3cee6cc05fbcf1e333cd2fc3e003326c0b5" - integrity sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw== - node-cache@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/node-cache/-/node-cache-5.1.2.tgz#f264dc2ccad0a780e76253a694e9fd0ed19c398d" + resolved "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz" integrity sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg== dependencies: clone "2.x" -node-environment-flags@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.5.tgz#fa930275f5bf5dae188d6192b24b4c8bbac3d76a" - integrity sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ== +node-preload@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz" + integrity sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ== dependencies: - object.getownpropertydescriptors "^2.0.3" - semver "^5.7.0" + process-on-spawn "^1.0.0" -nodemon@^2.0.20: - version "2.0.22" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.22.tgz#182c45c3a78da486f673d6c1702e00728daf5258" - integrity sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ== +node-releases@^2.0.19: + version "2.0.19" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz" + integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== + +nodemon@^3.1.9: + version "3.1.9" + resolved "https://registry.npmjs.org/nodemon/-/nodemon-3.1.9.tgz" + integrity sha512-hdr1oIb2p6ZSxu3PB2JWWYS7ZQ0qvaZsc3hK8DR8f02kRzc8rjYmxAIvdz+aYC+8F2IjNaB7HMcSDg8nQpJxyg== dependencies: chokidar "^3.5.2" - debug "^3.2.7" + debug "^4" ignore-by-default "^1.0.1" minimatch "^3.1.2" pstree.remy "^1.1.8" - semver "^5.7.1" - simple-update-notifier "^1.0.7" + semver "^7.5.3" + simple-update-notifier "^2.0.0" supports-color "^5.5.0" touch "^3.1.0" undefsafe "^2.0.5" -nopt@~1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" - integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== - dependencies: - abbrev "1" - -normalize-package-data@^2.3.2: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== nwsapi@^2.2.4: - version "2.2.7" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" - integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== + version "2.2.18" + resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.18.tgz" + integrity sha512-p1TRH/edngVEHVbwqWnxUViEmq5znDvyB+Sik5cmuLpGOIfDf/39zLiq3swPF8Vakqn+gvNiOQAZu8djYlQILA== -nyc@^14.0.0: - version "14.1.1" - resolved "https://registry.yarnpkg.com/nyc/-/nyc-14.1.1.tgz#151d64a6a9f9f5908a1b73233931e4a0a3075eeb" - integrity sha512-OI0vm6ZGUnoGZv/tLdZ2esSVzDwUC88SNs+6JoSOMVxA+gKMB8Tk7jBwgemLx4O40lhhvZCVw1C+OYLOBOPXWw== +nyc@^17.1.0: + version "17.1.0" + resolved "https://registry.npmjs.org/nyc/-/nyc-17.1.0.tgz" + integrity sha512-U42vQ4czpKa0QdI1hu950XuNhYqgoM+ZF1HT+VuUHL9hPfDPVvNQyltmMqdE9bUHMVa+8yNbc3QKTj8zQhlVxQ== dependencies: - archy "^1.0.0" - caching-transform "^3.0.2" - convert-source-map "^1.6.0" - cp-file "^6.2.0" - find-cache-dir "^2.1.0" - find-up "^3.0.0" - foreground-child "^1.5.6" - glob "^7.1.3" - istanbul-lib-coverage "^2.0.5" - istanbul-lib-hook "^2.0.7" - istanbul-lib-instrument "^3.3.0" - istanbul-lib-report "^2.0.8" - istanbul-lib-source-maps "^3.0.6" - istanbul-reports "^2.2.4" - js-yaml "^3.13.1" - make-dir "^2.1.0" - merge-source-map "^1.1.0" - resolve-from "^4.0.0" - rimraf "^2.6.3" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + caching-transform "^4.0.0" + convert-source-map "^1.7.0" + decamelize "^1.2.0" + find-cache-dir "^3.2.0" + find-up "^4.1.0" + foreground-child "^3.3.0" + get-package-type "^0.1.0" + glob "^7.1.6" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-hook "^3.0.0" + istanbul-lib-instrument "^6.0.2" + istanbul-lib-processinfo "^2.0.2" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.2" + make-dir "^3.0.0" + node-preload "^0.2.1" + p-map "^3.0.0" + process-on-spawn "^1.0.0" + resolve-from "^5.0.0" + rimraf "^3.0.0" signal-exit "^3.0.2" - spawn-wrap "^1.4.2" - test-exclude "^5.2.3" - uuid "^3.3.2" - yargs "^13.2.2" - yargs-parser "^13.0.0" + spawn-wrap "^2.0.0" + test-exclude "^6.0.0" + yargs "^15.0.2" oauth-sign@~0.9.0: version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== object-assign@^4, object-assign@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.13.1: - version "1.13.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== +object-inspect@^1.13.3: + version "1.13.4" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== object-is@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + version "1.1.6" + resolved "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz" + integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" + call-bind "^1.0.7" + define-properties "^1.2.1" -object-keys@^1.0.11, object-keys@^1.1.1: +object-keys@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -object.assign@^4.1.4: - version "4.1.5" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" - integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== +object.assign@^4.1.4, object.assign@^4.1.7: + version "4.1.7" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz" + integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== dependencies: - call-bind "^1.0.5" + call-bind "^1.0.8" + call-bound "^1.0.3" define-properties "^1.2.1" - has-symbols "^1.0.3" + es-object-atoms "^1.0.0" + has-symbols "^1.1.0" object-keys "^1.1.1" -object.entries@^1.1.6: - version "1.1.7" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" - integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -object.fromentries@^2.0.6, object.fromentries@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" - integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -object.getownpropertydescriptors@^2.0.3: - version "2.1.7" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.7.tgz#7a466a356cd7da4ba8b9e94ff6d35c3eeab5d56a" - integrity sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g== +object.entries@^1.1.8: + version "1.1.8" + resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz" + integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== dependencies: - array.prototype.reduce "^1.0.6" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - safe-array-concat "^1.0.0" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" -object.groupby@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.2.tgz#494800ff5bab78fd0eff2835ec859066e00192ec" - integrity sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw== +object.fromentries@^2.0.8: + version "2.0.8" + resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== dependencies: - array.prototype.filter "^1.0.3" - call-bind "^1.0.5" + call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.0.0" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" -object.hasown@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.3.tgz#6a5f2897bb4d3668b8e79364f98ccf971bda55ae" - integrity sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA== +object.groupby@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz" + integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== dependencies: - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" -object.values@^1.1.6, object.values@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" - integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== +object.values@^1.1.6, object.values@^1.2.0, object.values@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz" + integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" on-finished@2.4.1: version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== dependencies: ee-first "1.1.1" once@^1.3.0, once@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" one-time@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" + resolved "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz" integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== dependencies: fn.name "1.x.x" optionator@^0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== + version "0.9.4" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" + word-wrap "^1.2.5" -os-homedir@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== +own-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz" + integrity sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== + dependencies: + get-intrinsic "^1.2.6" + object-keys "^1.1.1" + safe-push-apply "^1.0.0" p-limit@^2.0.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" p-limit@^3.0.2: version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" p-locate@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz" integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== dependencies: p-limit "^2.0.0" +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + p-locate@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: p-limit "^3.0.2" +p-map@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz" + integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== + dependencies: + aggregate-error "^3.0.0" + p-try@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -package-hash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-3.0.0.tgz#50183f2d36c9e3e528ea0a8605dff57ce976f88e" - integrity sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA== +package-hash@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz" + integrity sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ== dependencies: graceful-fs "^4.1.15" - hasha "^3.0.0" + hasha "^5.0.0" lodash.flattendeep "^4.4.0" release-zalgo "^1.0.0" +package-json-from-dist@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== + parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" parse-json@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== dependencies: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" parse5@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" - integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + version "7.2.1" + resolved "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz" + integrity sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ== dependencies: - entities "^4.4.0" + entities "^4.5.0" parseurl@~1.3.3: version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== path-exists@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== +path-scurry@^1.11.1: + version "1.11.1" + resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== dependencies: - pify "^3.0.0" + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +path-to-regexp@0.1.12: + version "0.1.12" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz" + integrity sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ== pathval@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + resolved "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz" integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== performance-now@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== +picocolors@^1.0.0, picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + picomatch@^2.0.4, picomatch@^2.2.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== - pify@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== pkg-conf@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-3.1.0.tgz#d9f9c75ea1bae0e77938cde045b276dac7cc69ae" + resolved "https://registry.npmjs.org/pkg-conf/-/pkg-conf-3.1.0.tgz" integrity sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ== dependencies: find-up "^3.0.0" load-json-file "^5.2.0" -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== +pkg-dir@^4.1.0: + 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== dependencies: - find-up "^3.0.0" + find-up "^4.0.0" + +possible-typed-array-names@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz" + integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== precond@0.2: version "0.2.3" - resolved "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz#aa9591bcaa24923f1e0f4849d240f47efc1075ac" + resolved "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz" integrity sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ== prelude-ls@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== prettier@^2.8.1: version "2.8.8" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== +prisma@*, prisma@^6.4.1: + version "6.4.1" + resolved "https://registry.npmjs.org/prisma/-/prisma-6.4.1.tgz" + integrity sha512-q2uJkgXnua/jj66mk6P9bX/zgYJFI/jn4Yp0aS6SPRrjH/n6VyOV7RDe1vHD0DX8Aanx4MvgmUPPoYnR6MJnPg== + dependencies: + "@prisma/engines" "6.4.1" + esbuild ">=0.12 <1" + esbuild-register "3.6.0" + optionalDependencies: + fsevents "2.3.3" + process-nextick-args@~2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +process-on-spawn@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.1.0.tgz" + integrity sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q== + dependencies: + fromentries "^1.2.0" + prop-types@^15.8.1: version "15.8.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== dependencies: loose-envify "^1.4.0" object-assign "^4.1.1" react-is "^16.13.1" -protobufjs@^7.2.4: - version "7.2.6" - resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.2.6.tgz#4a0ccd79eb292717aacf07530a07e0ed20278215" - integrity sha512-dgJaEDDL6x8ASUZ1YqWciTRrdOuYNzoOf27oHNfdyvKqHr5i0FV7FSLU+aIeFjyFgVxrpTOtQUi0BLLBymZaBw== - dependencies: - "@protobufjs/aspromise" "^1.1.2" - "@protobufjs/base64" "^1.1.2" - "@protobufjs/codegen" "^2.0.4" - "@protobufjs/eventemitter" "^1.1.0" - "@protobufjs/fetch" "^1.1.0" - "@protobufjs/float" "^1.0.2" - "@protobufjs/inquire" "^1.1.0" - "@protobufjs/path" "^1.1.2" - "@protobufjs/pool" "^1.1.0" - "@protobufjs/utf8" "^1.1.0" - "@types/node" ">=13.7.0" - long "^5.0.0" - proxy-addr@~2.0.7: version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== dependencies: forwarded "0.2.0" @@ -4024,71 +4316,61 @@ proxy-addr@~2.0.7: proxy-from-env@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== -pseudomap@^1.0.1, pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== - psl@^1.1.28, psl@^1.1.33: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== + version "1.15.0" + resolved "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz" + integrity sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w== + dependencies: + punycode "^2.3.1" pstree.remy@^1.1.8: version "1.1.8" - resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" + resolved "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz" integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== +punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.0, punycode@^2.3.1, punycode@2.x.x: + version "2.3.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + punycode@1.3.2: version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + resolved "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz" integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw== -punycode@2.x.x, punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - -qs@6.11.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -qs@^6.11.0, qs@^6.11.2, qs@^6.5.1: - version "6.11.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" - integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== +qs@^6.11.0, qs@^6.11.2, qs@^6.5.1, qs@6.13.0: + version "6.13.0" + resolved "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz" + integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== dependencies: - side-channel "^1.0.4" + side-channel "^1.0.6" qs@~6.5.2: version "6.5.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" + resolved "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz" integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== querystring@0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + resolved "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz" integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g== querystringify@^2.1.1: version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== queue-microtask@^1.2.2: version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== r7insight_node@^1.8.4: version "1.8.4" - resolved "https://registry.yarnpkg.com/r7insight_node/-/r7insight_node-1.8.4.tgz#875633032137545b3cc7c80763baf09f6ba66801" + resolved "https://registry.npmjs.org/r7insight_node/-/r7insight_node-1.8.4.tgz" integrity sha512-6cQrzLkaOxdv/SRFXWRJjgFr8a3nXUOT/4IMFuBv+mWzBnu5DJl+HzONAsWYvclrlZnvfa54PaIPqPuPRSlbrQ== dependencies: babel-runtime "6.6.1" @@ -4098,24 +4380,21 @@ r7insight_node@^1.8.4: reconnect-core "1.3.0" semver "5.1.0" +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + range-parser@~1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - raw-body@2.5.2: version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz" integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: bytes "3.1.2" @@ -4125,29 +4404,12 @@ raw-body@2.5.2: react-is@^16.13.1: version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -read-pkg-up@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" - integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA== - dependencies: - find-up "^3.0.0" - read-pkg "^3.0.0" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - readable-stream@^2.3.5: version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" @@ -4158,9 +4420,9 @@ readable-stream@^2.3.5: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.4.0, readable-stream@^3.6.0: +readable-stream@^3.4.0, readable-stream@^3.6.2: version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" @@ -4169,61 +4431,64 @@ readable-stream@^3.4.0, readable-stream@^3.6.0: readdirp@~3.6.0: version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" reconnect-core@1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/reconnect-core/-/reconnect-core-1.3.0.tgz#fbae52919a7877d844e3246d01a2f26701c833c8" + resolved "https://registry.npmjs.org/reconnect-core/-/reconnect-core-1.3.0.tgz" integrity sha512-+gLKwmyRf2tjl6bLR03DoeWELzyN6LW9Xgr3vh7NXHHwPi0JC0N2TwPyf90oUEBkCRcD+bgQ+s3HORoG3nwHDg== dependencies: backoff "~2.5.0" -reflect.getprototypeof@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz#e0bd28b597518f16edaf9c0e292c631eb13e0674" - integrity sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ== +reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: + version "1.0.10" + resolved "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz" + integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== dependencies: - call-bind "^1.0.5" + call-bind "^1.0.8" define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.0.0" - get-intrinsic "^1.2.3" - globalthis "^1.0.3" - which-builtin-type "^1.1.3" + es-abstract "^1.23.9" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.7" + get-proto "^1.0.1" + which-builtin-type "^1.2.1" regenerator-runtime@^0.14.0: version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz" integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== -regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1: - version "1.5.2" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" - integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== +regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.3: + version "1.5.4" + resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz" + integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== dependencies: - call-bind "^1.0.6" + call-bind "^1.0.8" define-properties "^1.2.1" es-errors "^1.3.0" - set-function-name "^2.0.1" + get-proto "^1.0.1" + gopd "^1.2.0" + set-function-name "^2.0.2" regexpp@^3.0.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== release-zalgo@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/release-zalgo/-/release-zalgo-1.0.0.tgz#09700b7e5074329739330e535c5a90fb67851730" + resolved "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz" integrity sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA== dependencies: es6-error "^4.0.1" request@^2.88.0: version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + resolved "https://registry.npmjs.org/request/-/request-2.88.2.tgz" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== dependencies: aws-sign2 "~0.7.0" @@ -4249,36 +4514,41 @@ request@^2.88.0: require-directory@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== require-main-filename@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== requires-port@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve@^1.10.0, resolve@^1.22.1, resolve@^1.22.4: - version "1.22.8" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve@^1.22.1, resolve@^1.22.4: + version "1.22.10" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz" + integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== dependencies: - is-core-module "^2.13.0" + is-core-module "^2.16.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^2.0.0-next.4: +resolve@^2.0.0-next.5: version "2.0.0-next.5" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" + resolved "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz" integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== dependencies: is-core-module "^2.13.0" @@ -4286,145 +4556,140 @@ resolve@^2.0.0-next.4: supports-preserve-symlinks-flag "^1.0.0" reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^2.6.2, rimraf@^2.6.3: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" + version "1.1.0" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz" + integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== -rimraf@^3.0.2: +rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" rimraf@~2.4.0: version "2.4.5" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.4.5.tgz#ee710ce5d93a8fdb856fb5ea8ff0e2d75934b2da" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz" integrity sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ== dependencies: glob "^6.0.1" rrweb-cssom@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz#ed298055b97cbddcdeb278f904857629dec5e0e1" + resolved "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz" integrity sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw== run-parallel@^1.1.9: version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" -safe-array-concat@^1.0.0, safe-array-concat@^1.0.1, safe-array-concat@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz#8d0cae9cb806d6d1c06e08ab13d847293ebe0692" - integrity sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg== +safe-array-concat@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz" + integrity sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q== dependencies: - call-bind "^1.0.5" - get-intrinsic "^1.2.2" - has-symbols "^1.0.3" + call-bind "^1.0.8" + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + has-symbols "^1.1.0" isarray "^2.0.5" -safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@^5.2.1, safe-buffer@~5.2.0, safe-buffer@5.2.1: version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@~5.1.0: version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-json-stringify@~1: version "1.2.0" - resolved "https://registry.yarnpkg.com/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz#356e44bc98f1f93ce45df14bcd7c01cda86e0afd" + resolved "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz" integrity sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg== -safe-regex-test@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" - integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== +safe-push-apply@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz" + integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== dependencies: - call-bind "^1.0.6" es-errors "^1.3.0" - is-regex "^1.1.4" + isarray "^2.0.5" + +safe-regex-test@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz" + integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-regex "^1.2.1" safe-stable-stringify@^2.3.1: - version "2.4.3" - resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" - integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== + version "2.5.0" + resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz" + integrity sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA== -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +safer-buffer@^2.0.2, safer-buffer@^2.1.0, "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@~2.1.0: version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sax@1.2.1: +sax@>=0.6.0, sax@1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" + resolved "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz" integrity sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA== -sax@>=0.6.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.3.0.tgz#a5dbe77db3be05c9d1ee7785dbd3ea9de51593d0" - integrity sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA== - saxes@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" + resolved "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz" integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== dependencies: xmlchars "^2.2.0" -secure-json-parse@^2.4.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/secure-json-parse/-/secure-json-parse-2.7.0.tgz#5a5f9cd6ae47df23dba3151edd06855d47e09862" - integrity sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw== - -"semver@2 || 3 || 4 || 5", semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: +semver@^5.6.0: version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== +semver@^6.0.0: + version "6.3.1" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.0.0, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: + version "7.7.1" + resolved "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz" + integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== + semver@5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.0.1.tgz#9fb3f4004f900d83c47968fe42f7583e05832cc9" + resolved "https://registry.npmjs.org/semver/-/semver-5.0.1.tgz" integrity sha512-Ne6/HdGZvvpXBdjW3o8J0pvxC2jnmVNBK7MKkMgsOBfrsIdTXfA5x+H9DUbQ2xzyvnLv0A0v9x8R4B40xNZIRQ== semver@5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.1.0.tgz#85f2cf8550465c4df000cf7d86f6b054106ab9e5" + resolved "https://registry.npmjs.org/semver/-/semver-5.1.0.tgz" integrity sha512-sfKXKhcz5XVyfUZa2V4RbjK0xjOJCMLNF9H4p4v0UCo9wNHM/lH9RDuyDbGEtxWLMDlPBc8xI7AbbVLKXty+rQ== -semver@^6.0.0, semver@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.0.0, semver@^7.3.8: - version "7.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" - -semver@~7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== +send@0.19.0: + version "0.19.0" + resolved "https://registry.npmjs.org/send/-/send-0.19.0.tgz" + integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== dependencies: debug "2.6.9" depd "2.0.0" @@ -4440,139 +4705,165 @@ send@0.18.0: range-parser "~1.2.1" statuses "2.0.1" -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== +serialize-javascript@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== dependencies: - encodeurl "~1.0.2" + randombytes "^2.1.0" + +serve-static@1.16.2: + version "1.16.2" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz" + integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== + dependencies: + encodeurl "~2.0.0" escape-html "~1.0.3" parseurl "~1.3.3" - send "0.18.0" + send "0.19.0" set-blocking@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== -set-function-length@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425" - integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== +set-function-length@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== dependencies: - define-data-property "^1.1.2" + define-data-property "^1.1.4" es-errors "^1.3.0" function-bind "^1.1.2" - get-intrinsic "^1.2.3" + get-intrinsic "^1.2.4" gopd "^1.0.1" - has-property-descriptors "^1.0.1" + has-property-descriptors "^1.0.2" -set-function-name@^2.0.0, set-function-name@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" - integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== +set-function-name@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== dependencies: - define-data-property "^1.0.1" + define-data-property "^1.1.4" + es-errors "^1.3.0" functions-have-names "^1.2.3" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.2" + +set-proto@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz" + integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== + dependencies: + dunder-proto "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" setprototypeof@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -side-channel@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.5.tgz#9a84546599b48909fb6af1211708d23b1946221b" - integrity sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ== +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== dependencies: - call-bind "^1.0.6" es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" + object-inspect "^1.13.3" -signal-exit@^3.0.0, signal-exit@^3.0.2: +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.0.4, side-channel@^1.0.6, side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" + +signal-exit@^3.0.2: version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + simple-swizzle@^0.2.2: version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== dependencies: is-arrayish "^0.3.1" -simple-update-notifier@^1.0.7: - version "1.1.0" - resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz#67694c121de354af592b347cdba798463ed49c82" - integrity sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg== +simple-update-notifier@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz" + integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w== dependencies: - semver "~7.0.0" + semver "^7.5.3" source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -spawn-wrap@^1.4.2: - version "1.4.3" - resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-1.4.3.tgz#81b7670e170cca247d80bf5faf0cfb713bdcf848" - integrity sha512-IgB8md0QW/+tWqcavuFgKYR/qIRvJkRLPJDFaoXtLLUaVcCDK0+HeFTkmQHj3eprcYhc+gOl0aEA1w7qZlYezw== +spawn-wrap@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz" + integrity sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg== dependencies: - foreground-child "^1.5.6" - mkdirp "^0.5.0" - os-homedir "^1.0.1" - rimraf "^2.6.2" + foreground-child "^2.0.0" + is-windows "^1.0.2" + make-dir "^3.0.0" + rimraf "^3.0.0" signal-exit "^3.0.2" - which "^1.3.0" - -spdx-correct@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" - integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.4.0.tgz#c07a4ede25b16e4f78e6707bbd84b15a45c19c1b" - integrity sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.17" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz#887da8aa73218e51a1d917502d79863161a93f9c" - integrity sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg== + which "^2.0.1" sprintf-js@~1.0.2: version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== sshpk@^1.7.0: version "1.18.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" + resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz" integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== dependencies: asn1 "~0.2.3" @@ -4587,12 +4878,12 @@ sshpk@^1.7.0: stack-trace@0.0.x: version "0.0.10" - resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + resolved "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz" integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== -standard-engine@^15.0.0: +standard-engine@^15.1.0: version "15.1.0" - resolved "https://registry.yarnpkg.com/standard-engine/-/standard-engine-15.1.0.tgz#717409a002edd13cd57f6554fdd3464d9a22a774" + resolved "https://registry.npmjs.org/standard-engine/-/standard-engine-15.1.0.tgz" integrity sha512-VHysfoyxFu/ukT+9v49d4BRXIokFRZuH3z1VRxzFArZdjSCFpro6rEIU3ji7e4AoAtuSfKBkiOmsrDqKW5ZSRw== dependencies: get-stdin "^8.0.0" @@ -4601,9 +4892,9 @@ standard-engine@^15.0.0: xdg-basedir "^4.0.0" standard@^17.1.0: - version "17.1.0" - resolved "https://registry.yarnpkg.com/standard/-/standard-17.1.0.tgz#829eeeb3139ad50714294d3531592d60ad1286af" - integrity sha512-jaDqlNSzLtWYW4lvQmU0EnxWMUGQiwHasZl5ZEIwx3S/ijZDjZOzs1y1QqKwKs5vqnFpGtizo4NOYX2s0Voq/g== + version "17.1.2" + resolved "https://registry.npmjs.org/standard/-/standard-17.1.2.tgz" + integrity sha512-WLm12WoXveKkvnPnPnaFUUHuOB2cUdAsJ4AiGHL2G0UNMrcRAWY2WriQaV8IQ3oRmYr0AWUbLNr94ekYFAHOrA== dependencies: eslint "^8.41.0" eslint-config-standard "17.1.0" @@ -4611,155 +4902,183 @@ standard@^17.1.0: eslint-plugin-import "^2.27.5" eslint-plugin-n "^15.7.0" eslint-plugin-promise "^6.1.1" - eslint-plugin-react "^7.32.2" - standard-engine "^15.0.0" + eslint-plugin-react "^7.36.1" + standard-engine "^15.1.0" version-guard "^1.1.1" statuses@2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== stop-iteration-iterator@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" - integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== + version "1.1.0" + resolved "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz" + integrity sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ== dependencies: - internal-slot "^1.0.4" + es-errors "^1.3.0" + internal-slot "^1.1.0" streamsearch@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" + resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz" integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== -"string-width@^1.0.2 || 2": - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" + safe-buffer "~5.2.0" -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" + safe-buffer "~5.1.0" -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string.prototype.matchall@^4.0.8: - version "4.0.10" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100" - integrity sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ== +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - regexp.prototype.flags "^1.5.0" - set-function-name "^2.0.0" - side-channel "^1.0.4" + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" -string.prototype.trim@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" - integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== +string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" -string.prototype.trimend@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" - integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" -string.prototype.trimstart@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" - integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== +string.prototype.matchall@^4.0.12: + version "4.0.12" + resolved "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz" + integrity sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-abstract "^1.23.6" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.6" + gopd "^1.2.0" + has-symbols "^1.1.0" + internal-slot "^1.1.0" + regexp.prototype.flags "^1.5.3" + set-function-name "^2.0.2" + side-channel "^1.1.0" + +string.prototype.repeat@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz" + integrity sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== +string.prototype.trim@^1.2.10: + version "1.2.10" + resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz" + integrity sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== dependencies: - safe-buffer "~5.2.0" + call-bind "^1.0.8" + call-bound "^1.0.2" + define-data-property "^1.1.4" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-object-atoms "^1.0.0" + has-property-descriptors "^1.0.2" -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== +string.prototype.trimend@^1.0.8, string.prototype.trimend@^1.0.9: + version "1.0.9" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz" + integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== dependencies: - safe-buffer "~5.1.0" + call-bind "^1.0.8" + call-bound "^1.0.2" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" -strip-ansi@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== dependencies: - ansi-regex "^2.0.0" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: - ansi-regex "^3.0.0" + ansi-regex "^5.0.1" -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== +strip-ansi@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== dependencies: - ansi-regex "^4.1.0" + ansi-regex "^2.0.0" strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + strip-bom@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== -strip-json-comments@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== strip-json-comments@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== superagent@^3.8.3: version "3.8.3" - resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.8.3.tgz#460ea0dbdb7d5b11bc4f78deba565f86a178e128" + resolved "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz" integrity sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA== dependencies: component-emitter "^1.2.0" @@ -4775,7 +5094,7 @@ superagent@^3.8.3: superagent@^8.0.9: version "8.1.2" - resolved "https://registry.yarnpkg.com/superagent/-/superagent-8.1.2.tgz#03cb7da3ec8b32472c9d20f6c2a57c7f3765f30b" + resolved "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz" integrity sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA== dependencies: component-emitter "^1.3.0" @@ -4789,64 +5108,59 @@ superagent@^8.0.9: qs "^6.11.0" semver "^7.3.8" -supports-color@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" - integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== - dependencies: - has-flag "^3.0.0" - supports-color@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== -supports-color@^5.3.0, supports-color@^5.5.0: +supports-color@^5.5.0: version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" +supports-color@^8.1.1: + version "8.1.1" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== swagger-ui-dist@>=4.11.0: - version "5.11.3" - resolved "https://registry.yarnpkg.com/swagger-ui-dist/-/swagger-ui-dist-5.11.3.tgz#64c96e90b6a352e7b20a55b73b91fc0e0bed4f0a" - integrity sha512-vQ+Pe73xt7vMVbX40L6nHu4sDmNCM6A+eMVJPGvKrifHQ4LO3smH0jCiiefKzsVl7OlOcVEnrZ9IFzYwElfMkA== + version "5.20.1" + resolved "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.20.1.tgz" + integrity sha512-qBPCis2w8nP4US7SvUxdJD3OwKcqiWeZmjN2VWhq2v+ESZEXOP/7n4DeiOiiZcGYTKMHAHUUrroHaTsjUWTEGw== + dependencies: + "@scarf/scarf" "=1.4.0" swagger-ui-express@^4.1.3: version "4.6.3" - resolved "https://registry.yarnpkg.com/swagger-ui-express/-/swagger-ui-express-4.6.3.tgz#870d0892654fe80e6970a2d680e22521acd2dc19" + resolved "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-4.6.3.tgz" integrity sha512-CDje4PndhTD2HkgyKH3pab+LKspDeB/NhPN2OF1j+piYIamQqBYwAXWESOT1Yju2xFg51bRW9sUng2WxDjzArw== dependencies: swagger-ui-dist ">=4.11.0" symbol-tree@^3.2.4: version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + resolved "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== tc-core-library-js@appirio-tech/tc-core-library-js.git#v2.6.4: version "2.4.1" - resolved "https://codeload.github.com/appirio-tech/tc-core-library-js/tar.gz/df0b36c51cf80918194cbff777214b3c0cf5a151" + resolved "git+ssh://git@github.com/appirio-tech/tc-core-library-js.git#df0b36c51cf80918194cbff777214b3c0cf5a151" dependencies: axios "^0.19.0" bunyan "^1.8.12" @@ -4857,75 +5171,62 @@ tc-core-library-js@appirio-tech/tc-core-library-js.git#v2.6.4: r7insight_node "^1.8.4" request "^2.88.0" -test-exclude@^5.2.3: - version "5.2.3" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" - integrity sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g== +test-exclude@^6.0.0: + 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== dependencies: - glob "^7.1.3" + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" minimatch "^3.0.4" - read-pkg-up "^4.0.0" - require-main-filename "^2.0.0" text-hex@1.0.x: version "1.0.0" - resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" + resolved "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz" integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== text-table@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" toidentifier@1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== topcoder-bus-api-wrapper@topcoder-platform/tc-bus-api-wrapper.git: version "1.2.0" - resolved "https://codeload.github.com/topcoder-platform/tc-bus-api-wrapper/tar.gz/f8cbd335a0e0b4d6edd7cae859473593271fd97f" + resolved "git+ssh://git@github.com/topcoder-platform/tc-bus-api-wrapper.git#f8cbd335a0e0b4d6edd7cae859473593271fd97f" dependencies: joi "^13.4.0" lodash "^4.17.15" superagent "^3.8.3" tc-core-library-js appirio-tech/tc-core-library-js.git#v2.6.4 -topcoder-proto-registry@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/topcoder-proto-registry/-/topcoder-proto-registry-0.2.0.tgz#703d636d2581b7b3903fe299f6c3d572c5f728c0" - integrity sha512-qmoAY0jb25A4S4bunUagj+wP++d1Db0iZqMc0SaMFjzW33dXjay7TpJDBbNZuVk4He7kUhYXrn2CDikbPM3TFw== - topo@3.x.x: version "3.0.3" - resolved "https://registry.yarnpkg.com/topo/-/topo-3.0.3.tgz#d5a67fb2e69307ebeeb08402ec2a2a6f5f7ad95c" + resolved "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz" integrity sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ== dependencies: hoek "6.x.x" touch@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" - integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== - dependencies: - nopt "~1.0.10" + version "3.1.1" + resolved "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz" + integrity sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA== tough-cookie@^4.1.2: - version "4.1.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== + version "4.1.4" + resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz" + integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== dependencies: psl "^1.1.33" punycode "^2.1.1" @@ -4934,7 +5235,7 @@ tough-cookie@^4.1.2: tough-cookie@~2.5.0: version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz" integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== dependencies: psl "^1.1.28" @@ -4942,19 +5243,19 @@ tough-cookie@~2.5.0: tr46@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-4.1.1.tgz#281a758dcc82aeb4fe38c7dfe4d11a395aac8469" + resolved "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz" integrity sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw== dependencies: punycode "^2.3.0" triple-beam@^1.3.0: version "1.4.1" - resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.4.1.tgz#6fde70271dc6e5d73ca0c3b24e2d92afb7441984" + resolved "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz" integrity sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg== tsconfig-paths@^3.15.0: version "3.15.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz" integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== dependencies: "@types/json5" "^0.0.29" @@ -4962,137 +5263,158 @@ tsconfig-paths@^3.15.0: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^2.4.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - tunnel-agent@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== dependencies: safe-buffer "^5.0.1" tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: prelude-ls "^1.2.1" -type-detect@^4.0.0, type-detect@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== +type-detect@^4.0.0, type-detect@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz" + integrity sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw== type-fest@^0.20.2: version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== type-fest@^0.3.0: version "0.3.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz" integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== +type-fest@^0.8.0: + version "0.8.1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + type-is@~1.6.18: version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== dependencies: media-typer "0.3.0" mime-types "~2.1.24" -typed-array-buffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz#0608ffe6bca71bf15a45bff0ca2604107a1325f5" - integrity sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ== +typed-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz" + integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== dependencies: - call-bind "^1.0.6" + call-bound "^1.0.3" es-errors "^1.3.0" - is-typed-array "^1.1.13" + is-typed-array "^1.1.14" -typed-array-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" - integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== +typed-array-byte-length@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz" + integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.8" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.14" -typed-array-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" - integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== +typed-array-byte-offset@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz" + integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.15" + reflect.getprototypeof "^1.0.9" -typed-array-length@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== +typed-array-length@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz" + integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" for-each "^0.3.3" - is-typed-array "^1.1.9" + gopd "^1.0.1" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + reflect.getprototypeof "^1.0.6" + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" uc.micro@^1.0.1, uc.micro@^1.0.5: version "1.0.6" - resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" + resolved "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz" integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== +unbox-primitive@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz" + integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== dependencies: - call-bind "^1.0.2" + call-bound "^1.0.3" has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" + has-symbols "^1.1.0" + which-boxed-primitive "^1.1.1" undefsafe@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" + resolved "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz" integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== +undici-types@~6.20.0: + version "6.20.0" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz" + integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== universalify@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz" integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== -unpipe@1.0.0, unpipe@~1.0.0: +unpipe@~1.0.0, unpipe@1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== +update-browserslist-db@^1.1.1: + version "1.1.3" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz" + integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.1" + uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" url-parse@^1.5.3: version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz" integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== dependencies: querystringify "^2.1.1" @@ -5100,7 +5422,7 @@ url-parse@^1.5.3: url@0.10.3: version "0.10.3" - resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" + resolved "https://registry.npmjs.org/url/-/url-0.10.3.tgz" integrity sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ== dependencies: punycode "1.3.2" @@ -5108,12 +5430,12 @@ url@0.10.3: util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== util@^0.12.4: version "0.12.5" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" + resolved "https://registry.npmjs.org/util/-/util-0.12.5.tgz" integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== dependencies: inherits "^2.0.3" @@ -5124,35 +5446,32 @@ util@^0.12.4: utils-merge@1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -uuid@8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.0.0.tgz#bc6ccf91b5ff0ac07bbcdbf1c7c4e150db4dbb6c" - integrity sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw== - uuid@^3.3.2: version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +uuid@8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz" + integrity sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw== vary@^1, vary@~1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== verror@1.10.0: version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== dependencies: assert-plus "^1.0.0" @@ -5160,194 +5479,212 @@ verror@1.10.0: extsprintf "^1.2.0" version-guard@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/version-guard/-/version-guard-1.1.1.tgz#7a6e87a1babff1b43d6a7b0fd239731e278262fa" - integrity sha512-MGQLX89UxmYHgDvcXyjBI0cbmoW+t/dANDppNPrno64rYr8nH4SHSuElQuSYdXGEs0mUzdQe1BY+FhVPNsAmJQ== + version "1.1.3" + resolved "https://registry.npmjs.org/version-guard/-/version-guard-1.1.3.tgz" + integrity sha512-JwPr6erhX53EWH/HCSzfy1tTFrtPXUe927wdM1jqBBeYp1OM+qPHjWbsvv6pIBduqdgxxS+ScfG7S28pzyr2DQ== w3c-xmlserializer@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073" + resolved "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz" integrity sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw== dependencies: xml-name-validator "^4.0.0" webidl-conversions@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz" integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== whatwg-encoding@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" + resolved "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz" integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== dependencies: iconv-lite "0.6.3" whatwg-mimetype@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" + resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz" integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== whatwg-url@^12.0.0, whatwg-url@^12.0.1: version "12.0.1" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-12.0.1.tgz#fd7bcc71192e7c3a2a97b9a8d6b094853ed8773c" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-12.0.1.tgz" integrity sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ== dependencies: tr46 "^4.1.1" webidl-conversions "^7.0.0" -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== +which-boxed-primitive@^1.0.2, which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz" + integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" + is-bigint "^1.1.0" + is-boolean-object "^1.2.1" + is-number-object "^1.1.1" + is-string "^1.1.1" + is-symbol "^1.1.1" -which-builtin-type@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" - integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== +which-builtin-type@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz" + integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== dependencies: - function.prototype.name "^1.1.5" - has-tostringtag "^1.0.0" + call-bound "^1.0.2" + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" is-async-function "^2.0.0" - is-date-object "^1.0.5" - is-finalizationregistry "^1.0.2" + is-date-object "^1.1.0" + is-finalizationregistry "^1.1.0" is-generator-function "^1.0.10" - is-regex "^1.1.4" + is-regex "^1.2.1" is-weakref "^1.0.2" isarray "^2.0.5" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.9" + which-boxed-primitive "^1.1.0" + which-collection "^1.0.2" + which-typed-array "^1.1.16" -which-collection@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" - integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== +which-collection@^1.0.1, which-collection@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== dependencies: - is-map "^2.0.1" - is-set "^2.0.1" - is-weakmap "^2.0.1" - is-weakset "^2.0.1" + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" which-module@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" + resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz" integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== -which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.2, which-typed-array@^1.1.9: - version "1.1.14" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.14.tgz#1f78a111aee1e131ca66164d8bdc3ab062c95a06" - integrity sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg== +which-typed-array@^1.1.13, which-typed-array@^1.1.16, which-typed-array@^1.1.18, which-typed-array@^1.1.2: + version "1.1.19" + resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz" + integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw== dependencies: - available-typed-arrays "^1.0.6" - call-bind "^1.0.5" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.1" - -which@1.3.1, which@^1.2.9, which@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + for-each "^0.3.5" + get-proto "^1.0.1" + gopd "^1.2.0" + has-tostringtag "^1.0.2" which@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" -wide-align@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - -winston-transport@^4.5.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.7.0.tgz#e302e6889e6ccb7f383b926df6936a5b781bd1f0" - integrity sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg== +winston-transport@^4.9.0: + version "4.9.0" + resolved "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz" + integrity sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A== dependencies: - logform "^2.3.2" - readable-stream "^3.6.0" + logform "^2.7.0" + readable-stream "^3.6.2" triple-beam "^1.3.0" winston@^3.8.2: - version "3.11.0" - resolved "https://registry.yarnpkg.com/winston/-/winston-3.11.0.tgz#2d50b0a695a2758bb1c95279f0a88e858163ed91" - integrity sha512-L3yR6/MzZAOl0DsysUXHVjOwv8mKZ71TrA/41EIduGpOOV5LQVodqN+QdQ6BS6PJ/RdIshZhq84P/fStEZkk7g== + version "3.17.0" + resolved "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz" + integrity sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw== dependencies: "@colors/colors" "^1.6.0" "@dabh/diagnostics" "^2.0.2" async "^3.2.3" is-stream "^2.0.0" - logform "^2.4.0" + logform "^2.7.0" one-time "^1.0.0" readable-stream "^3.4.0" safe-stable-stringify "^2.3.1" stack-trace "0.0.x" triple-beam "^1.3.0" - winston-transport "^4.5.0" + winston-transport "^4.9.0" -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +workerpool@^6.5.1: + version "6.5.1" + resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz" + integrity sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA== + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" wrap-ansi@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + wrappy@1: version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -write-file-atomic@^2.4.2: - version "2.4.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" - integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== dependencies: - graceful-fs "^4.1.11" imurmurhash "^0.1.4" + is-typedarray "^1.0.0" signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" ws@^8.13.0: - version "8.16.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" - integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== + version "8.18.1" + resolved "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz" + integrity sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w== xdg-basedir@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" + resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz" integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== xml-name-validator@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" + resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz" integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== xml2js@0.6.2: version "0.6.2" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.6.2.tgz#dd0b630083aa09c161e25a4d0901e2b2a929b499" + resolved "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz" integrity sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA== dependencies: sax ">=0.6.0" @@ -5355,91 +5692,93 @@ xml2js@0.6.2: xmlbuilder@~11.0.0: version "11.0.1" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz" integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== xmlchars@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + resolved "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== xss@^1.0.8: - version "1.0.14" - resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.14.tgz#4f3efbde75ad0d82e9921cc3c95e6590dd336694" - integrity sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw== + version "1.0.15" + resolved "https://registry.npmjs.org/xss/-/xss-1.0.15.tgz" + integrity sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg== dependencies: commander "^2.20.3" cssfilter "0.0.10" y18n@^4.0.0: version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz" integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== y18n@^5.0.5: version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yallist@^2.0.0, yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yallist@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yamljs@^0.3.0: version "0.3.0" - resolved "https://registry.yarnpkg.com/yamljs/-/yamljs-0.3.0.tgz#dc060bf267447b39f7304e9b2bfbe8b5a7ddb03b" + resolved "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz" integrity sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ== dependencies: argparse "^1.0.7" glob "^7.0.5" -yargs-parser@13.1.2, yargs-parser@^13.0.0, yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== dependencies: camelcase "^5.0.0" decamelize "^1.2.0" yargs-parser@^21.1.1: version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs-unparser@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" - integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== +yargs-unparser@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== dependencies: - flat "^4.1.0" - lodash "^4.17.15" - yargs "^13.3.0" + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" -yargs@13.3.2, yargs@^13.2.2, yargs@^13.3.0: - version "13.3.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== +yargs@^15.0.2: + version "15.4.1" + resolved "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== dependencies: - cliui "^5.0.0" - find-up "^3.0.0" + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" get-caller-file "^2.0.1" require-directory "^2.1.1" require-main-filename "^2.0.0" set-blocking "^2.0.0" - string-width "^3.0.0" + string-width "^4.2.0" which-module "^2.0.0" y18n "^4.0.0" - yargs-parser "^13.1.2" + yargs-parser "^18.1.2" yargs@^17.7.2: version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: cliui "^8.0.1" @@ -5452,5 +5791,5 @@ yargs@^17.7.2: yocto-queue@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==