diff --git a/package.json b/package.json index c7956a8a..f5386be7 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "@dhis2/ui": "7.16.2", "@dhis2/ui-core": "6.24.0", "@dhis2/ui-widgets": "6.24.0", - "@eyeseetea/d2-api": "1.9.3", + "@eyeseetea/d2-api": "1.18.0-beta.1", "@eyeseetea/d2-ui-components": "2.6.10", "@material-ui/core": "4.12.3", "@material-ui/icons": "4.11.2", diff --git a/src/data/reports/glass-data-submission/GLASSDataSubmissionDefaultRepository.ts b/src/data/reports/glass-data-submission/GLASSDataSubmissionDefaultRepository.ts index 2cb19570..b6688c87 100644 --- a/src/data/reports/glass-data-submission/GLASSDataSubmissionDefaultRepository.ts +++ b/src/data/reports/glass-data-submission/GLASSDataSubmissionDefaultRepository.ts @@ -16,7 +16,7 @@ import { GLASSDataSubmissionOptions, GLASSDataSubmissionRepository, } from "../../../domain/reports/glass-data-submission/repositories/GLASSDataSubmissionRepository"; -import { D2Api } from "../../../types/d2-api"; +import { D2Api, SelectedPick } from "../../../types/d2-api"; import { DataStoreStorageClient } from "../../common/clients/storage/DataStoreStorageClient"; import { StorageClient } from "../../common/clients/storage/StorageClient"; import { Instance } from "../../common/entities/Instance"; @@ -28,9 +28,14 @@ import { } from "../../../webapp/reports/glass-data-submission/glass-data-submission-list/Filters"; import { Namespaces } from "../../common/clients/storage/Namespaces"; import { Config } from "../../../domain/common/entities/Config"; -import { Event } from "@eyeseetea/d2-api/api/events"; import { generateUid } from "../../../utils/uid"; import { OrgUnitWithChildren } from "../../../domain/reports/glass-data-submission/entities/OrgUnit"; +import { D2TrackerEventSchema, TrackerEventsResponse } from "@eyeseetea/d2-api/api/trackerEvents"; +import { + D2TrackedEntityInstanceToPost, + D2TrackerTrackedEntitySchema, + TrackedEntitiesGetResponse, +} from "@eyeseetea/d2-api/api/trackerTrackedEntities"; interface CompleteDataSetRegistrationsResponse { completeDataSetRegistrations: Registration[] | undefined; @@ -74,25 +79,6 @@ type DataValueSetsType = { dataValues: DataValueType[]; }; -type Attribute = { - value: string; -}; - -type TrackedEntityInstance = { - attributes: Attribute[]; - orgUnit: string; - enrollments: { - attributes: Attribute[]; - events: { - program: string; - programStage: string; - }[]; - }[]; - programOwners: { - program: string; - }[]; -}; - export class GLASSDataSubmissionDefaultRepository implements GLASSDataSubmissionRepository { private storageClient: StorageClient; private globalStorageClient: StorageClient; @@ -259,7 +245,7 @@ export class GLASSDataSubmissionDefaultRepository implements GLASSDataSubmission modules: GLASSDataSubmissionModule[], dataSubmissionPeriods: string[] ): Promise { - const instances = await this.getTrackedEntityInstances(program, orgUnit); + const instances = await this.getAllTrackedEntities(program, orgUnit); const orgUnitModules: { orgUnit: string; module: string }[] = _(instances) .map(instance => { @@ -673,9 +659,14 @@ export class GLASSDataSubmissionDefaultRepository implements GLASSDataSubmission .getData(); } - private async getProgramEvents(program: string, orgUnit: string, isEGASPModule: boolean): Promise { - const { events } = await this.api.events // to do: use new tracker api + private async getTrackerProgramEvents( + program: string, + orgUnit: string, + isEGASPModule: boolean + ): Promise { + const response: TrackerEventsResponse = await this.api.tracker.events .get({ + fields: eventFields, program: program, orgUnit: orgUnit, ouMode: isEGASPModule ? "DESCENDANTS" : "SELECTED", @@ -683,7 +674,112 @@ export class GLASSDataSubmissionDefaultRepository implements GLASSDataSubmission }) .getData(); - return events; + return response.instances; + } + + private async createTrackerProgramEventsByChunks(eventsToPost: D2TrackerEvent[]): Promise { + await promiseMap(_.chunk(eventsToPost, 100), async eventsGroup => { + return await this.api.tracker + .post({ importStrategy: "CREATE" }, { events: _.reject(eventsGroup, _.isEmpty) }) + .getData(); + }); + } + + private async importTrackedEntitiesByStrategy( + trackedEntities: D2TrackedEntityInstanceToPost[], + importStrategy: "CREATE" | "UPDATE" | "CREATE_AND_UPDATE" | "DELETE", + async?: boolean + ): Promise { + if (async) { + await this.api.tracker + .postAsync({ importStrategy: importStrategy }, { trackedEntities: trackedEntities }) + .getData(); + } else { + await this.api.tracker + .post({ importStrategy: importStrategy }, { trackedEntities: trackedEntities }) + .getData(); + } + } + + private async importEventsByStrategy( + events: D2TrackerEvent[], + importStrategy: "CREATE" | "UPDATE" | "CREATE_AND_UPDATE" | "DELETE", + async?: boolean + ): Promise { + if (async) { + await this.api.tracker.postAsync({ importStrategy: importStrategy }, { events: events }).getData(); + } else { + await this.api.tracker.post({ importStrategy: importStrategy }, { events: events }).getData(); + } + } + + private getTEIsWithProgramStages( + trackedEntityInstances: D2TrackerEntity[], + programStages: string[] + ): D2TrackerEntity[] { + return trackedEntityInstances.filter(trackedEntity => { + const teiProgramStage = trackedEntity.enrollments[0]?.events[0]?.programStage ?? ""; + + return programStages.includes(teiProgramStage); + }); + } + + private getTrackedEntitiesOfPage(params: { + orgUnit: Id; + page: number; + pageSize: number; + program: Id; + period?: string; + trackedEntity?: string; + totalPages?: boolean; + enrollmentEnrolledAfter?: string; + enrollmentEnrolledBefore?: string; + }): Promise> { + const { program, orgUnit, enrollmentEnrolledAfter, enrollmentEnrolledBefore, ...restParams } = params; + + return this.api.tracker.trackedEntities + .get({ + fields: trackedEntitiesFields, + program: program, + orgUnit: orgUnit, + enrollmentOccurredAfter: enrollmentEnrolledAfter, + enrollmentOccurredBefore: enrollmentEnrolledBefore, + ouMode: "SELECTED", + ...restParams, + }) + .getData(); + } + + private async getAllTrackedEntities(program: string, orgUnit: string, period?: string): Promise { + const trackedEntities: D2TrackerEntity[] = []; + const enrollmentEnrolledAfter = period ? `${period}-1-1` : undefined; + const enrollmentEnrolledBefore = period ? `${period}-12-31` : undefined; + const totalPages = true; + const pageSize = 200; + let currentPage = 1; + let response; + + try { + do { + response = await this.getTrackedEntitiesOfPage({ + program: program, + orgUnit: orgUnit, + page: currentPage, + pageSize: pageSize, + totalPages: totalPages, + enrollmentEnrolledBefore, + enrollmentEnrolledAfter, + }); + if (!response.total) { + throw new Error(`Error getting paginated events of program ${program} and organisation ${orgUnit}`); + } + trackedEntities.push(...response.instances); + currentPage++; + } while (response.page < Math.ceil((response.total as number) / pageSize)); + return trackedEntities; + } catch { + return []; + } } private makeDataValuesArray( @@ -886,24 +982,32 @@ export class GLASSDataSubmissionDefaultRepository implements GLASSDataSubmission items: GLASSDataSubmissionItemIdentifier[] ): Promise { _.forEach(items, async item => { + const allTrackedEntities: D2TrackerEntity[] = await this.getAllTrackedEntities( + program.id, + item.orgUnit, + item.period + ); const trackedEntities = this.getTEIsWithProgramStages( - await this.getTrackedEntityInstances(program.id, item.orgUnit, item.period), + allTrackedEntities, programStages.map(programStage => programStage.id) ); if (!_.isEmpty(trackedEntities)) { + const allTrackedEntitiesInApprovedId: D2TrackerEntity[] = await this.getAllTrackedEntities( + program.approvedId, + item.orgUnit, + item.period + ); const approvedTrackedEntities = this.getTEIsWithProgramStages( - await this.getTrackedEntityInstances(program.approvedId, item.orgUnit, item.period), + allTrackedEntitiesInApprovedId, programStages.map(programStage => programStage.approvedId) ); - !_.isEmpty(approvedTrackedEntities) && - this.api.post( - "/tracker", - { importStrategy: "DELETE" }, - { trackedEntities: approvedTrackedEntities } - ); - - const trackedEntitiesToPost: TrackedEntityInstance[] = trackedEntities.map(trackedEntity => ({ + + if (!_.isEmpty(approvedTrackedEntities)) { + await this.importTrackedEntitiesByStrategy(approvedTrackedEntities, "DELETE"); + } + + const trackedEntitiesToPost: D2TrackerEntity[] = trackedEntities.map(trackedEntity => ({ ...trackedEntity, trackedEntity: "", programOwners: trackedEntity.programOwners.map(programOwner => ({ @@ -931,72 +1035,11 @@ export class GLASSDataSubmissionDefaultRepository implements GLASSDataSubmission })), })); - return await this.api - .post( - "/tracker", - { async: true, importStrategy: "CREATE_AND_UPDATE" }, - { trackedEntities: trackedEntitiesToPost } - ) - .getData(); + await this.importTrackedEntitiesByStrategy(trackedEntitiesToPost, "CREATE_AND_UPDATE", true); } }); } - private getTEIsWithProgramStages( - trackedEntityInstances: TrackedEntityInstance[], - programStages: string[] - ): TrackedEntityInstance[] { - return trackedEntityInstances.filter(trackedEntity => { - const teiProgramStage = trackedEntity.enrollments[0]?.events[0]?.programStage ?? ""; - - return programStages.includes(teiProgramStage); - }); - } - - private async getTrackedEntityInstances( - program: string, - orgUnit: string, - period?: string - ): Promise { - const startDate = period && `${period}-01-01`; - const endDate = period && `${period}-12-31`; - - let trackedEntities: TrackedEntityInstance[] = []; - let currentPage = 1; - let response; - const pageSize = 200; - - try { - do { - response = await this.api - .get<{ - instances: TrackedEntityInstance[]; - total: number; - page: number; - }>("/tracker/trackedEntities", { - program: program, - orgUnit: orgUnit, - enrollmentOccurredAfter: startDate, - enrollmentOccurredBefore: endDate, - pageSize, - page: currentPage, - totalPages: true, - fields: ":all", - }) - .getData(); - - if (!response.total) { - throw new Error(`Error getting paginated events of program ${program} and organisation ${orgUnit}`); - } - trackedEntities = trackedEntities.concat(response.instances); - currentPage++; - } while (response.page < Math.ceil(response.total / pageSize)); - return trackedEntities; - } catch { - return []; - } - } - private async getProgramStages(program: string): Promise { const { programs } = await this.api.metadata .get({ @@ -1024,23 +1067,24 @@ export class GLASSDataSubmissionDefaultRepository implements GLASSDataSubmission isEGASPModule?: boolean ): Promise { _.forEach(items, async item => { - const programEvents = await this.getProgramEvents(program.id, item.orgUnit, isEGASPModule ?? false); + const programEvents = await this.getTrackerProgramEvents(program.id, item.orgUnit, isEGASPModule ?? false); const events = programEvents.filter( - event => String(new Date(event.eventDate).getFullYear()) === item.period + event => String(new Date(event.occurredAt).getFullYear()) === item.period ); if (!_.isEmpty(events)) { - const approvedProgramEvents = await this.getProgramEvents( + const approvedProgramEvents = await this.getTrackerProgramEvents( program.approvedId, item.orgUnit, isEGASPModule ?? false ); const approvedEvents = approvedProgramEvents.filter( - event => String(new Date(event.eventDate).getFullYear()) === item.period + event => String(new Date(event.occurredAt).getFullYear()) === item.period ); - !_.isEmpty(approvedEvents) && - this.api.post("/events", { importStrategy: "DELETE" }, { events: approvedEvents }); // to do: use new tracker api + if (!_.isEmpty(approvedEvents)) { + await this.importEventsByStrategy(approvedEvents, "DELETE"); + } const approvedProgramStage = (await this.getProgramStages(program.approvedId))[0]; const eventsToPost = events.map(event => { @@ -1052,9 +1096,7 @@ export class GLASSDataSubmissionDefaultRepository implements GLASSDataSubmission }; }); - await promiseMap(_.chunk(eventsToPost, 100), async eventsGroup => { - return await this.api.events.post({}, { events: _.reject(eventsGroup, _.isEmpty) }).getData(); - }); + await this.createTrackerProgramEventsByChunks(eventsToPost); } }); } @@ -1322,3 +1364,49 @@ type OrgUnitNode = { id: string; children?: OrgUnitNode[]; }; + +const eventFields = { + program: true, + programStage: true, + event: true, + dataValues: true, + orgUnit: true, + occurredAt: true, + status: true, +} as const; + +type D2TrackerEvent = SelectedPick; + +const trackedEntitiesFields = { + trackedEntity: true, + trackedEntityType: true, + orgUnit: true, + enrollments: { + trackedEntity: true, + occurredAt: true, + orgUnit: true, + program: true, + enrollment: true, + status: true, + enrolledAt: true, + events: { + orgUnit: true, + program: true, + programStage: true, + event: true, + occurredAt: true, + dataValues: { + dataElement: true, + value: true, + }, + }, + }, + attributes: { + attribute: true, + valueType: true, + value: true, + }, + programOwners: true, +} as const; + +type D2TrackerEntity = SelectedPick; diff --git a/yarn.lock b/yarn.lock index 402d5b2b..9c66f641 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1358,7 +1358,7 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.0", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.0", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.15.4" resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz" integrity sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw== @@ -3069,7 +3069,7 @@ i18next "^10.3" moment "^2.24.0" -"@dhis2/d2-i18n@1.1.0", "@dhis2/d2-i18n@^1.0.5": +"@dhis2/d2-i18n@1.1.0": version "1.1.0" resolved "https://registry.npmjs.org/@dhis2/d2-i18n/-/d2-i18n-1.1.0.tgz" integrity sha512-x3u58goDQsMfBzy50koxNrJjofJTtjRZOfz6f6Py/wMMJfp/T6vZjWMQgcfWH0JrV6d04K1RTt6bI05wqsVQvg== @@ -3489,34 +3489,21 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" -"@eyeseetea/d2-api@1.9.3": - version "1.9.3" - resolved "https://registry.npmjs.org/@eyeseetea/d2-api/-/d2-api-1.9.3.tgz" - integrity sha512-4cAck/b1oLPYMXIGZwrgRh4LZwN1hs+NXX4b8JHEJLMD50flrsR7t6h91MWzV2ocMNipDq4i+Ew5hbBzOEVAKQ== +"@eyeseetea/d2-api@1.18.0-beta.1": + version "1.18.0-beta.1" + resolved "https://registry.yarnpkg.com/@eyeseetea/d2-api/-/d2-api-1.18.0-beta.1.tgz#9d99e21091bcf62e74988449a8cbf6ad18448bb7" + integrity sha512-PV3534gcPU3600T4xFWozs0upy3J5fg1lC3EYtEblMsqjkmUQFw00RVBAo0B/WcHth5fOVVkABc3jEKfMuWTSQ== dependencies: - "@babel/runtime" "^7.5.4" - "@dhis2/d2-i18n" "^1.0.5" - "@types/prettier" "^1.18.3" - "@types/qs" "^6.5.3" abort-controller "3.0.0" - argparse "^2.0.1" - axios "0.19.2" - axios-debug-log "^0.6.2" - axios-mock-adapter "1.18.2" + axios "1.6.4" + axios-mock-adapter "1.22.0" btoa "^1.2.1" - cronstrue "^1.81.0" - cryptr "^4.0.2" - d2 "^31.8.1" - dotenv "^8.0.0" - express "^4.17.1" + cross-fetch "^4.0.0" + form-data "^4.0.0" iconv-lite "0.6.2" - isomorphic-fetch "3.0.0" - lodash "^4.17.15" - log4js "^4.5.1" - node-schedule "^1.3.2" - qs "^6.9.0" + lodash "4.17.21" + qs "6.9.7" react "^16.12.0" - yargs "^14.0.0" "@eyeseetea/d2-ui-components@2.6.10": version "2.6.10" @@ -4458,13 +4445,6 @@ dependencies: classnames "*" -"@types/debug@^4.0.0": - version "4.1.7" - resolved "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz" - integrity sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg== - dependencies: - "@types/ms" "*" - "@types/eslint@^7.2.6": version "7.28.0" resolved "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.0.tgz" @@ -4603,11 +4583,6 @@ resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz" integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== -"@types/ms@*": - version "0.7.31" - resolved "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz" - integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== - "@types/node@*", "@types/node@16.11.7": version "16.11.7" resolved "https://registry.npmjs.org/@types/node/-/node-16.11.7.tgz" @@ -4628,11 +4603,6 @@ resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== -"@types/prettier@^1.18.3": - version "1.19.1" - resolved "https://registry.npmjs.org/@types/prettier/-/prettier-1.19.1.tgz" - integrity sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ== - "@types/prettier@^2.0.0", "@types/prettier@^2.1.5": version "2.3.2" resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.2.tgz" @@ -4648,11 +4618,6 @@ resolved "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz" integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ== -"@types/qs@^6.5.3": - version "6.9.7" - resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== - "@types/raf-schd@^4.0.0": version "4.0.1" resolved "https://registry.yarnpkg.com/@types/raf-schd/-/raf-schd-4.0.1.tgz#1f9e03736f277fe9c7b82102bf18570a6ee19f82" @@ -5791,14 +5756,6 @@ axe-core@^4.3.5: resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.3.5.tgz" integrity sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA== -axios-debug-log@^0.6.2: - version "0.6.2" - resolved "https://registry.npmjs.org/axios-debug-log/-/axios-debug-log-0.6.2.tgz" - integrity sha512-aavexsFWw+T09e9JkbsNe/zLjdG4r2vwhnKUtCNC/0wpogI/i+bQWJ0jJIuXof734dQ43uiOiFPgbRu8EVa64Q== - dependencies: - "@types/debug" "^4.0.0" - debug "^4.0.0" - axios-mock-adapter@*, axios-mock-adapter@1.20.0: version "1.20.0" resolved "https://registry.npmjs.org/axios-mock-adapter/-/axios-mock-adapter-1.20.0.tgz" @@ -5808,20 +5765,13 @@ axios-mock-adapter@*, axios-mock-adapter@1.20.0: is-blob "^2.1.0" is-buffer "^2.0.5" -axios-mock-adapter@1.18.2: - version "1.18.2" - resolved "https://registry.npmjs.org/axios-mock-adapter/-/axios-mock-adapter-1.18.2.tgz" - integrity sha512-e5aTsPy2Viov22zNpFTlid76W1Scz82pXeEwwCXdtO85LROhHAF8pHF2qDhiyMONLxKyY3lQ+S4UCsKgrlx8Hw== - dependencies: - fast-deep-equal "^3.1.1" - is-buffer "^2.0.3" - -axios@0.19.2: - version "0.19.2" - resolved "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz" - integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== +axios-mock-adapter@1.22.0: + version "1.22.0" + resolved "https://registry.yarnpkg.com/axios-mock-adapter/-/axios-mock-adapter-1.22.0.tgz#0f3e6be0fc9b55baab06f2d49c0b71157e7c053d" + integrity sha512-dmI0KbkyAhntUR05YY96qg2H6gg0XMl2+qTW0xmYg6Up+BFBAJYRLROMXRdDEL06/Wqwa0TJThAYvFtSFdRCZw== dependencies: - follow-redirects "1.5.10" + fast-deep-equal "^3.1.3" + is-buffer "^2.0.5" axios@0.24.0: version "0.24.0" @@ -5830,6 +5780,15 @@ axios@0.24.0: dependencies: follow-redirects "^1.14.4" +axios@1.6.4: + version "1.6.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.4.tgz#184ee1f63d412caffcf30d2c50982253c3ee86e0" + integrity sha512-heJnIs6N4aa1eSthhN9M5ioILu8Wi8vmQW9iHQ9NUvfkJb0lEEDUiIdQNAuBtfUt3FxReaKdpQA5DbmMOqzF/A== + dependencies: + follow-redirects "^1.15.4" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + axios@^0.21.1: version "0.21.4" resolved "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz" @@ -7374,18 +7333,12 @@ create-require@^1.1.0: resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -cron-parser@^2.18.0: - version "2.18.0" - resolved "https://registry.npmjs.org/cron-parser/-/cron-parser-2.18.0.tgz" - integrity sha512-s4odpheTyydAbTBQepsqd2rNWGa2iV3cyo8g7zbI2QQYGLVsfbhmwukayS1XHppe02Oy1fg7mg6xoaraVJeEcg== +cross-fetch@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-4.1.0.tgz#8f69355007ee182e47fa692ecbaa37a52e43c3d2" + integrity sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw== dependencies: - is-nan "^1.3.0" - moment-timezone "^0.5.31" - -cronstrue@^1.81.0: - version "1.117.0" - resolved "https://registry.npmjs.org/cronstrue/-/cronstrue-1.117.0.tgz" - integrity sha512-XeRPOHNnkitGDqiLj3V6XJgn/UbrRSaWdVrDjV/IBt2cT+SRPeURiTt6Fbm16liCp78+XFklwuwWpPzPBg08NQ== + node-fetch "^2.7.0" cross-spawn@7.0.3, cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" @@ -7429,11 +7382,6 @@ crypto-random-string@^1.0.0: resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz" integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= -cryptr@^4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/cryptr/-/cryptr-4.0.2.tgz" - integrity sha512-gLTcYjmLGe0Kk1yyacvjNKvSdkWBNNgG2tDnbRQP7yE559x/RJLo/I3WAmwCXNXf/fzMHCNp9vDv3PCopZDpXw== - css-blank-pseudo@^0.1.4: version "0.1.4" resolved "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz" @@ -7767,13 +7715,6 @@ d2@31.10.2: dependencies: isomorphic-fetch "^2.2.1" -d2@^31.8.1: - version "31.10.0" - resolved "https://registry.npmjs.org/d2/-/d2-31.10.0.tgz" - integrity sha512-H1g0qXYAmAoHi57I4wBvKcuNjz4XEakSpt4Dpau0ubUee9Zmk0SlbzFQA47s43F09iQRY1Cw189TzAfkC4YK+Q== - dependencies: - isomorphic-fetch "^2.2.1" - d2@~31.1: version "31.1.1" resolved "https://registry.npmjs.org/d2/-/d2-31.1.1.tgz" @@ -7828,11 +7769,6 @@ date-fns@^2.29.2: resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.2.tgz#0d4b3d0f3dff0f920820a070920f0d9662c51931" integrity sha512-0VNbwmWJDS/G3ySwFSJA3ayhbURMTJLtwM2DTxf9CWondCnh6DTNlO9JgRSq6ibf4eD0lfMJNBxUdEAHHix+bA== -date-format@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz" - integrity sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA== - debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" @@ -7840,20 +7776,13 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, debug@^2.6. dependencies: ms "2.0.0" -debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2: +debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2: version "4.3.2" resolved "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz" integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== dependencies: ms "2.1.2" -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" - debug@^3.1.1, debug@^3.2.6, debug@^3.2.7: version "3.2.7" resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" @@ -9462,11 +9391,6 @@ flat-cache@^3.0.4: flatted "^3.1.0" rimraf "^3.0.2" -flatted@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz" - integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== - flatted@^3.1.0: version "3.2.2" resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz" @@ -9485,13 +9409,6 @@ flush-write-stream@^1.0.0, flush-write-stream@^1.0.2: inherits "^2.0.3" readable-stream "^2.3.6" -follow-redirects@1.5.10: - version "1.5.10" - 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.0.0, follow-redirects@^1.14.0: version "1.14.4" resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz" @@ -9502,6 +9419,11 @@ follow-redirects@^1.14.4: resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz" integrity sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA== +follow-redirects@^1.15.4: + version "1.15.9" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== + font-awesome@4.7.0: version "4.7.0" resolved "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz" @@ -9557,6 +9479,15 @@ form-data@^3.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +form-data@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.1.tgz#ba1076daaaa5bfd7e99c1a6cb02aa0a5cff90d48" + integrity sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + formidable@^1.2.1: version "1.2.2" resolved "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz" @@ -9587,7 +9518,7 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" -fs-extra@^7.0.0, fs-extra@^7.0.1: +fs-extra@^7.0.0: version "7.0.1" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz" integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== @@ -10747,7 +10678,7 @@ is-buffer@^1.1.5: resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-buffer@^2.0.3, is-buffer@^2.0.5: +is-buffer@^2.0.5: version "2.0.5" resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== @@ -10945,14 +10876,6 @@ is-module@^1.0.0: resolved "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz" integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= -is-nan@^1.3.0: - version "1.3.2" - resolved "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz" - integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - is-negated-glob@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz" @@ -11187,14 +11110,6 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= -isomorphic-fetch@3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz" - integrity sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA== - dependencies: - node-fetch "^2.6.1" - whatwg-fetch "^3.4.1" - isomorphic-fetch@^2.1.1, isomorphic-fetch@^2.2.1: version "2.2.1" resolved "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz" @@ -12716,27 +12631,11 @@ lodash@4.17.21, "lodash@>=3.5 <5", lodash@^4, lodash@^4.0.0, lodash@^4.17.10, lo resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log4js@^4.5.1: - version "4.5.1" - resolved "https://registry.npmjs.org/log4js/-/log4js-4.5.1.tgz" - integrity sha512-EEEgFcE9bLgaYUKuozyFfytQM2wDHtXn4tAN41pkaxpNjAykv11GVdeI4tHtmPWW4Xrgh9R/2d7XYghDVjbKKw== - dependencies: - date-format "^2.0.0" - debug "^4.1.1" - flatted "^2.0.0" - rfdc "^1.1.4" - streamroller "^1.0.6" - loglevel@^1.4.0, loglevel@^1.6.1, loglevel@^1.6.8: version "1.7.1" resolved "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz" integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== -long-timeout@0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/long-timeout/-/long-timeout-0.1.1.tgz" - integrity sha1-lyHXiLR+C8taJMLivuGg2lXatRQ= - loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" @@ -13159,19 +13058,12 @@ mkdirp@^1.0.3, mkdirp@^1.0.4: resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -moment-timezone@^0.5.31: - version "0.5.33" - resolved "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.33.tgz" - integrity sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w== - dependencies: - moment ">= 2.9.0" - moment@2.22.2: version "2.22.2" resolved "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz" integrity sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y= -"moment@>= 2.9.0", moment@^2.22.1, moment@^2.24.0, moment@^2.29.1: +moment@^2.22.1, moment@^2.24.0, moment@^2.29.1: version "2.29.4" resolved "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz" integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== @@ -13313,10 +13205,12 @@ node-fetch@^1.0.1: encoding "^0.1.11" is-stream "^1.0.1" -node-fetch@^2.6.1: - version "2.6.2" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.2.tgz" - integrity sha512-aLoxToI6RfZ+0NOjmWAgn9+LEd30YCkJKFSyWacNZdEKTit/ZMcKjGkTRo8uWEsnIb/hfKecNPEbln02PdWbcA== +node-fetch@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" node-forge@^0.10.0: version "0.10.0" @@ -13399,15 +13293,6 @@ node-releases@^2.0.1: resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz" integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== -node-schedule@^1.3.2: - version "1.3.3" - resolved "https://registry.npmjs.org/node-schedule/-/node-schedule-1.3.3.tgz" - integrity sha512-uF9Ubn6luOPrcAYKfsXWimcJ1tPFtQ8I85wb4T3NgJQrXazEzojcFZVk46ZlLHby3eEJChgkV/0T689IsXh2Gw== - dependencies: - cron-parser "^2.18.0" - long-timeout "0.1.1" - sorted-array-functions "^1.3.0" - normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" @@ -15039,6 +14924,11 @@ proxy-addr@~2.0.5: forwarded "0.2.0" ipaddr.js "1.9.1" +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" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + prr@~1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz" @@ -15126,7 +15016,12 @@ qs@6.7.0: resolved "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== -qs@^6.7.0, qs@^6.9.0: +qs@6.9.7: + version "6.9.7" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.7.tgz#4610846871485e1e048f44ae3b94033f0e675afe" + integrity sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw== + +qs@^6.7.0: version "6.10.1" resolved "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz" integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg== @@ -15927,11 +15822,6 @@ rework@1.0.1: convert-source-map "^0.3.3" css "^2.0.0" -rfdc@^1.1.4: - version "1.3.0" - resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== - rgb-regex@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz" @@ -16449,11 +16339,6 @@ sort-keys@^1.0.0: dependencies: is-plain-obj "^1.0.0" -sorted-array-functions@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz" - integrity sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA== - sortobject@^1.1.1: version "1.3.0" resolved "https://registry.npmjs.org/sortobject/-/sortobject-1.3.0.tgz" @@ -16682,17 +16567,6 @@ stream-shift@^1.0.0: resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz" integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== -streamroller@^1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/streamroller/-/streamroller-1.0.6.tgz" - integrity sha512-3QC47Mhv3/aZNFpDDVO44qQb9gwB9QggMEE0sQmkTAwBVYdBRWISdsywlkfm5II1Q5y/pmrHflti/IgmIzdDBg== - dependencies: - async "^2.6.2" - date-format "^2.0.0" - debug "^3.2.6" - fs-extra "^7.0.1" - lodash "^4.17.14" - strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz" @@ -17374,6 +17248,11 @@ tr46@^2.1.0: dependencies: punycode "^2.1.1" +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + trim-right@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz" @@ -17982,6 +17861,11 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + webidl-conversions@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz" @@ -18169,6 +18053,14 @@ whatwg-mimetype@^2.3.0: resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + whatwg-url@^8.0.0, whatwg-url@^8.5.0: version "8.7.0" resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz" @@ -18515,14 +18407,6 @@ yargs-parser@^13.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^15.0.1: - version "15.0.3" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.3.tgz" - integrity sha512-/MVEVjTXy/cGAjdtQf8dW3V9b97bPN7rNn8ETj6BmAQL7ibC7O1Q9SPJbGjgh3SlwoBNXMzj/ZGIj8mBgl12YA== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - yargs-parser@^18.1.2: version "18.1.3" resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz" @@ -18555,23 +18439,6 @@ yargs@^13.3.2: y18n "^4.0.0" yargs-parser "^13.1.2" -yargs@^14.0.0: - version "14.2.3" - resolved "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz" - integrity sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg== - dependencies: - cliui "^5.0.0" - decamelize "^1.2.0" - find-up "^3.0.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" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^15.0.1" - yargs@^15.4.1: version "15.4.1" resolved "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz"