From d6fe0890ccd1b31e08f488154236d65700bec049 Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 17 Jan 2023 10:11:25 +0100 Subject: [PATCH 01/84] Added Google Ads API to setup script --- setup/post-create.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/setup/post-create.sh b/setup/post-create.sh index 9e89649..f561dcc 100755 --- a/setup/post-create.sh +++ b/setup/post-create.sh @@ -28,6 +28,10 @@ gcloud services enable appengine.googleapis.com --no-user-output-enabled echo "Enabling API: DV360..." gcloud services enable displayvideo.googleapis.com --no-user-output-enabled +# Enable Google Ads API +echo "Enabling API: Google Ads..." +gcloud services enable googleads.googleapis.com --no-user-output-enabled + # Enable Google Maps API (for the UI location autocompletion) echo "Enabling API: Google Maps..." gcloud services enable places-backend.googleapis.com --no-user-output-enabled From bcc15161c5e975d513e2f1a83feb57fab3763316 Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 17 Jan 2023 10:13:15 +0100 Subject: [PATCH 02/84] Added instructions on dev environment setup --- README.md | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7dac995..1acce23 100644 --- a/README.md +++ b/README.md @@ -32,12 +32,14 @@ On the marketing activation side we support the following platforms: *Keywords: Weather Based Marketing, External Signal Based Marketing, Pollen Based Marketing, AirQuality Based Marketing, Rule-based Marketing.* ## The Problem that we solve + * Advertisers want to show their ads as targeted as possible to reach the right audience at the right time * Managing ad campaigns in response to real-time events like weather, pollen data or air quality can be challenging to impossible (just imagine, manually switching hundreds of ad groups on a daily basis... it is really time consuming and an error-prone) Our tool will do this for you automatically! ## Is IFTTA for you? + Basically all advertisers can benefit from this solution and especially those that clearly see a correlation between the real world factors (e.g. weather) and sales (or other marketing KPIs). Some examples to ignite the imagination (based on our experience): @@ -48,15 +50,19 @@ Some examples to ignite the imagination (based on our experience): * Healthcare companies can advertise based on the pollen index and/or the air quality ## Benefits you get + * Ads will reach their audience at the right time under the right circumstances * Advertisers can automate their campaign management in response to real-time events * Personalized ads and WOW effect on the end user side (since the user will see the right ad at the right time) ## Setup + ### Prerequisities + Basic Google Cloud knowledge and a Google Cloud project with [enabled billing](https://cloud.google.com/billing/docs/how-to/modify-project) are required. ### Step-by-step guide + With the following simple steps you can install IFTTA on your [Google Cloud](https://cloud.google.com/resource-manager/docs/creating-managing-projects) project. The installation below is partly automated, this means that you will need to do some manual steps at the beginning and at the end the installation script (the big blue button below) will do the rest. @@ -94,23 +100,46 @@ We love to hear your feedback! Please [create an issue](https://github.com/googl ## Development +### Local dev setup + +1. Clone this repository +1. Complete the step-by-step guide above +1. Create a new [GCP Service Account](https://console.cloud.google.com/iam-admin/serviceaccounts) (or add another key for it, if it already exists) +1. Download the `.json` credentials +1. Rename `server/.env.sample` to `server/.env` +1. Add all missing values to `server/.env` +1. Go to `server/` +1. To set up and start the server, run: + - `npm run build-local` + - `npm run dev` +1. Go to `client/` +1. To set up and start the client, run: + - `sudo npm i -g @angular/cli` + - `npm i` + - `ng serve --ssl` +1. The application is running at https://localhost:4200 + ### Git: Pre commit To do all the checks before the commit automatically please add the [git/pre-commit](git/pre-commit) to your `.git/hooks/` directory. The easiest way would be to create a soft link: `cd .git/hooks/; ln -sf ../../git/pre-commit`. -To run all checks manually you can execute the following code from the project root: +To run all checks manually you can execute the following commands from the project root: - For server: `cd server; npm run pre-commit`. - For client: `cd client; npm run pre-commit`. # Do you like our tool? + You can start contributing by sending pull requests right now! Also you can give us a star on our [GitHub page](https://github.com/google/if-this-then-ad) ;-) # Troubleshooting + ## Authorization Error (redirect_uri_mismatch) + This usually originates from not having the **Authorized redirect URI** set properly. -To do that: + +Here's how to fix it: 1. Go to [Cloud Credentials](https://console.cloud.google.com/apis/credentials) 1. Select the right project 1. Click on the **if-this-then-ad** OAuth 2.0 Client ID From 0b62943a4a14e4a7bb6bd95adbbdff08f9848c28 Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 17 Jan 2023 10:14:12 +0100 Subject: [PATCH 03/84] Changed document title --- client/src/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/index.html b/client/src/index.html index a5df2e0..c64d008 100644 --- a/client/src/index.html +++ b/client/src/index.html @@ -15,7 +15,7 @@ - Client + If This Then Ad From e8f5d61ee2f7563002a0398ee5fd0743af14dda3 Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 17 Jan 2023 10:42:58 +0100 Subject: [PATCH 04/84] Added Ads account selector --- .../add-rule/add-rule.component.html | 2 +- .../googleads-selector.component.html | 17 ++++++++- .../googleads-selector.component.ts | 27 +++++++++---- .../google-ads/google-ads-agent.ts | 38 ++++++++++++------- 4 files changed, 61 insertions(+), 23 deletions(-) diff --git a/client/src/app/components/add-rule/add-rule.component.html b/client/src/app/components/add-rule/add-rule.component.html index 1aa20c7..7d09371 100644 --- a/client/src/app/components/add-rule/add-rule.component.html +++ b/client/src/app/components/add-rule/add-rule.component.html @@ -221,7 +221,7 @@

Application to target

DV360 - +
-
+
+
+ + Account ID + + + + +
+
+

Select Ad Groups

diff --git a/client/src/app/components/googleads-selector/googleads-selector.component.ts b/client/src/app/components/googleads-selector/googleads-selector.component.ts index 36b48b1..4778098 100644 --- a/client/src/app/components/googleads-selector/googleads-selector.component.ts +++ b/client/src/app/components/googleads-selector/googleads-selector.component.ts @@ -13,6 +13,7 @@ import { HttpClient } from '@angular/common/http'; import { AfterViewInit, Component, ViewChild } from '@angular/core'; +import { FormBuilder, FormGroup } from '@angular/forms'; import { MatPaginator } from '@angular/material/paginator'; import { MatTableDataSource } from '@angular/material/table'; import { @@ -35,12 +36,13 @@ interface AdGroup { status: string; } +const ACCOUNT_ID_IDENITFIER = 'accountId'; + @Component({ selector: 'app-googleads-selector', templateUrl: './googleads-selector.component.html', styleUrls: ['./googleads-selector.component.scss'], }) - /** * Google ad groups selector component */ @@ -48,7 +50,9 @@ export class GoogleAdsSelectorComponent implements AfterViewInit { adGroupEnabled = faCircle; adGroupDisabled = faCirclePause; faRefresh = faRefresh; - isLoading = true; + isLoading = false; + account: FormGroup; + accountId: string; adGroups: AdGroup[] = []; displayedColumns: string[] = ['status', 'name', 'campaignName', 'type', 'id']; selectedRows = new Set(); @@ -60,7 +64,11 @@ export class GoogleAdsSelectorComponent implements AfterViewInit { * * @param {HttpClient} http Http client */ - constructor(private http: HttpClient) {} + constructor(private http: HttpClient, private formBuilder: FormBuilder) { + const group: { [key: string]: string } = {}; + group[ACCOUNT_ID_IDENITFIER] = ''; + this.account = this.formBuilder.group(group); + } // eslint-disable-next-line require-jsdoc ngAfterViewInit() { @@ -70,7 +78,9 @@ export class GoogleAdsSelectorComponent implements AfterViewInit { /** * Fetch Google ads data to display */ - ngOnInit(): void { + onSubmit() { + this.accountId = this.account.value[ACCOUNT_ID_IDENITFIER]; + this.fetchAccountData(); } @@ -126,10 +136,13 @@ export class GoogleAdsSelectorComponent implements AfterViewInit { * Fetch Google Ads account data. */ private fetchAccountData() { + this.isLoading = true; this.http - .get( - `${environment.apiUrl}/agents/googleads-agent/list/adgroups` - ) + .get(`${environment.apiUrl}/agents/google-ads/list/adgroup`, { + params: { + customerAccountId: this.accountId, + }, + }) .pipe(map((res: AdGroup[]) => res)) .subscribe((adGroups) => { this.adGroups = adGroups; diff --git a/server/agents/target-agents/google-ads/google-ads-agent.ts b/server/agents/target-agents/google-ads/google-ads-agent.ts index 90bf06c..41e816f 100644 --- a/server/agents/target-agents/google-ads/google-ads-agent.ts +++ b/server/agents/target-agents/google-ads/google-ads-agent.ts @@ -11,7 +11,7 @@ limitations under the License. */ -import { GaxiosOptions } from 'gaxios'; +import { GaxiosError, GaxiosOptions } from 'gaxios'; import { OAuth2Client } from 'google-auth-library'; import { OperationResult } from '../../../common/common'; import { @@ -181,13 +181,16 @@ export class GoogleAdsAgent implements TargetAgent { requestorSettings: Record ): Promise { const client = googleAuthService.getAuthorizedClientForUser(requestor); - const customerAccountId = parameters['customerAccountId'] as string; + const customerAccountId = + 'customerAccountId' in parameters + ? (parameters['customerAccountId'] as string) + : (requestorSettings['GOOGLEADS_ACCOUNT_ID'] as string); const developerToken = requestorSettings['GOOGLEADS_DEV_TOKEN'] as string; const managerAccountId = requestorSettings[ 'GOOGLEADS_MANAGER_ACCOUNT_ID' ] as string; - if (type === 'adGroup') { + if (type.toLowerCase() === 'adgroup') { const query = `SELECT ad_group.name, campaign.id, campaign.name, @@ -198,17 +201,24 @@ export class GoogleAdsAgent implements TargetAgent { FROM ad_group WHERE ad_group.status != 'REMOVED'`; - const response = await client.request< - GoogleAdsQueryResult - >({ - url: `${GOOGLEADS_API_URL}/customers/${customerAccountId}/googleAds:search`, - data: { query }, - method: 'POST', - headers: { - 'developer-token': developerToken, - 'login-customer-id': parseInt(managerAccountId), - }, - }); + let response; + + try { + response = await client.request< + GoogleAdsQueryResult + >({ + url: `${GOOGLEADS_API_URL}/customers/${customerAccountId}/googleAds:search`, + data: { query }, + method: 'POST', + headers: { + 'developer-token': developerToken, + 'login-customer-id': parseInt(managerAccountId), + }, + }); + } catch (err) { + console.log(err); + response = (err as GaxiosError).response; + } if (response.status !== 200 || response.data === undefined) { return { From 1a333609b9d6f0b6bad1784a3ff622bcc170a5e4 Mon Sep 17 00:00:00 2001 From: paranerd Date: Mon, 6 Mar 2023 11:18:45 +0100 Subject: [PATCH 05/84] Built IFTTA v2 --- client/src/assets/.gitkeep => .claspignore | 0 .eslintignore | 2 + client/.eslintrc.js => .eslintrc.js | 12 +- .gitignore | 13 +- .dockerignore => .prettierignore | 2 +- client/.prettierrc => .prettierrc | 0 Dockerfile | 38 - README.md | 366 +- add-licence-headers.sh | 52 - app.json | 46 - appsscript.json | 28 + client/.browserslistrc | 16 - client/.editorconfig | 16 - client/.gitignore | 48 - client/README.md | 40 - client/angular.json | 117 - client/karma.conf.js | 57 - client/package-lock.json | 24535 ---------------- client/package.json | 57 - client/src/app/app-routing.module.ts | 61 - client/src/app/app.component.html | 70 - client/src/app/app.component.scss | 47 - client/src/app/app.component.spec.ts | 46 - client/src/app/app.component.ts | 64 - client/src/app/app.module.ts | 108 - .../add-rule/add-rule.component.html | 301 - .../add-rule/add-rule.component.scss | 78 - .../add-rule/add-rule.component.spec.ts | 37 - .../components/add-rule/add-rule.component.ts | 300 - .../app/components/dash/dash.component.html | 47 - .../app/components/dash/dash.component.scss | 49 - .../components/dash/dash.component.spec.ts | 37 - .../src/app/components/dash/dash.component.ts | 69 - .../googleads-selector.component.html | 98 - .../googleads-selector.component.scss | 56 - .../googleads-selector.component.spec.ts | 37 - .../googleads-selector.component.ts | 154 - .../components/header/header.component.html | 82 - .../components/header/header.component.scss | 82 - .../header/header.component.spec.ts | 37 - .../app/components/header/header.component.ts | 60 - .../location-auto-complete/config.ts | 16 - .../location-auto-complete.component.html | 26 - .../location-auto-complete.component.scss | 21 - .../location-auto-complete.component.spec.ts | 37 - .../location-auto-complete.component.ts | 353 - .../app/components/login/login.component.html | 21 - .../app/components/login/login.component.scss | 46 - .../components/login/login.component.spec.ts | 37 - .../app/components/login/login.component.ts | 63 - .../missing-settings-dialog.component.html | 36 - .../missing-settings-dialog.component.scss | 13 - .../missing-settings-dialog.component.spec.ts | 37 - .../missing-settings-dialog.component.ts | 47 - .../rules-status/rules.status.component.html | 79 - .../rules-status/rules.status.component.scss | 65 - .../rules.status.component.spec.ts | 37 - .../rules-status/rules.status.component.ts | 111 - .../app/components/rules/rules.component.html | 124 - .../app/components/rules/rules.component.scss | 51 - .../components/rules/rules.component.spec.ts | 37 - .../app/components/rules/rules.component.ts | 155 - .../target-selector.component.html | 81 - .../target-selector.component.scss | 25 - .../target-selector.component.spec.ts | 37 - .../target-selector.component.ts | 289 - .../user-settings.component.html | 54 - .../user-settings.component.scss | 34 - .../user-settings.component.spec.ts | 37 - .../user-settings/user-settings.component.ts | 193 - .../app/interceptors/auth.interceptor.spec.ts | 29 - .../src/app/interceptors/auth.interceptor.ts | 92 - client/src/app/interceptors/index.ts | 23 - client/src/app/interfaces/api.ts | 20 - client/src/app/interfaces/common.ts | 65 - client/src/app/interfaces/rule.ts | 94 - client/src/app/interfaces/source.ts | 151 - client/src/app/interfaces/target.ts | 79 - client/src/app/interfaces/user.ts | 33 - .../models/dynamic-data-source.model.spec.ts | 20 - .../app/models/dynamic-data-source.model.ts | 155 - .../app/models/dynamic-database.model.spec.ts | 20 - .../src/app/models/dynamic-database.model.ts | 154 - .../src/app/models/entity-node.model.spec.ts | 20 - client/src/app/models/entity-node.model.ts | 53 - .../interval-format.pipe.spec.ts | 21 - .../interval-format/interval-format.pipe.ts | 37 - .../string-replace.pipe.spec.ts | 21 - .../string-replace/string-replace.pipe.ts | 33 - client/src/app/services/agents.service.ts | 68 - client/src/app/services/auth.guard.spec.ts | 29 - client/src/app/services/auth.guard.ts | 65 - client/src/app/services/auth.service.spec.ts | 29 - client/src/app/services/auth.service.ts | 103 - client/src/app/services/rules.service.ts | 86 - client/src/app/services/user.service.spec.ts | 29 - client/src/app/services/user.service.ts | 116 - client/src/app/store/index.ts | 45 - client/src/assets/img/ads.png | Bin 11317 -> 0 bytes .../btn_google_signin_dark_disabled_web.png | Bin 2308 -> 0 bytes .../img/btn_google_signin_dark_focus_web.png | Bin 4185 -> 0 bytes .../img/btn_google_signin_dark_normal_web.png | Bin 3983 -> 0 bytes .../btn_google_signin_dark_pressed_web.png | Bin 4236 -> 0 bytes client/src/assets/img/dv360.png | Bin 4512 -> 0 bytes client/src/assets/img/iftta-banner.png | Bin 36435 -> 0 bytes client/src/assets/style/normalize.scss | 364 - client/src/assets/style/reset.scss | 55 - client/src/assets/style/responsive.scss | 177 - client/src/environments/environment.prod.ts | 17 - client/src/environments/environment.ts | 30 - client/src/favicon.ico | Bin 15406 -> 0 bytes client/src/index.html | 29 - client/src/main.ts | 26 - client/src/polyfills.ts | 66 - client/src/proxy.conf.json | 9 - client/src/styles.scss | 57 - client/src/test.ts | 39 - client/tsconfig.app.json | 15 - client/tsconfig.json | 32 - client/tsconfig.spec.json | 18 - cloudbuild.yaml | 67 - git/pre-commit | 67 - img/api-notation-agg.png | Bin 0 -> 69369 bytes img/api-notation.png | Bin 0 -> 69935 bytes img/dynamic-column-notation-headers-2.png | Bin 0 -> 26601 bytes img/dynamic-column-notation-headers.png | Bin 0 -> 28652 bytes img/dynamic-column-notation-params.png | Bin 0 -> 26628 bytes ...ynamic-column-notation-result-agg-json.png | Bin 0 -> 136813 bytes img/dynamic-column-notation-result-agg.png | Bin 0 -> 22352 bytes img/dynamic-column-notation-result-json.png | Bin 0 -> 135024 bytes img/dynamic-column-notation-result.png | Bin 0 -> 26821 bytes imgs/demo-video.png | Bin 49026 -> 0 bytes jest.config.js | 5 + license-headers/html | 12 - license-headers/js | 12 - license-headers/md | 12 - license-headers/scss | 12 - license-headers/ts | 12 - license-headers/yaml | 13 - server/package-lock.json => package-lock.json | 12330 ++++---- package.json | 32 + rollup.config.mjs | 32 + server/.eslintignore | 6 - server/.eslintrc.js | 42 - server/.example_env | 11 - server/.prettierignore | 11 - server/.prettierrc | 4 - .../source-agents/ambee/ambee-agent.test.ts | 175 - .../agents/source-agents/ambee/ambee-agent.ts | 151 - .../open-weather/open-weather-agent.test.ts | 201 - .../open-weather/open-weather-agent.ts | 135 - .../source-agents/simple-source-agent.ts | 162 - .../dv360-ads/dv360-agent.test.ts | 460 - .../target-agents/dv360-ads/dv360-agent.ts | 298 - .../dv360-ads/dv360-api-client.test.ts | 425 - .../dv360-ads/dv360-api-client.ts | 357 - .../google-ads/google-ads-agent.test.ts | 238 - .../google-ads/google-ads-agent.ts | 243 - server/app.ts | 122 - server/auth/google-auth.ts | 290 - server/collections/firebase-collection.ts | 285 - server/collections/users-collection.ts | 31 - server/common/common.ts | 53 - server/common/rule.ts | 94 - server/common/source.ts | 151 - server/common/target.ts | 79 - server/common/user.ts | 34 - server/controllers/account-controller.ts | 90 - server/controllers/agents-controller.ts | 72 - server/controllers/auth-controller.ts | 128 - server/controllers/rules-controller.ts | 156 - server/docs/README.md | 26 - .../docs/imgs/agent-dv360-ads-interface.png | Bin 439578 -> 0 bytes .../docs/imgs/agent-openweather-interface.png | Bin 192073 -> 0 bytes .../imgs/iftta-client-server-architecture.png | Bin 197520 -> 0 bytes server/docs/refresh-token.json | 4 - server/docs/rule-payload.json | 46 - server/index.ts | 27 - server/jest.config.js | 22 - server/package.json | 86 - server/public/.gitkeep | 0 server/routes/index.ts | 103 - server/services/agents-service.ts | 84 - server/services/collections-service.ts | 61 - server/services/conditions-service.test.ts | 71 - server/services/conditions-service.ts | 62 - server/services/google-auth-service.ts | 50 - server/services/rules-service.ts | 329 - server/tsconfig.json | 24 - server/util/error.ts | 65 - server/util/logger.ts | 73 - setup/post-create.sh | 73 - src/config.ts | 39 + src/external/ads-script/agent.js | 217 + src/external/ads-script/api.js | 111 + src/external/ads-script/base.js | 65 + src/external/ads-script/config.js | 34 + src/external/ads-script/index.js | 94 + src/external/ads-script/sheets.js | 88 + src/helpers/api.ts | 149 + src/helpers/auth.ts | 93 + src/helpers/dynamic-column-headers.ts | 94 + src/helpers/jpath.ts | 105 + src/helpers/sheets.ts | 169 + src/helpers/utils.ts | 31 + src/index.ts | 369 + src/target-agents/agent.sample.ts | 62 + src/target-agents/base.ts | 84 + src/target-agents/dv360.ts | 282 + src/target-agents/google-ads.ts | 431 + src/target-agents/index.ts | 21 + src/test/api.test.ts | 32 + src/test/dynamic-column-headers.test.ts | 148 + src/test/jpath.test.ts | 84 + tsconfig.json | 103 + 215 files changed, 8778 insertions(+), 44594 deletions(-) rename client/src/assets/.gitkeep => .claspignore (100%) create mode 100644 .eslintignore rename client/.eslintrc.js => .eslintrc.js (68%) rename .dockerignore => .prettierignore (68%) rename client/.prettierrc => .prettierrc (100%) delete mode 100644 Dockerfile delete mode 100755 add-licence-headers.sh delete mode 100644 app.json create mode 100644 appsscript.json delete mode 100644 client/.browserslistrc delete mode 100644 client/.editorconfig delete mode 100644 client/.gitignore delete mode 100644 client/README.md delete mode 100644 client/angular.json delete mode 100644 client/karma.conf.js delete mode 100644 client/package-lock.json delete mode 100644 client/package.json delete mode 100644 client/src/app/app-routing.module.ts delete mode 100644 client/src/app/app.component.html delete mode 100644 client/src/app/app.component.scss delete mode 100644 client/src/app/app.component.spec.ts delete mode 100644 client/src/app/app.component.ts delete mode 100644 client/src/app/app.module.ts delete mode 100644 client/src/app/components/add-rule/add-rule.component.html delete mode 100644 client/src/app/components/add-rule/add-rule.component.scss delete mode 100644 client/src/app/components/add-rule/add-rule.component.spec.ts delete mode 100644 client/src/app/components/add-rule/add-rule.component.ts delete mode 100644 client/src/app/components/dash/dash.component.html delete mode 100644 client/src/app/components/dash/dash.component.scss delete mode 100644 client/src/app/components/dash/dash.component.spec.ts delete mode 100644 client/src/app/components/dash/dash.component.ts delete mode 100644 client/src/app/components/googleads-selector/googleads-selector.component.html delete mode 100644 client/src/app/components/googleads-selector/googleads-selector.component.scss delete mode 100644 client/src/app/components/googleads-selector/googleads-selector.component.spec.ts delete mode 100644 client/src/app/components/googleads-selector/googleads-selector.component.ts delete mode 100644 client/src/app/components/header/header.component.html delete mode 100644 client/src/app/components/header/header.component.scss delete mode 100644 client/src/app/components/header/header.component.spec.ts delete mode 100644 client/src/app/components/header/header.component.ts delete mode 100644 client/src/app/components/location-auto-complete/config.ts delete mode 100644 client/src/app/components/location-auto-complete/location-auto-complete.component.html delete mode 100644 client/src/app/components/location-auto-complete/location-auto-complete.component.scss delete mode 100644 client/src/app/components/location-auto-complete/location-auto-complete.component.spec.ts delete mode 100644 client/src/app/components/location-auto-complete/location-auto-complete.component.ts delete mode 100644 client/src/app/components/login/login.component.html delete mode 100644 client/src/app/components/login/login.component.scss delete mode 100644 client/src/app/components/login/login.component.spec.ts delete mode 100644 client/src/app/components/login/login.component.ts delete mode 100644 client/src/app/components/missing-settings-dialog/missing-settings-dialog.component.html delete mode 100644 client/src/app/components/missing-settings-dialog/missing-settings-dialog.component.scss delete mode 100644 client/src/app/components/missing-settings-dialog/missing-settings-dialog.component.spec.ts delete mode 100644 client/src/app/components/missing-settings-dialog/missing-settings-dialog.component.ts delete mode 100644 client/src/app/components/rules-status/rules.status.component.html delete mode 100644 client/src/app/components/rules-status/rules.status.component.scss delete mode 100644 client/src/app/components/rules-status/rules.status.component.spec.ts delete mode 100644 client/src/app/components/rules-status/rules.status.component.ts delete mode 100644 client/src/app/components/rules/rules.component.html delete mode 100644 client/src/app/components/rules/rules.component.scss delete mode 100644 client/src/app/components/rules/rules.component.spec.ts delete mode 100644 client/src/app/components/rules/rules.component.ts delete mode 100644 client/src/app/components/target-selector/target-selector.component.html delete mode 100644 client/src/app/components/target-selector/target-selector.component.scss delete mode 100644 client/src/app/components/target-selector/target-selector.component.spec.ts delete mode 100644 client/src/app/components/target-selector/target-selector.component.ts delete mode 100644 client/src/app/components/user-settings/user-settings.component.html delete mode 100644 client/src/app/components/user-settings/user-settings.component.scss delete mode 100644 client/src/app/components/user-settings/user-settings.component.spec.ts delete mode 100644 client/src/app/components/user-settings/user-settings.component.ts delete mode 100644 client/src/app/interceptors/auth.interceptor.spec.ts delete mode 100644 client/src/app/interceptors/auth.interceptor.ts delete mode 100644 client/src/app/interceptors/index.ts delete mode 100644 client/src/app/interfaces/api.ts delete mode 100644 client/src/app/interfaces/common.ts delete mode 100644 client/src/app/interfaces/rule.ts delete mode 100644 client/src/app/interfaces/source.ts delete mode 100644 client/src/app/interfaces/target.ts delete mode 100644 client/src/app/interfaces/user.ts delete mode 100644 client/src/app/models/dynamic-data-source.model.spec.ts delete mode 100644 client/src/app/models/dynamic-data-source.model.ts delete mode 100644 client/src/app/models/dynamic-database.model.spec.ts delete mode 100644 client/src/app/models/dynamic-database.model.ts delete mode 100644 client/src/app/models/entity-node.model.spec.ts delete mode 100644 client/src/app/models/entity-node.model.ts delete mode 100644 client/src/app/pipes/interval-format/interval-format.pipe.spec.ts delete mode 100644 client/src/app/pipes/interval-format/interval-format.pipe.ts delete mode 100644 client/src/app/pipes/string-replace/string-replace.pipe.spec.ts delete mode 100644 client/src/app/pipes/string-replace/string-replace.pipe.ts delete mode 100644 client/src/app/services/agents.service.ts delete mode 100644 client/src/app/services/auth.guard.spec.ts delete mode 100644 client/src/app/services/auth.guard.ts delete mode 100644 client/src/app/services/auth.service.spec.ts delete mode 100644 client/src/app/services/auth.service.ts delete mode 100644 client/src/app/services/rules.service.ts delete mode 100644 client/src/app/services/user.service.spec.ts delete mode 100644 client/src/app/services/user.service.ts delete mode 100644 client/src/app/store/index.ts delete mode 100644 client/src/assets/img/ads.png delete mode 100644 client/src/assets/img/btn_google_signin_dark_disabled_web.png delete mode 100644 client/src/assets/img/btn_google_signin_dark_focus_web.png delete mode 100644 client/src/assets/img/btn_google_signin_dark_normal_web.png delete mode 100644 client/src/assets/img/btn_google_signin_dark_pressed_web.png delete mode 100644 client/src/assets/img/dv360.png delete mode 100644 client/src/assets/img/iftta-banner.png delete mode 100644 client/src/assets/style/normalize.scss delete mode 100644 client/src/assets/style/reset.scss delete mode 100644 client/src/assets/style/responsive.scss delete mode 100644 client/src/environments/environment.prod.ts delete mode 100644 client/src/environments/environment.ts delete mode 100644 client/src/favicon.ico delete mode 100644 client/src/index.html delete mode 100644 client/src/main.ts delete mode 100644 client/src/polyfills.ts delete mode 100644 client/src/proxy.conf.json delete mode 100644 client/src/styles.scss delete mode 100644 client/src/test.ts delete mode 100644 client/tsconfig.app.json delete mode 100644 client/tsconfig.json delete mode 100644 client/tsconfig.spec.json delete mode 100644 cloudbuild.yaml delete mode 100755 git/pre-commit create mode 100644 img/api-notation-agg.png create mode 100644 img/api-notation.png create mode 100644 img/dynamic-column-notation-headers-2.png create mode 100644 img/dynamic-column-notation-headers.png create mode 100644 img/dynamic-column-notation-params.png create mode 100644 img/dynamic-column-notation-result-agg-json.png create mode 100644 img/dynamic-column-notation-result-agg.png create mode 100644 img/dynamic-column-notation-result-json.png create mode 100644 img/dynamic-column-notation-result.png delete mode 100644 imgs/demo-video.png create mode 100644 jest.config.js delete mode 100644 license-headers/html delete mode 100644 license-headers/js delete mode 100644 license-headers/md delete mode 100644 license-headers/scss delete mode 100644 license-headers/ts delete mode 100644 license-headers/yaml rename server/package-lock.json => package-lock.json (52%) create mode 100644 package.json create mode 100644 rollup.config.mjs delete mode 100644 server/.eslintignore delete mode 100644 server/.eslintrc.js delete mode 100644 server/.example_env delete mode 100644 server/.prettierignore delete mode 100644 server/.prettierrc delete mode 100644 server/agents/source-agents/ambee/ambee-agent.test.ts delete mode 100644 server/agents/source-agents/ambee/ambee-agent.ts delete mode 100644 server/agents/source-agents/open-weather/open-weather-agent.test.ts delete mode 100644 server/agents/source-agents/open-weather/open-weather-agent.ts delete mode 100644 server/agents/source-agents/simple-source-agent.ts delete mode 100644 server/agents/target-agents/dv360-ads/dv360-agent.test.ts delete mode 100644 server/agents/target-agents/dv360-ads/dv360-agent.ts delete mode 100644 server/agents/target-agents/dv360-ads/dv360-api-client.test.ts delete mode 100644 server/agents/target-agents/dv360-ads/dv360-api-client.ts delete mode 100644 server/agents/target-agents/google-ads/google-ads-agent.test.ts delete mode 100644 server/agents/target-agents/google-ads/google-ads-agent.ts delete mode 100644 server/app.ts delete mode 100644 server/auth/google-auth.ts delete mode 100644 server/collections/firebase-collection.ts delete mode 100644 server/collections/users-collection.ts delete mode 100644 server/common/common.ts delete mode 100644 server/common/rule.ts delete mode 100644 server/common/source.ts delete mode 100644 server/common/target.ts delete mode 100644 server/common/user.ts delete mode 100644 server/controllers/account-controller.ts delete mode 100644 server/controllers/agents-controller.ts delete mode 100644 server/controllers/auth-controller.ts delete mode 100644 server/controllers/rules-controller.ts delete mode 100644 server/docs/README.md delete mode 100644 server/docs/imgs/agent-dv360-ads-interface.png delete mode 100644 server/docs/imgs/agent-openweather-interface.png delete mode 100644 server/docs/imgs/iftta-client-server-architecture.png delete mode 100644 server/docs/refresh-token.json delete mode 100644 server/docs/rule-payload.json delete mode 100644 server/index.ts delete mode 100644 server/jest.config.js delete mode 100644 server/package.json delete mode 100644 server/public/.gitkeep delete mode 100644 server/routes/index.ts delete mode 100644 server/services/agents-service.ts delete mode 100644 server/services/collections-service.ts delete mode 100644 server/services/conditions-service.test.ts delete mode 100644 server/services/conditions-service.ts delete mode 100644 server/services/google-auth-service.ts delete mode 100644 server/services/rules-service.ts delete mode 100644 server/tsconfig.json delete mode 100644 server/util/error.ts delete mode 100644 server/util/logger.ts delete mode 100755 setup/post-create.sh create mode 100644 src/config.ts create mode 100644 src/external/ads-script/agent.js create mode 100644 src/external/ads-script/api.js create mode 100644 src/external/ads-script/base.js create mode 100644 src/external/ads-script/config.js create mode 100644 src/external/ads-script/index.js create mode 100644 src/external/ads-script/sheets.js create mode 100644 src/helpers/api.ts create mode 100644 src/helpers/auth.ts create mode 100644 src/helpers/dynamic-column-headers.ts create mode 100644 src/helpers/jpath.ts create mode 100644 src/helpers/sheets.ts create mode 100644 src/helpers/utils.ts create mode 100644 src/index.ts create mode 100644 src/target-agents/agent.sample.ts create mode 100644 src/target-agents/base.ts create mode 100644 src/target-agents/dv360.ts create mode 100644 src/target-agents/google-ads.ts create mode 100644 src/target-agents/index.ts create mode 100644 src/test/api.test.ts create mode 100644 src/test/dynamic-column-headers.test.ts create mode 100644 src/test/jpath.test.ts create mode 100644 tsconfig.json diff --git a/client/src/assets/.gitkeep b/.claspignore similarity index 100% rename from client/src/assets/.gitkeep rename to .claspignore diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..3675648 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,2 @@ +node_modules/* +build/* diff --git a/client/.eslintrc.js b/.eslintrc.js similarity index 68% rename from client/.eslintrc.js rename to .eslintrc.js index aa3ab71..7265f31 100644 --- a/client/.eslintrc.js +++ b/.eslintrc.js @@ -1,15 +1,15 @@ module.exports = { env: { browser: true, - es2021: true, + es2020: true, }, - extends: ['google', 'prettier'], - parser: '@typescript-eslint/parser', + extends: ['standard-with-typescript', 'google', 'prettier'], + overrides: [], parserOptions: { - ecmaVersion: 13, + ecmaVersion: 'latest', sourceType: 'module', }, - plugins: ['@typescript-eslint', 'prettier'], + plugins: ['prettier'], rules: { 'valid-jsdoc': [ 2, @@ -31,5 +31,7 @@ module.exports = { trailingComma: 'es5', }, ], + 'no-unused-vars': 'off', + '@typescript-eslint/no-unused-vars': 'error', }, }; diff --git a/.gitignore b/.gitignore index 4ade552..37b761e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,6 @@ -node_modules/ -*/dist/* -dist -notes.txt -.env* -public -!public/.gitkeep +node_modules +dist/ +build/ .DS_Store -credentials.json \ No newline at end of file +.clasp*.json +setup.log diff --git a/.dockerignore b/.prettierignore similarity index 68% rename from .dockerignore rename to .prettierignore index 76add87..dd87e2d 100644 --- a/.dockerignore +++ b/.prettierignore @@ -1,2 +1,2 @@ node_modules -dist \ No newline at end of file +build diff --git a/client/.prettierrc b/.prettierrc similarity index 100% rename from client/.prettierrc rename to .prettierrc diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index b26384c..0000000 --- a/Dockerfile +++ /dev/null @@ -1,38 +0,0 @@ -# Copyright 2021 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Build Angular client -FROM node:16 AS client-build -WORKDIR /app -COPY client/ ./ -RUN npm install -RUN npm run build - -# Build NodeJS server -FROM node:16 AS server-build -WORKDIR /app -COPY server/ ./ -RUN npm run build-dist - -# Merge both builds -FROM node:16 AS final-build -WORKDIR /app -COPY --from=server-build /app/dist/ ./ -COPY --from=client-build /app/dist/client/ ./public - - -# Listen on port 8080 -EXPOSE 8080 - -CMD ["node", "index.js"] diff --git a/README.md b/README.md index 1acce23..0c2a8fa 100644 --- a/README.md +++ b/README.md @@ -1,146 +1,318 @@ - - -# If This Then Ad (IFTTA) - [![build](https://img.shields.io/badge/build-passing-brightgreen?style=flat&logo=github)](https://github.com/google/if-this-then-ad) [![GitHub tag (latest SemVer)](https://img.shields.io/github/v/tag/google/if-this-then-ad?label=release&logo=github)](https://github.com/google/if-this-then-ad) [![GitHub last commit](https://img.shields.io/github/last-commit/google/if-this-then-ad)](https://github.com/google/if-this-then-ad/commits) -[![If This Then Ad (IFFTA)](imgs/demo-video.png)](http://www.youtube.com/watch?v=ugklLFbij-A "If This Then Ad (IFFTA)") -YouTube Link: [youtu.be/ugklLFbij-A](https://youtu.be/ugklLFbij-A). +# If This Then Ad (IFTTA) + +IFTTA enables automatic management of marketing campaigns based on real world events. + +It allows you to query data from virtually any JSON API and control entities in various campaign management tools (e.g. DV360 and Google Ads) in response to the results. + +You can get very creative when using this tool and it's capabilities are only limited by your imagination. Here are some inspirations for what can be achieved: + +- Enable a DV360 Line Item if it's sunny in London + +- Pause Google Ads AdGroup whenever socks of SuperCompany goes below $X + +- Enable all Google Ads that have the label 'performance' if it's raining AND pollen levels are above a certain level + +Why would you want to do this? + +- Control ads to reach their audience at the right time under the right circumstances +- Automate campaign management in response to real-time events +- Personalize ads and create a "WOW" effect for the end user side + +* Show ads as targeted as possible to reach the right audience at the right time +* Manage ad campaigns in response to real-time events like weather, pollen data or air quality! This can be challenging or even impossible (imagine manually switching hundreds of ad groups every day - not only time consuming but also highly error-prone) + +## Prerequisites + +- A copy of the [Google Sheets Template](https://docs.google.com/spreadsheets/d/1EKcPGQ1Vr6LyyQYeYE0-T2gPzNhemVTxsvpSNC5arhE) +- Google Cloud Project with DV360 API enabled +- Any JSON API to be used as data source +- An account for activation (see [Supported Target Agents](#supported-target-agents) below) + +## How it works + +The tool works with "Rules" which describe which source to check how often and which target to manage. + +A rule consists of the following elements: + +- **Rule Name** + + Arbitrary name of your choice for readability + +- **Activation Formula** + + Any sheet formula that returns `TRUE` or `FALSE`. This would usually reference the API result fields (see below). + + For more complex evaluations, please see the section on "Custom Evaluator" below + +- **Update Interval** + + Regularly the fetch and sync processes would be started automatically using an Apps Script `onOpen()` Trigger. This is the default behaviour with Update Interval = 0. + + However, if you would like to realize different intervals between different rules, you can specify them in this column. The number value in this column will be interpreted as "hours". + +- **Target Info** + + Every Target Agent needs at least the following parameters: + + - **Target Identifier** + + This can be various things depending on the Agent. It may be a DV360 Line Item ID, a Google Ads Ad Group Label or something entirely different. + + - **Target ID Type** + + Because the Target Identifier is not one thing for all, the Target ID Type is required to tell the tool what it is working with + + - **Additional Parameters (optional)** + + Depending on the Target Agent additinal information may be required, such as an Advertiser ID, a Developer Token or other (check out [Supported Target Agents](#supported-target-agents) for details). You set them using the `target:` namespace (see [Dynamic Column Notation](#dynamic-column-notation)) + +- **Source Info** + + - **API URL** + + Provide the URL to the API you want to query via `source:url` + + - **Request Headers (optional)** + + If the API you're querying requires any headers to be set (e.g. for authentication), add a column for each one using "Dynamic Column Notation" `source:headers.
` and specify the respective value in the corresponding cell in each row + + - **Query Parameters (optional)** + + If the API you're querying requires any query parameters, add a column for each one using "Dynamic Column Notation" `source:params.` and specify the respective value in the corresponding cell in each row + +- **API Result Paths** + + To extract values from the queried API, add a column for each one using "Dynamic Column Notation" and the namespace `result:`. See [API Result](#api-result) for examples. + +## How to run + +You can trigger the tool either manually using the Sheets menu or schedule an Apps Script Trigger to do it automatically. + +## Dynamic Column Notation + +To be as flexible as possible, IFTTA (Lite) uses "Dynamic Column Notation" to add API specific information like headers and query parameters and also to extract information from the request result. + +### Request Headers + +Using the column title `source:headers.
` lets the tool know to add the respective cell in each row to the request header when querying the API + +**Example:** + +Dynamic Column Notation - Headers + +The resulting request header would be: + +```json +{ + "x-api-key": "abc123", + "x-debug": "my-value" +} +``` + +### Query Parameters + +Encoding query parameters works very similar to request headers, the only difference being the prefix: `source:params` + +**Example:** + +Dynamic Column Notation - Query Parameters + +The resulting url for the first row would look like this: `https://?lat=53.551086&lng=9.993682` + +### API Result + +Similar to setting headers and parameters, the 'Dynamic Column Notation' can also be used to extract data from JSON API results. Using the 'dot notation' we can traverse the JSON result to get to the data point we want to extract. + +Dynamic Column Notation - Results + +Given the above JSON source we could add the following to our Sheet: + +Dynamic Column Notation - Results + +You can also get min and max values from an array like so: + +Dynamic Column Notation - Results + +Given the above JSON source we could add the following to our Sheet: + +Dynamic Column Notation - Results + +## Supported Target Agents + +### DV360 + +**Required parameters** + +- `target:advertiserId` + +**Optional parameters** + +- `target:serviceAccount` + +### Google Ads + +**Required parameters** + +- `target:customerId` +- `target:developerToken` + +**Optional parameters** + +- `target:serviceAccount` + +## Advanced use cases + +### Custom Evaluators + +In case you have rule conditions more complex than what a standard Sheets function could cover, you can easiily extend this by leveraging Apps Script's / Google Sheet's "Custom Functions". + +**Example** + +In the linked Apps Script, add another file `custom.gs` in which you can specify your custom evaluator. + +**Example:** + +```js +function customEvaluator(val1, val2) { + return val1 === 123 && val2 < 3; +} +``` + +You can then reference this function in the "Activation Formula" cell of the respective row: + +``` +=customEvaluator(K3, L3) +``` + +(adjust for your actual function name and input cells) + +Any time any of the referenced cells change, `customEvaluator()` will be called to process the update. + +### Querying Multiple Sources + +You can easily query multiple source APIs to built even more complex conditions by extending the Dynamic Column Notation with a group: + +- `source:url` → `source.1.url` +- `source:params.lat` → `source.1:params.lat` + +Add as many sources as you need by incrementing the group for each one. + +To be able to access the correct API result for evaluation, the respective group is used again for reference: -IFTTA is a game changer in **rule-based marketing**. With our tool you can run marketing campaigns based on real world events. -We already support the following data sources: -* Weather (based on [OpenWeatherMaps API](https://openweathermap.org/)). The Weather conditions that you already can use: temperature, wind speed, cloudiness, rain, snow, thunderstorm. -* Pollen and Air Quality ([Ambee API](https://www.getambee.com/)). +- `result:current.temp` → `result.1:current.temp` +- `result:current.weather.1.main` → `result.1:current.weather.1.main` -On the marketing activation side we support the following platforms: -* [DV360](https://marketingplatform.google.com/intl/de/about/display-video-360/) (via the [DV360 API](https://developers.google.com/display-video/api/reference/rest)) -* [Google Ads](https://ads.google.com/) (via the [Ads API](https://developers.google.com/google-ads/api/docs/release-notes)) +### Custom Result Parser -*Keywords: Weather Based Marketing, External Signal Based Marketing, Pollen Based Marketing, AirQuality Based Marketing, Rule-based Marketing.* +IFTTA is designed to be as flexible as possible to cover just about any use case you could come up with for dynamic marketing. If by any chance you should encounter that JPath is not sufficient to extract the information from API results that you require, IFTTA has another ace up its sleeve: Custom Result Parser! -## The Problem that we solve +Analogue to a Custom Evaluator, to use a Custom Result Parser, you first need a custom function. You're free to (re-)use the `custom.gs` or any other file you like. In this file you add a function with a name of your choosing: -* Advertisers want to show their ads as targeted as possible to reach the right audience at the right time -* Managing ad campaigns in response to real-time events like weather, pollen data or air quality can be challenging to impossible (just imagine, manually switching hundreds of ad groups on a daily basis... it is really time consuming and an error-prone) +**Example:** -Our tool will do this for you automatically! +```js +/** + * Parse and process JSON result. + * + * @param {Object} data + * @param {Object} params + * @returns {string} + */ +function customParser(data, params) { + return 'result'; +} +``` -## Is IFTTA for you? +The function's return value will be written to the corresponding cell cell in each row. -Basically all advertisers can benefit from this solution and especially those that clearly see a correlation between the real world factors (e.g. weather) and sales (or other marketing KPIs). +To call this function, just add another column with the heading: `result:!CUSTOM.customParser`. -Some examples to ignite the imagination (based on our experience): -* Hot beverages can be advertised during the colder weather and cold beverages during the warm weather -* An ice cream company can show ads when it’s hot -* Insurance companies can show ads when there’s a storm or a flood -* A hardware store might show ads for snow shovels when it snowed -* Healthcare companies can advertise based on the pollen index and/or the air quality +If you need any parameters passed to the Custom Parser, you can add those using another column and the heading: `customParser:`. Put the values in the corresponding cells of each row. Add as many columns as you need parameters. The parameters will be passed to the Custom Parser in the following format: -## Benefits you get +```js +{ + parameter1: 'value', + parameter2: 'another value' +} +``` -* Ads will reach their audience at the right time under the right circumstances -* Advertisers can automate their campaign management in response to real-time events -* Personalized ads and WOW effect on the end user side (since the user will see the right ad at the right time) +## Developer Guide -## Setup +### Application Flow -### Prerequisities +Here's a high level overview of what's happening under the hood: -Basic Google Cloud knowledge and a Google Cloud project with [enabled billing](https://cloud.google.com/billing/docs/how-to/modify-project) are required. +#### Fetch -### Step-by-step guide +- Call `main()` in `src/index.ts` with `MODE.FETCH` (or `MODE.FETCH_AND_SYNC`) -With the following simple steps you can install IFTTA on your [Google Cloud](https://cloud.google.com/resource-manager/docs/creating-managing-projects) project. -The installation below is partly automated, this means that you will need to do some manual steps at the beginning and at the end the installation script (the big blue button below) will do the rest. +- Load the entire feed from Sheet and iterate over it row-by-row -1. Create an [OAuth Consent Screen](https://console.cloud.google.com/apis/credentials/consent) +- Check if row is due for update -1. Make it of type "**External**" +- Extract Source parameters using 'Dynamic Column Notation' -1. Add all users you want to have access to the app +- Call API URL for each source -1. Create an [OAuth Client ID](https://console.cloud.google.com/apis/credentials/oauthclient) +- Update the row data accordingly -1. Set Application type to "**Web application**" +- Write back to Sheet -1. Set the name to "**if-this-then-ad**" +#### Sync -1. Take note of the **Client ID** and **Client Secret** presented to you +- Call `main()` in `src/index.ts` with `MODE.SYNC` (or `MODE.FETCH_AND_SYNC`) -1. Click the big blue button to deploy: +- Load the entire feed from Sheet and iterate over it row-by-row - [![Run on Google Cloud](https://deploy.cloud.run/button.svg)](https://deploy.cloud.run) +- Check if row is due for update -1. Choose the Google Cloud Project where you want to deploy the app +- Read the result of the Activation Formula -1. Select the region where you want to deploy +- Extract Target parameters -1. Enter your Client ID and Client Secret when prompted +- Select the corresponding Target Agent -1. Ignore any other prompts, which will get auto-populated +- Call `process()` on the Target Agent to handle updating the specified Target Entity -1. Make sure you add the **Authorized JavaScript origin** as well as the **Authorized redirect URI** presented to you at the end of the script to your OAuth Client +- Update the row data accordingly -## Reporting bugs / feature requests +- Write back to Sheet -We love to hear your feedback! Please [create an issue](https://github.com/google/if-this-then-ad/issues/new) directly on GitHub. Please be **specific** describing your question/bug/feature. +#### Validate -## Development +- Call `main()` in `src/index.ts` with `MODE.SYNC` (or `MODE.FETCH_AND_SYNC`) -### Local dev setup +- Load the entire feed from Sheet and iterate over it row-by-row -1. Clone this repository -1. Complete the step-by-step guide above -1. Create a new [GCP Service Account](https://console.cloud.google.com/iam-admin/serviceaccounts) (or add another key for it, if it already exists) -1. Download the `.json` credentials -1. Rename `server/.env.sample` to `server/.env` -1. Add all missing values to `server/.env` -1. Go to `server/` -1. To set up and start the server, run: - - `npm run build-local` - - `npm run dev` -1. Go to `client/` -1. To set up and start the client, run: - - `sudo npm i -g @angular/cli` - - `npm i` - - `ng serve --ssl` -1. The application is running at https://localhost:4200 +- Read the result of the Activation Formula (supposed state) -### Git: Pre commit +- Extract Target parameters -To do all the checks before the commit automatically please add the [git/pre-commit](git/pre-commit) to your `.git/hooks/` directory. The easiest way would be to create a soft link: `cd .git/hooks/; ln -sf ../../git/pre-commit`. +- Select the corresponding Target Agent -To run all checks manually you can execute the following commands from the project root: +- Call `validate()` on the Target Agent to handle checking actual Entity state against the supposed state -- For server: `cd server; npm run pre-commit`. -- For client: `cd client; npm run pre-commit`. +- Output any errors in case of mismatch -# Do you like our tool? +### How to add a new Target Agent -You can start contributing by sending pull requests right now! -Also you can give us a star on our [GitHub page](https://github.com/google/if-this-then-ad) ;-) +Here's what you need to include a new Target Agent: -# Troubleshooting +1. Use `src/target-agents/agent.sample.ts` as a template for the Target Agent class +1. Set a `friendlyName` of your choice +1. Define `requiredParameters` (optional) +1. Implement the `process()` function +1. Implement the `validate()` function (optional) +1. Add your new Target Agent class to the array in `src/target-agents/index.ts` +1. Deploy your code +1. Update data validation for 'Target Agent' and 'target:type' in the Sheet (optional) -## Authorization Error (redirect_uri_mismatch) +## FAQ -This usually originates from not having the **Authorized redirect URI** set properly. +### I don't have a Google Ads Developer Token (yet). Can I still use IFTTA? -Here's how to fix it: -1. Go to [Cloud Credentials](https://console.cloud.google.com/apis/credentials) -1. Select the right project -1. Click on the **if-this-then-ad** OAuth 2.0 Client ID -1. Add the redirect_uri presented to you in the error message to **Authorized redirect URIs** +While we recommend applying for a Developer Token for the integration to work "natively", it is also possible to separate the fetching and activation part so that you only query the API with IFTTA to then read and process the results using an Ads Script in your Ads account. diff --git a/add-licence-headers.sh b/add-licence-headers.sh deleted file mode 100755 index 812c904..0000000 --- a/add-licence-headers.sh +++ /dev/null @@ -1,52 +0,0 @@ -#! /bin/sh -# Copyright 2022 Google LLC -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# https://www.apache.org/licenses/LICENSE-2.0 -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -YEAR=$(date +%Y) -DIR=$(dirname $0) -LICENSE_HEADERS_DIR="$DIR/license-headers" -FILES_LIST=$(find $DIR -type f \ - -not -path "*/node_modules/*" \ - -not -path "*/dist/*" \ - -not -path "*/.*/*" \ - -not -path "license-headers/*" \ - -not -name ".*" -) - -get_license_by_extension() { - EXTENSION=$(echo $1 | rev | cut -d'.' -f1 | rev) - LICENSE_FILE="${LICENSE_HEADERS_DIR}/${EXTENSION}" - if [ -e "$LICENSE_FILE" ]; then - cat $LICENSE_FILE | sed "s/{{YEAR}}/$YEAR/" - fi -} - -add_license_to_file() { - FILE=$1 - LICENSE=$2 - TMP_FILE=/tmp/licensed-file.$$ - (echo "$LICENSE"; echo; cat $FILE) > $TMP_FILE - mv $TMP_FILE $FILE -} - -FILE_COUNT=0 -for FILE in $FILES_LIST; do - LICENSE_HEADER=$(get_license_by_extension $FILE) - if [ -n "$LICENSE_HEADER" ]; then - LICENSE_HEADER_LENGTH=$(echo "$LICENSE_HEADER" | wc -l | xargs) - FILE_HEAD=$(head -n $LICENSE_HEADER_LENGTH $FILE) - if [ "$FILE_HEAD" != "$LICENSE_HEADER" ]; then - add_license_to_file "$FILE" "$LICENSE_HEADER" - FILE_COUNT=$((FILE_COUNT+1)) - fi - fi -done -echo "License header added to $FILE_COUNT file(s)." \ No newline at end of file diff --git a/app.json b/app.json deleted file mode 100644 index 2b8fb14..0000000 --- a/app.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "if-this-then-ad", - "env": { - "GOOGLE_CLIENT_ID": { - "description": "OAuth 2.0 Client ID", - "required": true, - "order": 1 - }, - "GOOGLE_CLIENT_SECRET": { - "description": "OAuth 2.0 Client Secret", - "required": true, - "order": 2 - }, - "PROJECT_ID": { - "value": " ", - "required": false - }, - "OAUTH_CALLBACK_URL": { - "value": " ", - "required": false - }, - "SESSION_SECRET": { - "value": " ", - "required": false - }, - "LOG_LEVEL": { - "value": "INFO", - "required": false - }, - "NODE_ENV": { - "value": "production", - "required": false - } - }, - "options": { - "allow-unauthenticated": true - }, - "build": { - "skip": false - }, - "hooks": { - "postcreate": { - "commands": ["./setup/post-create.sh"] - } - } -} diff --git a/appsscript.json b/appsscript.json new file mode 100644 index 0000000..ff9c7f9 --- /dev/null +++ b/appsscript.json @@ -0,0 +1,28 @@ +{ + "timeZone": "America/New_York", + "dependencies": { + "enabledAdvancedServices": [ + { + "userSymbol": "Sheets", + "serviceId": "sheets", + "version": "v4" + } + ], + "libraries": [ + { + "userSymbol": "OAuth2", + "libraryId": "1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF", + "version": "35", + "developmentMode": true + } + ] + }, + "exceptionLogging": "STACKDRIVER", + "oauthScopes": [ + "https://www.googleapis.com/auth/adwords", + "https://www.googleapis.com/auth/display-video", + "https://www.googleapis.com/auth/script.external_request", + "https://www.googleapis.com/auth/spreadsheets" + ], + "runtimeVersion": "V8" +} diff --git a/client/.browserslistrc b/client/.browserslistrc deleted file mode 100644 index 4f9ac26..0000000 --- a/client/.browserslistrc +++ /dev/null @@ -1,16 +0,0 @@ -# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. -# For additional information regarding the format and rule options, please see: -# https://github.com/browserslist/browserslist#queries - -# For the full list of supported browsers by the Angular framework, please see: -# https://angular.io/guide/browser-support - -# You can see what browsers were selected by your queries by running: -# npx browserslist - -last 1 Chrome version -last 1 Firefox version -last 2 Edge major versions -last 2 Safari major versions -last 2 iOS major versions -Firefox ESR diff --git a/client/.editorconfig b/client/.editorconfig deleted file mode 100644 index 59d9a3a..0000000 --- a/client/.editorconfig +++ /dev/null @@ -1,16 +0,0 @@ -# Editor configuration, see https://editorconfig.org -root = true - -[*] -charset = utf-8 -indent_style = space -indent_size = 2 -insert_final_newline = true -trim_trailing_whitespace = true - -[*.ts] -quote_type = single - -[*.md] -max_line_length = off -trim_trailing_whitespace = false diff --git a/client/.gitignore b/client/.gitignore deleted file mode 100644 index 8733921..0000000 --- a/client/.gitignore +++ /dev/null @@ -1,48 +0,0 @@ -# See http://help.github.com/ignore-files/ for more about ignoring files. - -#local env variable declaration -.env -# compiled output -/dist -/tmp -/out-tsc -# Only exists if Bazel was run -/bazel-out - -# dependencies -/node_modules - -# profiling files -chrome-profiler-events*.json - -# IDEs and editors -/.idea -.project -.classpath -.c9/ -*.launch -.settings/ -*.sublime-workspace - -# IDE - VSCode -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -.history/* - -# misc -/.angular/cache -/.sass-cache -/connect.lock -/coverage -/libpeerconnection.log -npm-debug.log -yarn-error.log -testem.log -/typings - -# System Files -**/.DS_Store -Thumbs.db diff --git a/client/README.md b/client/README.md deleted file mode 100644 index f394c2d..0000000 --- a/client/README.md +++ /dev/null @@ -1,40 +0,0 @@ - - -# Client - -This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.0.3. - -## Development server - -Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files. - -## Code scaffolding - -Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. - -## Build - -Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. - -## Running unit tests - -Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). - -## Running end-to-end tests - -Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities. - -## Further help - -To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page. diff --git a/client/angular.json b/client/angular.json deleted file mode 100644 index e3227f1..0000000 --- a/client/angular.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "$schema": "./node_modules/@angular/cli/lib/config/schema.json", - "version": 1, - "newProjectRoot": "projects", - "projects": { - "client": { - "projectType": "application", - "schematics": { - "@schematics/angular:component": { - "style": "scss" - }, - "@schematics/angular:application": { - "strict": true - } - }, - "root": "", - "sourceRoot": "src", - "prefix": "app", - "architect": { - "build": { - "builder": "@angular-devkit/build-angular:browser", - "options": { - "outputPath": "dist/client", - "index": "src/index.html", - "main": "src/main.ts", - "polyfills": "src/polyfills.ts", - "tsConfig": "tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "src/favicon.ico", - "src/assets" - ], - "styles": [ - "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css", - "src/styles.scss" - ], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "fileReplacements": [ - { - "replace": "src/environments/environment.ts", - "with": "src/environments/environment.prod.ts" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "builder": "@angular-devkit/build-angular:dev-server", - "options": { - "browserTarget": "client:build", - "proxyConfig": "src/proxy.conf.json" - }, - "configurations": { - "production": { - "browserTarget": "client:build:production" - }, - "development": { - "browserTarget": "client:build:development" - } - }, - "defaultConfiguration": "development" - }, - "extract-i18n": { - "builder": "@angular-devkit/build-angular:extract-i18n", - "options": { - "browserTarget": "client:build" - } - }, - "test": { - "builder": "@angular-devkit/build-angular:karma", - "options": { - "main": "src/test.ts", - "polyfills": "src/polyfills.ts", - "tsConfig": "tsconfig.spec.json", - "karmaConfig": "karma.conf.js", - "inlineStyleLanguage": "scss", - "assets": [ - "src/favicon.ico", - "src/assets" - ], - "styles": [ - "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css", - "src/styles.scss" - ], - "scripts": [] - } - } - } - } - }, - "defaultProject": "client" -} diff --git a/client/karma.conf.js b/client/karma.conf.js deleted file mode 100644 index 525c676..0000000 --- a/client/karma.conf.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -// Karma configuration file, see link for more information -// https://karma-runner.github.io/1.0/config/configuration-file.html - -module.exports = function (config) { - config.set({ - basePath: '', - frameworks: ['jasmine', '@angular-devkit/build-angular'], - plugins: [ - require('karma-jasmine'), - require('karma-chrome-launcher'), - require('karma-jasmine-html-reporter'), - require('karma-coverage'), - require('@angular-devkit/build-angular/plugins/karma') - ], - client: { - jasmine: { - // you can add configuration options for Jasmine here - // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html - // for example, you can disable the random execution with `random: false` - // or set a specific seed with `seed: 4321` - }, - clearContext: false // leave Jasmine Spec Runner output visible in browser - }, - jasmineHtmlReporter: { - suppressAll: true // removes the duplicated traces - }, - coverageReporter: { - dir: require('path').join(__dirname, './coverage/client'), - subdir: '.', - reporters: [ - { type: 'html' }, - { type: 'text-summary' } - ] - }, - reporters: ['progress', 'kjhtml'], - port: 9876, - colors: true, - logLevel: config.LOG_INFO, - autoWatch: true, - browsers: ['Chrome'], - singleRun: false, - restartOnFileChange: true - }); -}; diff --git a/client/package-lock.json b/client/package-lock.json deleted file mode 100644 index 15b3479..0000000 --- a/client/package-lock.json +++ /dev/null @@ -1,24535 +0,0 @@ -{ - "name": "client", - "version": "0.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "client", - "version": "0.0.0", - "dependencies": { - "@angular/animations": "~13.0.0", - "@angular/cdk": "^13.0.2", - "@angular/common": "~13.0.0", - "@angular/compiler": "~13.0.0", - "@angular/core": "~13.0.0", - "@angular/forms": "~13.0.0", - "@angular/material": "^13.0.2", - "@angular/platform-browser": "~13.0.0", - "@angular/platform-browser-dynamic": "~13.0.0", - "@angular/router": "~13.0.0", - "@fortawesome/angular-fontawesome": "^0.10.2", - "@fortawesome/fontawesome-svg-core": "^6.1.0", - "@fortawesome/free-regular-svg-icons": "^6.1.0", - "@fortawesome/free-solid-svg-icons": "^6.1.0", - "rxjs": "~7.4.0", - "tslib": "^2.3.0", - "zone.js": "~0.11.4" - }, - "devDependencies": { - "@angular-devkit/build-angular": "~13.0.3", - "@angular/cli": "^13.0.4", - "@angular/compiler-cli": "~13.0.0", - "@types/jasmine": "~3.10.0", - "@types/node": "^12.11.1", - "@types/scriptjs": "^0.0.2", - "@typescript-eslint/eslint-plugin": "^5.12.0", - "@typescript-eslint/parser": "^5.12.0", - "eslint": "^8.9.0", - "eslint-config-airbnb-base": "^15.0.0", - "eslint-config-google": "^0.14.0", - "eslint-config-prettier": "^8.4.0", - "eslint-plugin-prettier": "^4.0.0", - "jasmine-core": "~3.10.0", - "karma": "~6.3.0", - "karma-chrome-launcher": "~3.1.0", - "karma-coverage": "~2.0.3", - "karma-jasmine": "~4.0.0", - "karma-jasmine-html-reporter": "~1.7.0", - "prettier": "^2.5.1", - "typescript": "~4.4.3" - } - }, - "node_modules/@ampproject/remapping": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-1.0.1.tgz", - "integrity": "sha512-Ta9bMA3EtUHDaZJXqUoT5cn/EecwOp+SXpKJqxDbDuMbLvEMu6YTyDDuvTWeStODfdmXyfMo7LymQyPkN3BicA==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "1.0.0", - "sourcemap-codec": "1.4.8" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@angular-devkit/architect": { - "version": "0.1300.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1300.3.tgz", - "integrity": "sha512-XY3sjRLk06Q+uAU0BePuIWcK1n3Jr0ksNV0ACNAct+MnI3QFfPPaYA/Tdhp9uWobuZ4lUrL0drc2uppNu0wKmA==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "13.0.3", - "rxjs": "6.6.7" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/architect/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@angular-devkit/architect/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@angular-devkit/build-angular": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-13.0.3.tgz", - "integrity": "sha512-5KFsknpnq3mc0KwcIDjvmqB3trz5cMt48dB0nrc23zkFI9v4hkpalc/OEg/H3G93K0c9g6dcyxmHkNfsU1+CHw==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "1.0.1", - "@angular-devkit/architect": "0.1300.3", - "@angular-devkit/build-webpack": "0.1300.3", - "@angular-devkit/core": "13.0.3", - "@babel/core": "7.15.8", - "@babel/generator": "7.15.8", - "@babel/helper-annotate-as-pure": "7.15.4", - "@babel/plugin-proposal-async-generator-functions": "7.15.8", - "@babel/plugin-transform-async-to-generator": "7.14.5", - "@babel/plugin-transform-runtime": "7.15.8", - "@babel/preset-env": "7.15.8", - "@babel/runtime": "7.15.4", - "@babel/template": "7.15.4", - "@discoveryjs/json-ext": "0.5.5", - "@ngtools/webpack": "13.0.3", - "ansi-colors": "4.1.1", - "babel-loader": "8.2.3", - "babel-plugin-istanbul": "6.1.1", - "browserslist": "^4.9.1", - "cacache": "15.3.0", - "caniuse-lite": "^1.0.30001032", - "circular-dependency-plugin": "5.2.2", - "copy-webpack-plugin": "9.0.1", - "core-js": "3.19.0", - "critters": "0.0.14", - "css-loader": "6.5.0", - "esbuild-wasm": "0.13.12", - "glob": "7.2.0", - "https-proxy-agent": "5.0.0", - "inquirer": "8.2.0", - "karma-source-map-support": "1.4.0", - "less": "4.1.2", - "less-loader": "10.2.0", - "license-webpack-plugin": "4.0.0", - "loader-utils": "3.0.0", - "mini-css-extract-plugin": "2.4.3", - "minimatch": "3.0.4", - "open": "8.4.0", - "ora": "5.4.1", - "parse5-html-rewriting-stream": "6.0.1", - "piscina": "3.1.0", - "postcss": "8.3.11", - "postcss-import": "14.0.2", - "postcss-loader": "6.2.0", - "postcss-preset-env": "6.7.0", - "regenerator-runtime": "0.13.9", - "resolve-url-loader": "4.0.0", - "rxjs": "6.6.7", - "sass": "1.43.4", - "sass-loader": "12.3.0", - "semver": "7.3.5", - "source-map-loader": "3.0.0", - "source-map-support": "0.5.20", - "stylus": "0.55.0", - "stylus-loader": "6.2.0", - "terser": "5.9.0", - "text-table": "0.2.0", - "tree-kill": "1.2.2", - "tslib": "2.3.1", - "webpack": "5.64.1", - "webpack-dev-middleware": "5.2.1", - "webpack-dev-server": "4.4.0", - "webpack-merge": "5.8.0", - "webpack-subresource-integrity": "5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "optionalDependencies": { - "esbuild": "0.13.12" - }, - "peerDependencies": { - "@angular/compiler-cli": "^13.0.0", - "@angular/localize": "^13.0.0", - "@angular/service-worker": "^13.0.0", - "karma": "^6.3.0", - "ng-packagr": "^13.0.0", - "protractor": "^7.0.0", - "tailwindcss": "^2.0.0", - "typescript": "~4.4.3" - }, - "peerDependenciesMeta": { - "@angular/localize": { - "optional": true - }, - "@angular/service-worker": { - "optional": true - }, - "karma": { - "optional": true - }, - "ng-packagr": { - "optional": true - }, - "protractor": { - "optional": true - }, - "tailwindcss": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/rxjs/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@angular-devkit/build-webpack": { - "version": "0.1300.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1300.3.tgz", - "integrity": "sha512-3DNo8575FFPMqJaVMXxrIduWkrcKm5zYSCvkMOmzHLp+gx+RXQiwnoXfVJpukcE/jwK/4SWyRE8Tw75sfPJ71A==", - "dev": true, - "dependencies": { - "@angular-devkit/architect": "0.1300.3", - "rxjs": "6.6.7" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "webpack": "^5.30.0", - "webpack-dev-server": "^4.0.0" - } - }, - "node_modules/@angular-devkit/build-webpack/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@angular-devkit/build-webpack/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@angular-devkit/core": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.0.3.tgz", - "integrity": "sha512-5yTYW6m4pkDPSYNxThm+47h+UZ6XVEfdfsXR3o+WlRG0hc18EuQ+sXZkzhvZrk5KMLlXFex4eO40RPq2vvWS/w==", - "dev": true, - "dependencies": { - "ajv": "8.6.3", - "ajv-formats": "2.1.1", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.7", - "source-map": "0.7.3" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/core/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@angular-devkit/core/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@angular-devkit/schematics": { - "version": "13.0.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.0.4.tgz", - "integrity": "sha512-3LsmpfAEOxwPyachrktCHtGUYBzQCCzD0++CUjhK8W99v8/IAplkm4dgovFb1RiRkUm44l+HIS7387AbvEIf5A==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "13.0.4", - "jsonc-parser": "3.0.0", - "magic-string": "0.25.7", - "ora": "5.4.1", - "rxjs": "6.6.7" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/schematics/node_modules/@angular-devkit/core": { - "version": "13.0.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.0.4.tgz", - "integrity": "sha512-AzgLvERLC6qzY5aZWUpkz5nx+pZChrq3DSt6azMPALwzzoABrwiO6XqzRnj17mXtANXLH2oe9FuHr9jzgFbF1g==", - "dev": true, - "dependencies": { - "ajv": "8.6.3", - "ajv-formats": "2.1.1", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.7", - "source-map": "0.7.3" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/schematics/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@angular-devkit/schematics/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@angular/animations": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-13.0.2.tgz", - "integrity": "sha512-ROR70rM6E13pIJzaYf0Su/ALSoBm5fIMjozey636pAq21TxTy5IfhgaBjv/vflC9psbpaySGw2H5XnwejP0gSw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0" - }, - "peerDependencies": { - "@angular/core": "13.0.2" - } - }, - "node_modules/@angular/cdk": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-13.0.2.tgz", - "integrity": "sha512-m7RHIAXpFpgsrydhWXX1hAXRmQpQ+m9eRCYAoz8QiDCchYyVvTaxkZ8J7XGS8RtJ2EiocXSp4TlwQQrpXe+4lg==", - "dependencies": { - "tslib": "^2.3.0" - }, - "optionalDependencies": { - "parse5": "^5.0.0" - }, - "peerDependencies": { - "@angular/common": "^13.0.0 || ^14.0.0-0", - "@angular/core": "^13.0.0 || ^14.0.0-0", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/cdk/node_modules/parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "optional": true - }, - "node_modules/@angular/cli": { - "version": "13.0.4", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-13.0.4.tgz", - "integrity": "sha512-0QMJXFNn57LVg7ZwZFPO90g6aZHDnoe5yCB7fo3nskOhDw1AW/rnbbaNVMVX/SvP30hOOTLsfVJ1Y3I6eKDgRA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@angular-devkit/architect": "0.1300.4", - "@angular-devkit/core": "13.0.4", - "@angular-devkit/schematics": "13.0.4", - "@schematics/angular": "13.0.4", - "@yarnpkg/lockfile": "1.1.0", - "ansi-colors": "4.1.1", - "debug": "4.3.2", - "ini": "2.0.0", - "inquirer": "8.2.0", - "jsonc-parser": "3.0.0", - "npm-package-arg": "8.1.5", - "npm-pick-manifest": "6.1.1", - "open": "8.4.0", - "ora": "5.4.1", - "pacote": "12.0.2", - "resolve": "1.20.0", - "semver": "7.3.5", - "symbol-observable": "4.0.0", - "uuid": "8.3.2" - }, - "bin": { - "ng": "bin/ng.js" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/cli/node_modules/@angular-devkit/architect": { - "version": "0.1300.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1300.4.tgz", - "integrity": "sha512-COW2W6rI9D69QEXGc/MyTbJY9gT+u8yMTpONpIjopd+KoSK/q2wGr0RleUf7XSCunZCs0SRI7z3Pw1EAdQCP7Q==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "13.0.4", - "rxjs": "6.6.7" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/cli/node_modules/@angular-devkit/core": { - "version": "13.0.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.0.4.tgz", - "integrity": "sha512-AzgLvERLC6qzY5aZWUpkz5nx+pZChrq3DSt6azMPALwzzoABrwiO6XqzRnj17mXtANXLH2oe9FuHr9jzgFbF1g==", - "dev": true, - "dependencies": { - "ajv": "8.6.3", - "ajv-formats": "2.1.1", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.7", - "source-map": "0.7.3" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular/cli/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@angular/cli/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@angular/common": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-13.0.2.tgz", - "integrity": "sha512-UxWzNAU/o9pP02AYB5MrnIlShirfO631NolmvP0jTSEmym1nAeDOwZIYlkgfcJMHFXFc7DBnE2XOGaTZ8if3kw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0" - }, - "peerDependencies": { - "@angular/core": "13.0.2", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/compiler": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-13.0.2.tgz", - "integrity": "sha512-EvIFT8y5VNICrnPgiamv/z9hfQ7KjLCM52g4ssXGCeGPVj58OEfslEc3jO4BCJG7xuLm7dCuSRV0pBlJNTSYFg==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0" - } - }, - "node_modules/@angular/compiler-cli": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.0.2.tgz", - "integrity": "sha512-KVDntMBoPoAPdpyO3LxR2U3BO3ja5fY5Im5rzynjBCC3dnwAPPKoIlYZlFY/5ov6yVoVleeb/BOovYxHuxZBsA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.8.6", - "canonical-path": "1.0.0", - "chokidar": "^3.0.0", - "convert-source-map": "^1.5.1", - "dependency-graph": "^0.11.0", - "magic-string": "^0.25.0", - "reflect-metadata": "^0.1.2", - "semver": "^7.0.0", - "sourcemap-codec": "^1.4.8", - "tslib": "^2.3.0", - "yargs": "^17.2.1" - }, - "bin": { - "ng-xi18n": "bundles/src/bin/ng_xi18n.js", - "ngc": "bundles/src/bin/ngc.js", - "ngcc": "bundles/ngcc/main-ngcc.js" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0" - }, - "peerDependencies": { - "@angular/compiler": "13.0.2", - "typescript": ">=4.4.2 <4.5" - } - }, - "node_modules/@angular/core": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-13.0.2.tgz", - "integrity": "sha512-6Jbct50lncMqzwLILzfmwQRK8eOEMv0quCL3pQptEpYPSlPqKz6QRxD76BykSUOs7XYJ/KdZmu3uGcT2Q/DUVg==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0" - }, - "peerDependencies": { - "rxjs": "^6.5.3 || ^7.4.0", - "zone.js": "~0.11.4" - } - }, - "node_modules/@angular/forms": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-13.0.2.tgz", - "integrity": "sha512-JGgEOTH/OYr7/RlqJUPSzKQF/a55UM5PD6CgpUjAXKrCV18+zhofO05g+ibIZH3OfONntthcbKEXxMTX2EEQqg==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0" - }, - "peerDependencies": { - "@angular/common": "13.0.2", - "@angular/core": "13.0.2", - "@angular/platform-browser": "13.0.2", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/material": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-13.0.2.tgz", - "integrity": "sha512-DbbkQFpZ73oxOuR9LkkpeUPWP31DNIG3Z94sOrtdBhX3HfbLLOCaAJAIwMl8+bEuzDgtWBmx3taUR8l4WKCO8g==", - "dependencies": { - "tslib": "^2.3.0" - }, - "peerDependencies": { - "@angular/animations": "^13.0.0 || ^14.0.0-0", - "@angular/cdk": "13.0.2", - "@angular/common": "^13.0.0 || ^14.0.0-0", - "@angular/core": "^13.0.0 || ^14.0.0-0", - "@angular/forms": "^13.0.0 || ^14.0.0-0", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/platform-browser": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-13.0.2.tgz", - "integrity": "sha512-fkLGr9Vj2cvFzXefyhNaqwXX90+WbpYj5cCii7S1HcbJ9qSM5ZenLp1t8mGRhmWI7odY4BrFskWOChlWFrLEkA==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0" - }, - "peerDependencies": { - "@angular/animations": "13.0.2", - "@angular/common": "13.0.2", - "@angular/core": "13.0.2" - }, - "peerDependenciesMeta": { - "@angular/animations": { - "optional": true - } - } - }, - "node_modules/@angular/platform-browser-dynamic": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-13.0.2.tgz", - "integrity": "sha512-2wZX2oop3A1kWFcbRYqe8AxBQjT35DXf1qlGyFQoMn7D0vOAprg6X1hUK2XBItRrvwRWh3hSVhzkustTIl+r6g==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0" - }, - "peerDependencies": { - "@angular/common": "13.0.2", - "@angular/compiler": "13.0.2", - "@angular/core": "13.0.2", - "@angular/platform-browser": "13.0.2" - } - }, - "node_modules/@angular/router": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-13.0.2.tgz", - "integrity": "sha512-AfmT845dcYPvNbUdV2ALlf++szZP3ie2d0eu7JyGWe3anV1fbDcg76RhjxFK8yVUxryrCQtEnot1VEEVlhGkyw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0" - }, - "peerDependencies": { - "@angular/common": "13.0.2", - "@angular/core": "13.0.2", - "@angular/platform-browser": "13.0.2", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@assemblyscript/loader": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", - "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", - "dev": true - }, - "node_modules/@babel/code-frame": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", - "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", - "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.8.tgz", - "integrity": "sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.15.8", - "@babel/generator": "^7.15.8", - "@babel/helper-compilation-targets": "^7.15.4", - "@babel/helper-module-transforms": "^7.15.8", - "@babel/helpers": "^7.15.4", - "@babel/parser": "^7.15.8", - "@babel/template": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.6", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/core/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@babel/generator": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz", - "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.15.6", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz", - "integrity": "sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.15.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.0.tgz", - "integrity": "sha512-9KuleLT0e77wFUku6TUkqZzCEymBdtuQQ27MhEKzf9UOOJu3cYj98kyaDAzxpC7lV6DGiZFuC8XqDsq8/Kl6aQ==", - "dev": true, - "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz", - "integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.16.0", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.17.5", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.0.tgz", - "integrity": "sha512-XLwWvqEaq19zFlF5PTgOod4bUA+XbkR4WLQBct1bkzmxJGB0ZEJaoKF4c8cgH9oBtCDuYJ8BP5NB9uFiEgO5QA==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-member-expression-to-functions": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", - "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.0.tgz", - "integrity": "sha512-3DyG0zAFAZKcOp7aVr33ddwkxJ0Z0Jr5V99y3I690eYLpukJsJvAbzTy1ewoCqsML8SbIrjH14Jc/nSQ4TvNPA==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "regexpu-core": "^4.7.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", - "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.4.tgz", - "integrity": "sha512-OrpPZ97s+aPi6h2n1OXzdhVis1SGSsMU2aMHgLcOKfsp4/v1NWpx3CWT3lBj5eeBq9cDkPkh+YCfdF7O12uNDQ==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz", - "integrity": "sha512-Hk2SLxC9ZbcOhLpg/yMznzJ11W++lg5GMbxt1ev6TXUiJB0N42KPC+7w8a+eWGuqDnUYuwStJoZHM7RgmIOaGQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", - "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", - "dev": true, - "dependencies": { - "@babel/helper-get-function-arity": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name/node_modules/@babel/template": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", - "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", - "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", - "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", - "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", - "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", - "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.16.0", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-simple-access": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/helper-validator-identifier": "^7.15.7", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms/node_modules/@babel/template": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", - "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", - "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.4.tgz", - "integrity": "sha512-vGERmmhR+s7eH5Y/cp8PCVzj4XEjerq8jooMfxFdA5xVtAk9Sh4AQsrWgiErUEBjtGrBtOFKDUcWQFW4/dFwMA==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-wrap-function": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", - "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", - "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", - "dev": true, - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", - "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", - "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", - "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.0.tgz", - "integrity": "sha512-VVMGzYY3vkWgCJML+qVLvGIam902mJW0FvT7Avj1zEe0Gn7D93aWdLblYARTxEw+6DhZmtzhBM2zv0ekE5zg1g==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function/node_modules/@babel/template": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", - "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.3.tgz", - "integrity": "sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==", - "dev": true, - "dependencies": { - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.3", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers/node_modules/@babel/template": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", - "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", - "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.15.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz", - "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.0.tgz", - "integrity": "sha512-4tcFwwicpWTrpl9qjf7UsoosaArgImF85AxqCRZlgc3IQDvkUHjJpruXAL58Wmj+T6fypWTC/BakfEkwIL/pwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.8.tgz", - "integrity": "sha512-2Z5F2R2ibINTc63mY7FLqGfEbmofrHU9FitJW1Q7aPaKFhiPvSq6QEt/BoWN5oME3GVyjcRuNNSRbb9LC0CSWA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.15.4", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz", - "integrity": "sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.0.tgz", - "integrity": "sha512-mAy3sdcY9sKAkf3lQbDiv3olOfiLqI51c9DR9b19uMoR2Z6r5pmGl7dfNFqEvqOyqbf1ta4lknK4gc5PJn3mfA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.0.tgz", - "integrity": "sha512-QGSA6ExWk95jFQgwz5GQ2Dr95cf7eI7TKutIXXTb7B1gCLTCz5hTjFTQGfLFBBiC5WSNi7udNwWsqbbMh1c4yQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.0.tgz", - "integrity": "sha512-CjI4nxM/D+5wCnhD11MHB1AwRSAYeDT+h8gCdcVJZ/OK7+wRzFsf7PFPWVpVpNRkHMmMkQWAHpTq+15IXQ1diA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.0.tgz", - "integrity": "sha512-kouIPuiv8mSi5JkEhzApg5Gn6hFyKPnlkO0a9YSzqRurH8wYzSlf6RJdzluAsbqecdW5pBvDJDfyDIUR/vLxvg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.0.tgz", - "integrity": "sha512-pbW0fE30sVTYXXm9lpVQQ/Vc+iTeQKiXlaNRZPPN2A2VdlWyAtsUrsQ3xydSlDW00TFMK7a8m3cDTkBF5WnV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.0.tgz", - "integrity": "sha512-3bnHA8CAFm7cG93v8loghDYyQ8r97Qydf63BeYiGgYbjKKB/XP53W15wfRC7dvKfoiJ34f6Rbyyx2btExc8XsQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.0.tgz", - "integrity": "sha512-FAhE2I6mjispy+vwwd6xWPyEx3NYFS13pikDBWUAFGZvq6POGs5eNchw8+1CYoEgBl9n11I3NkzD7ghn25PQ9Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.0.tgz", - "integrity": "sha512-LU/+jp89efe5HuWJLmMmFG0+xbz+I2rSI7iLc1AlaeSMDMOGzWlc5yJrMN1d04osXN4sSfpo4O+azkBNBes0jg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.16.0", - "@babel/helper-compilation-targets": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.0.tgz", - "integrity": "sha512-kicDo0A/5J0nrsCPbn89mTG3Bm4XgYi0CZtvex9Oyw7gGZE3HXGD0zpQNH+mo+tEfbo8wbmMvJftOwpmPy7aVw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.0.tgz", - "integrity": "sha512-Y4rFpkZODfHrVo70Uaj6cC1JJOt3Pp0MdWSwIKtb8z1/lsjl9AmnB7ErRFV+QNGIfcY1Eruc2UMx5KaRnXjMyg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.0.tgz", - "integrity": "sha512-IvHmcTHDFztQGnn6aWq4t12QaBXTKr1whF/dgp9kz84X6GUcwq9utj7z2wFCUfeOup/QKnOlt2k0zxkGFx9ubg==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.0.tgz", - "integrity": "sha512-3jQUr/HBbMVZmi72LpjQwlZ55i1queL8KcDTQEkAHihttJnAPrcvG9ZNXIfsd2ugpizZo595egYV6xy+pv4Ofw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-create-class-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", - "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.0.tgz", - "integrity": "sha512-ti7IdM54NXv29cA4+bNNKEMS4jLMCbJgl+Drv+FgYy0erJLAxNAIXcNjNjrRZEcWq0xJHsNVwQezskMFpF8N9g==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.0.tgz", - "integrity": "sha512-vIFb5250Rbh7roWARvCLvIJ/PtAU5Lhv7BtZ1u24COwpI9Ypjsh+bZcKk6rlIyalK+r0jOc1XQ8I4ovNxNrWrA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", - "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.0.tgz", - "integrity": "sha512-V14As3haUOP4ZWrLJ3VVx5rCnrYhMSHN/jX7z6FAt5hjRkLsb0snPCmJwSOML5oxkKO4FNoNv7V5hw/y2bjuvg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.0.tgz", - "integrity": "sha512-27n3l67/R3UrXfizlvHGuTwsRIFyce3D/6a37GRxn28iyTPvNXaW4XvznexRh1zUNLPjbLL22Id0XQElV94ruw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.0.tgz", - "integrity": "sha512-HUxMvy6GtAdd+GKBNYDWCIA776byUQH8zjnfjxwT1P1ARv/wFu8eBDpmXQcLS/IwRtrxIReGiplOwMeyO7nsDQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", - "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.0.tgz", - "integrity": "sha512-63l1dRXday6S8V3WFY5mXJwcRAnPYxvFfTlt67bwV1rTyVTM5zrp0DBBb13Kl7+ehkCVwIZPumPpFP/4u70+Tw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.0.tgz", - "integrity": "sha512-Q7tBUwjxLTsHEoqktemHBMtb3NYwyJPTJdM+wDwb0g8PZ3kQUIzNvwD5lPaqW/p54TXBc/MXZu9Jr7tbUEUM8Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.0.tgz", - "integrity": "sha512-FXlDZfQeLILfJlC6I1qyEwcHK5UpRCFkaoVyA1nk9A1L1Yu583YO4un2KsLBsu3IJb4CUbctZks8tD9xPQubLw==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.0.tgz", - "integrity": "sha512-LIe2kcHKAZOJDNxujvmp6z3mfN6V9lJxubU4fJIGoQCkKe3Ec2OcbdlYP+vW++4MpxwG0d1wSDOJtQW5kLnkZQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.0.tgz", - "integrity": "sha512-OwYEvzFI38hXklsrbNivzpO3fh87skzx8Pnqi4LoSYeav0xHlueSoCJrSgTPfnbyzopo5b3YVAJkFIcUpK2wsw==", - "dev": true, - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.0.tgz", - "integrity": "sha512-5QKUw2kO+GVmKr2wMYSATCTTnHyscl6sxFRAY+rvN7h7WB0lcG0o4NoV6ZQU32OZGVsYUsfLGgPQpDFdkfjlJQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.0.tgz", - "integrity": "sha512-lBzMle9jcOXtSOXUpc7tvvTpENu/NuekNJVova5lCCWCV9/U1ho2HH2y0p6mBg8fPm/syEAbfaaemYGOHCY3mg==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.0.tgz", - "integrity": "sha512-gQDlsSF1iv9RU04clgXqRjrPyyoJMTclFt3K1cjLmTKikc0s/6vE3hlDeEVC71wLTRu72Fq7650kABrdTc2wMQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.0.tgz", - "integrity": "sha512-WRpw5HL4Jhnxw8QARzRvwojp9MIE7Tdk3ez6vRyUk1MwgjJN0aNpRoXainLR5SgxmoXx/vsXGZ6OthP6t/RbUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.0.tgz", - "integrity": "sha512-rWFhWbCJ9Wdmzln1NmSCqn7P0RAD+ogXG/bd9Kg5c7PKWkJtkiXmYsMBeXjDlzHpVTJ4I/hnjs45zX4dEv81xw==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.0.tgz", - "integrity": "sha512-Dzi+NWqyEotgzk/sb7kgQPJQf7AJkQBWsVp1N6JWc1lBVo0vkElUnGdr1PzUBmfsCCN5OOFya3RtpeHk15oLKQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-simple-access": "^7.16.0", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.0.tgz", - "integrity": "sha512-yuGBaHS3lF1m/5R+6fjIke64ii5luRUg97N2wr+z1sF0V+sNSXPxXDdEEL/iYLszsN5VKxVB1IPfEqhzVpiqvg==", - "dev": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.16.0", - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-identifier": "^7.15.7", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.0.tgz", - "integrity": "sha512-nx4f6no57himWiHhxDM5pjwhae5vLpTK2zCnDH8+wNLJy0TVER/LJRHl2bkt6w9Aad2sPD5iNNoUpY3X9sTGDg==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.0.tgz", - "integrity": "sha512-LogN88uO+7EhxWc8WZuQ8vxdSyVGxhkh8WTC3tzlT8LccMuQdA81e9SGV6zY7kY2LjDhhDOFdQVxdGwPyBCnvg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.0.tgz", - "integrity": "sha512-fhjrDEYv2DBsGN/P6rlqakwRwIp7rBGLPbrKxwh7oVt5NNkIhZVOY2GRV+ULLsQri1bDqwDWnU3vhlmx5B2aCw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.0.tgz", - "integrity": "sha512-fds+puedQHn4cPLshoHcR1DTMN0q1V9ou0mUjm8whx9pGcNvDrVVrgw+KJzzCaiTdaYhldtrUps8DWVMgrSEyg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.3.tgz", - "integrity": "sha512-3MaDpJrOXT1MZ/WCmkOFo7EtmVVC8H4EUZVrHvFOsmwkk4lOjQj8rzv8JKUZV4YoQKeoIgk07GO+acPU9IMu/w==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.0.tgz", - "integrity": "sha512-XLldD4V8+pOqX2hwfWhgwXzGdnDOThxaNTgqagOcpBgIxbUvpgU2FMvo5E1RyHbk756WYgdbS0T8y0Cj9FKkWQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.0.tgz", - "integrity": "sha512-JAvGxgKuwS2PihiSFaDrp94XOzzTUeDeOQlcKzVAyaPap7BnZXK/lvMDiubkPTdotPKOIZq9xWXWnggUMYiExg==", - "dev": true, - "dependencies": { - "regenerator-transform": "^0.14.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.0.tgz", - "integrity": "sha512-Dgs8NNCehHSvXdhEhln8u/TtJxfVwGYCgP2OOr5Z3Ar+B+zXicEOKNTyc+eca2cuEOMtjW6m9P9ijOt8QdqWkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.15.8.tgz", - "integrity": "sha512-+6zsde91jMzzvkzuEA3k63zCw+tm/GvuuabkpisgbDMTPQsIMHllE3XczJFFtEHLjjhKQFZmGQVRdELetlWpVw==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.15.4", - "@babel/helper-plugin-utils": "^7.14.5", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.5", - "babel-plugin-polyfill-regenerator": "^0.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.0.tgz", - "integrity": "sha512-iVb1mTcD8fuhSv3k99+5tlXu5N0v8/DPm2mO3WACLG6al1CGZH7v09HJyUb1TtYl/Z+KrM6pHSIJdZxP5A+xow==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.0.tgz", - "integrity": "sha512-Ao4MSYRaLAQczZVp9/7E7QHsCuK92yHRrmVNRe/SlEJjhzivq0BSn8mEraimL8wizHZ3fuaHxKH0iwzI13GyGg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.0.tgz", - "integrity": "sha512-/ntT2NljR9foobKk4E/YyOSwcGUXtYWv5tinMK/3RkypyNBNdhHUaq6Orw5DWq9ZcNlS03BIlEALFeQgeVAo4Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.0.tgz", - "integrity": "sha512-Rd4Ic89hA/f7xUSJQk5PnC+4so50vBoBfxjdQAdvngwidM8jYIBVxBZ/sARxD4e0yMXRbJVDrYf7dyRtIIKT6Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.0.tgz", - "integrity": "sha512-++V2L8Bdf4vcaHi2raILnptTBjGEFxn5315YU+e8+EqXIucA+q349qWngCLpUYqqv233suJ6NOienIVUpS9cqg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.0.tgz", - "integrity": "sha512-VFi4dhgJM7Bpk8lRc5CMaRGlKZ29W9C3geZjt9beuzSUrlJxsNwX7ReLwaL6WEvsOf2EQkyIJEPtF8EXjB/g2A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.0.tgz", - "integrity": "sha512-jHLK4LxhHjvCeZDWyA9c+P9XH1sOxRd1RO9xMtDVRAOND/PczPqizEtVdx4TQF/wyPaewqpT+tgQFYMnN/P94A==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.15.8.tgz", - "integrity": "sha512-rCC0wH8husJgY4FPbHsiYyiLxSY8oMDJH7Rl6RQMknbN9oDDHhM9RDFvnGM2MgkbUJzSQB4gtuwygY5mCqGSsA==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.15.0", - "@babel/helper-compilation-targets": "^7.15.4", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.15.4", - "@babel/plugin-proposal-async-generator-functions": "^7.15.8", - "@babel/plugin-proposal-class-properties": "^7.14.5", - "@babel/plugin-proposal-class-static-block": "^7.15.4", - "@babel/plugin-proposal-dynamic-import": "^7.14.5", - "@babel/plugin-proposal-export-namespace-from": "^7.14.5", - "@babel/plugin-proposal-json-strings": "^7.14.5", - "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", - "@babel/plugin-proposal-numeric-separator": "^7.14.5", - "@babel/plugin-proposal-object-rest-spread": "^7.15.6", - "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", - "@babel/plugin-proposal-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-private-methods": "^7.14.5", - "@babel/plugin-proposal-private-property-in-object": "^7.15.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.14.5", - "@babel/plugin-transform-async-to-generator": "^7.14.5", - "@babel/plugin-transform-block-scoped-functions": "^7.14.5", - "@babel/plugin-transform-block-scoping": "^7.15.3", - "@babel/plugin-transform-classes": "^7.15.4", - "@babel/plugin-transform-computed-properties": "^7.14.5", - "@babel/plugin-transform-destructuring": "^7.14.7", - "@babel/plugin-transform-dotall-regex": "^7.14.5", - "@babel/plugin-transform-duplicate-keys": "^7.14.5", - "@babel/plugin-transform-exponentiation-operator": "^7.14.5", - "@babel/plugin-transform-for-of": "^7.15.4", - "@babel/plugin-transform-function-name": "^7.14.5", - "@babel/plugin-transform-literals": "^7.14.5", - "@babel/plugin-transform-member-expression-literals": "^7.14.5", - "@babel/plugin-transform-modules-amd": "^7.14.5", - "@babel/plugin-transform-modules-commonjs": "^7.15.4", - "@babel/plugin-transform-modules-systemjs": "^7.15.4", - "@babel/plugin-transform-modules-umd": "^7.14.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.9", - "@babel/plugin-transform-new-target": "^7.14.5", - "@babel/plugin-transform-object-super": "^7.14.5", - "@babel/plugin-transform-parameters": "^7.15.4", - "@babel/plugin-transform-property-literals": "^7.14.5", - "@babel/plugin-transform-regenerator": "^7.14.5", - "@babel/plugin-transform-reserved-words": "^7.14.5", - "@babel/plugin-transform-shorthand-properties": "^7.14.5", - "@babel/plugin-transform-spread": "^7.15.8", - "@babel/plugin-transform-sticky-regex": "^7.14.5", - "@babel/plugin-transform-template-literals": "^7.14.5", - "@babel/plugin-transform-typeof-symbol": "^7.14.5", - "@babel/plugin-transform-unicode-escapes": "^7.14.5", - "@babel/plugin-transform-unicode-regex": "^7.14.5", - "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.15.6", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.5", - "babel-plugin-polyfill-regenerator": "^0.2.2", - "core-js-compat": "^3.16.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", - "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", - "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.15.4", - "@babel/types": "^7.15.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.3.tgz", - "integrity": "sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-hoist-variables": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/parser": "^7.16.3", - "@babel/types": "^7.16.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", - "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@babel/types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", - "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.15.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@csstools/convert-colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", - "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz", - "integrity": "sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.1.0.tgz", - "integrity": "sha512-C1DfL7XX4nPqGd6jcP01W9pVM1HYCuUkFk1432D7F0v3JSlUIeOYn9oCoi3eoLZ+iwBSb29BMFxxny0YrrEZqg==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.1", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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/@eslint/eslintrc/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==", - "dev": true - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/@eslint/eslintrc/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, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@eslint/eslintrc/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==", - "dev": true - }, - "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, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@fortawesome/angular-fontawesome": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@fortawesome/angular-fontawesome/-/angular-fontawesome-0.10.2.tgz", - "integrity": "sha512-VxsCAo2lK74KwD236AKAhGpiethfz9yqCViIG2iRAZqgNmuZ6ihwumjbLW32n6hV4fFvCqLcHmpngoEl3TNiOg==", - "dependencies": { - "tslib": "^2.3.1" - }, - "peerDependencies": { - "@fortawesome/fontawesome-svg-core": "~1.2.27 || ~1.3.0-beta2 || ^6.1.0" - } - }, - "node_modules/@fortawesome/fontawesome-common-types": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.1.1.tgz", - "integrity": "sha512-wVn5WJPirFTnzN6tR95abCx+ocH+3IFLXAgyavnf9hUmN0CfWoDjPT/BAWsUVwSlYYVBeCLJxaqi7ZGe4uSjBA==", - "hasInstallScript": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/fontawesome-svg-core": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.1.1.tgz", - "integrity": "sha512-NCg0w2YIp81f4V6cMGD9iomfsIj7GWrqmsa0ZsPh59G7PKiGN1KymZNxmF00ssuAlo/VZmpK6xazsGOwzKYUMg==", - "hasInstallScript": true, - "dependencies": { - "@fortawesome/fontawesome-common-types": "6.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/free-regular-svg-icons": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.1.1.tgz", - "integrity": "sha512-xXiW7hcpgwmWtndKPOzG+43fPH7ZjxOaoeyooptSztGmJxCAflHZxXNK0GcT0uEsR4jTGQAfGklDZE5NHoBhKg==", - "hasInstallScript": true, - "dependencies": { - "@fortawesome/fontawesome-common-types": "6.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/free-solid-svg-icons": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.1.1.tgz", - "integrity": "sha512-0/5exxavOhI/D4Ovm2r3vxNojGZioPwmFrKg0ZUH69Q68uFhFPs6+dhAToh6VEQBntxPRYPuT5Cg1tpNa9JUPg==", - "hasInstallScript": true, - "dependencies": { - "@fortawesome/fontawesome-common-types": "6.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@gar/promisify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.2.tgz", - "integrity": "sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==", - "dev": true - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz", - "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "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, - "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/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-1.0.0.tgz", - "integrity": "sha512-9oLAnygRMi8Q5QkYEU4XWK04B+nuoXoxjRvRxgjuChkLZFBja0YPSgdZ7dZtwhncLBcQe/I/E+fLuk5qxcYVJA==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@ngtools/webpack": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.0.3.tgz", - "integrity": "sha512-sVi1Xk8pyy6Y6JODySucYfvuxb5k3IIX/oIWy8QxlFVzpeB2UMqEOevrgvtmiEbQNB1W+aYSTph6oeV+PRX5YA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "@angular/compiler-cli": "^13.0.0", - "typescript": "~4.4.3", - "webpack": "^5.30.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, - "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, - "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, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/fs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.0.0.tgz", - "integrity": "sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ==", - "dev": true, - "dependencies": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, - "node_modules/@npmcli/git": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz", - "integrity": "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==", - "dev": true, - "dependencies": { - "@npmcli/promise-spawn": "^1.3.2", - "lru-cache": "^6.0.0", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^6.1.1", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" - } - }, - "node_modules/@npmcli/git/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, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/installed-package-contents": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", - "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", - "dev": true, - "dependencies": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - }, - "bin": { - "installed-package-contents": "index.js" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "dev": true, - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/node-gyp": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz", - "integrity": "sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==", - "dev": true - }, - "node_modules/@npmcli/promise-spawn": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", - "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", - "dev": true, - "dependencies": { - "infer-owner": "^1.0.4" - } - }, - "node_modules/@npmcli/run-script": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-2.0.0.tgz", - "integrity": "sha512-fSan/Pu11xS/TdaTpTB0MRn9guwGU8dye+x56mEVgBEd/QsybBbYcAL0phPXi8SGWFEChkQd6M9qL4y6VOpFig==", - "dev": true, - "dependencies": { - "@npmcli/node-gyp": "^1.0.2", - "@npmcli/promise-spawn": "^1.3.2", - "node-gyp": "^8.2.0", - "read-package-json-fast": "^2.0.1" - } - }, - "node_modules/@schematics/angular": { - "version": "13.0.4", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.0.4.tgz", - "integrity": "sha512-P9F5c8ApLbEyfNO4TZNsTyAdrtOjwIhrM/P+eEC4/x6nklWlEFE6TGMYTNjiK/RRhkbX1tBs8gcdJLYxtEqPSg==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "13.0.4", - "@angular-devkit/schematics": "13.0.4", - "jsonc-parser": "3.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@schematics/angular/node_modules/@angular-devkit/core": { - "version": "13.0.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.0.4.tgz", - "integrity": "sha512-AzgLvERLC6qzY5aZWUpkz5nx+pZChrq3DSt6azMPALwzzoABrwiO6XqzRnj17mXtANXLH2oe9FuHr9jzgFbF1g==", - "dev": true, - "dependencies": { - "ajv": "8.6.3", - "ajv-formats": "2.1.1", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.7", - "source-map": "0.7.3" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@schematics/angular/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@schematics/angular/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "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==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@types/component-emitter": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", - "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==", - "dev": true - }, - "node_modules/@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", - "dev": true - }, - "node_modules/@types/cors": { - "version": "2.8.12", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", - "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", - "dev": true - }, - "node_modules/@types/eslint": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.2.0.tgz", - "integrity": "sha512-74hbvsnc+7TEDa1z5YLSe4/q8hGYB3USNvCuzHUJrjPV6hXaq8IXcngCrHkuvFt0+8rFz7xYXrHgNayIX0UZvQ==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", - "dev": true - }, - "node_modules/@types/http-proxy": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.7.tgz", - "integrity": "sha512-9hdj6iXH64tHSLTY+Vt2eYOGzSogC+JQ2H7bdPWkuh7KXP5qLllWx++t+K9Wk556c3dkDdPws/SpMRi0sdCT1w==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/jasmine": { - "version": "3.10.2", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.10.2.tgz", - "integrity": "sha512-qs4xjVm4V/XjM6owGm/x6TNmhGl5iKX8dkTdsgdgl9oFnqgzxLepnS7rN9Tdo7kDmnFD/VEqKrW57cGD2odbEg==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", - "dev": true - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true, - "peer": true - }, - "node_modules/@types/node": { - "version": "12.20.37", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.37.tgz", - "integrity": "sha512-i1KGxqcvJaLQali+WuypQnXwcplhtNtjs66eNsZpp2P2FL/trJJxx/VWsM0YCL2iMoIJrbXje48lvIQAQ4p2ZA==", - "dev": true - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "node_modules/@types/retry": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", - "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", - "dev": true - }, - "node_modules/@types/scriptjs": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@types/scriptjs/-/scriptjs-0.0.2.tgz", - "integrity": "sha1-CaIociGno0H8a5WwBeS/sqVANTg=", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.12.0.tgz", - "integrity": "sha512-fwCMkDimwHVeIOKeBHiZhRUfJXU8n6xW1FL9diDxAyGAFvKcH4csy0v7twivOQdQdA0KC8TDr7GGRd3L4Lv0rQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.12.0", - "@typescript-eslint/type-utils": "5.12.0", - "@typescript-eslint/utils": "5.12.0", - "debug": "^4.3.2", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.2.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.12.0.tgz", - "integrity": "sha512-MfSwg9JMBojMUoGjUmX+D2stoQj1CBYTCP0qnnVtu9A+YQXVKNtLjasYh+jozOcrb/wau8TCfWOkQTiOAruBog==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.12.0", - "@typescript-eslint/types": "5.12.0", - "@typescript-eslint/typescript-estree": "5.12.0", - "debug": "^4.3.2" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.12.0.tgz", - "integrity": "sha512-GAMobtIJI8FGf1sLlUWNUm2IOkIjvn7laFWyRx7CLrv6nLBI7su+B7lbStqVlK5NdLvHRFiJo2HhiDF7Ki01WQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.12.0", - "@typescript-eslint/visitor-keys": "5.12.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.12.0.tgz", - "integrity": "sha512-9j9rli3zEBV+ae7rlbBOotJcI6zfc6SHFMdKI9M3Nc0sy458LJ79Os+TPWeBBL96J9/e36rdJOfCuyRSgFAA0Q==", - "dev": true, - "dependencies": { - "@typescript-eslint/utils": "5.12.0", - "debug": "^4.3.2", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@typescript-eslint/type-utils/node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.12.0.tgz", - "integrity": "sha512-JowqbwPf93nvf8fZn5XrPGFBdIK8+yx5UEGs2QFAYFI8IWYfrzz+6zqlurGr2ctShMaJxqwsqmra3WXWjH1nRQ==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.12.0.tgz", - "integrity": "sha512-Dd9gVeOqt38QHR0BEA8oRaT65WYqPYbIc5tRFQPkfLquVEFPD1HAtbZT98TLBkEcCkvwDYOAvuSvAD9DnQhMfQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.12.0", - "@typescript-eslint/visitor-keys": "5.12.0", - "debug": "^4.3.2", - "globby": "^11.0.4", - "is-glob": "^4.0.3", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.12.0.tgz", - "integrity": "sha512-k4J2WovnMPGI4PzKgDtQdNrCnmBHpMUFy21qjX2CoPdoBcSBIMvVBr9P2YDP8jOqZOeK3ThOL6VO/sy6jtnvzw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.12.0", - "@typescript-eslint/types": "5.12.0", - "@typescript-eslint/typescript-estree": "5.12.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.12.0.tgz", - "integrity": "sha512-cFwTlgnMV6TgezQynx2c/4/tx9Tufbuo9LPzmWqyRC3QC4qTGkAG1C6pBr0/4I10PAI/FlYunI3vJjIcu+ZHMg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.12.0", - "eslint-visitor-keys": "^3.0.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true - }, - "node_modules/abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true, - "peerDependencies": { - "acorn": "^8" - } - }, - "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, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/adjust-sourcemap-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", - "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/adjust-sourcemap-loader/node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", - "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.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==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agentkeepalive": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz", - "integrity": "sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.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, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "8.6.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", - "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "dev": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10" - } - }, - "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, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, - "node_modules/array-includes": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", - "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", - "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/autoprefixer": { - "version": "9.8.8", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", - "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", - "dev": true, - "dependencies": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "picocolors": "^0.2.1", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - } - }, - "node_modules/autoprefixer/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/autoprefixer/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/autoprefixer/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-loader": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz", - "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==", - "dev": true, - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^1.4.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/babel-loader/node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/babel-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/babel-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.3.tgz", - "integrity": "sha512-NDZ0auNRzmAfE1oDDPW2JhzIMXUk+FFe2ICejmt5T4ocKgiQx3e0VCRx9NCAidcMtL2RUZaWtXnmjTCkx0tcbA==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.4", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz", - "integrity": "sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.2", - "core-js-compat": "^3.16.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.3.tgz", - "integrity": "sha512-JVE78oRZPKFIeUqFGrSORNzQnrDwZR16oiWeGM8ZyjBn2XAT5OjP+wXx5ESuo33nUsFUEJYjtklnsKbxW5L+7g==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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==", - "dev": true - }, - "node_modules/base64-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.1.tgz", - "integrity": "sha512-vFIUq7FdLtjZMhATwDul5RZWv2jpXQ09Pd6jcVEOvIsqCWTRFD/ONHNfyOS8dA/Ippi5dsIgpyKWKZaAKZltbA==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "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==", - "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" - } - ] - }, - "node_modules/base64id": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", - "dev": true, - "engines": { - "node": "^4.5.0 || >= 5.9" - } - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true - }, - "node_modules/big.js": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-6.1.1.tgz", - "integrity": "sha512-1vObw81a8ylZO5ePrtMay0n018TcftpTA5HFKDaSuiUDBo8biRBtjIobw60OpwuvrGk+FsxKamqN4cnmj/eXdg==", - "dev": true, - "engines": { - "node": "*" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/bigjs" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dev": true, - "dependencies": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "dev": true, - "dependencies": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "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, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz", - "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==", - "dev": true, - "dependencies": { - "caniuse-lite": "^1.0.30001280", - "electron-to-chromium": "^1.3.896", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "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" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true - }, - "node_modules/builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", - "dev": true - }, - "node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "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, - "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, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001283", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001283.tgz", - "integrity": "sha512-9RoKo841j1GQFSJz/nCXOj0sD7tHBtlowjYlrqIUS812x9/emfBLBt6IyMz1zIaYc/eRL8Cs6HPUVi2Hzq4sIg==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/canonical-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz", - "integrity": "sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg==", - "dev": true - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "node_modules/chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "dev": true, - "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" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/circular-dependency-plugin": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.2.2.tgz", - "integrity": "sha512-g38K9Cm5WRwlaH6g03B9OEz/0qRizI+2I7n+Gz+L5DxXJAPAiWQvwlYNm1V1jkdpUv95bOe/ASm2vfi/G560jQ==", - "dev": true, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "webpack": ">=4.0.1" - } - }, - "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, - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "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==", - "dev": true, - "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": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", - "dev": true - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "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==", - "dev": true - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", - "dev": true - }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "node_modules/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dev": true, - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", - "dev": true, - "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": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "node_modules/copy-anything": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.3.tgz", - "integrity": "sha512-GK6QUtisv4fNS+XcI7shX0Gx9ORg7QqIznyfho79JTnX1XhLiyZHfftvGiziqzRiEi/Bjhgpi+D2o7HxJFPnDQ==", - "dev": true, - "dependencies": { - "is-what": "^3.12.0" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.0.1.tgz", - "integrity": "sha512-14gHKKdYIxF84jCEgPgYXCPpldbwpxxLbCmA7LReY7gvbaT555DgeBWBgBZM116tv/fO6RRJrsivBqRyRlukhw==", - "dev": true, - "dependencies": { - "fast-glob": "^3.2.5", - "glob-parent": "^6.0.0", - "globby": "^11.0.3", - "normalize-path": "^3.0.0", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^6.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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/copy-webpack-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/copy-webpack-plugin/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==", - "dev": true - }, - "node_modules/copy-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/core-js": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.19.0.tgz", - "integrity": "sha512-L1TpFRWXZ76vH1yLM+z6KssLZrP8Z6GxxW4auoCj+XiViOzNPJCAuTIkn03BGdFe6Z5clX5t64wRIRypsZQrUg==", - "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.19.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.19.1.tgz", - "integrity": "sha512-Q/VJ7jAF/y68+aUsQJ/afPOewdsGkDtcMb40J8MbuWKlK3Y+wtHq8bTHKPj2WKWLIqmS5JhHs4CzHtz6pT2W6g==", - "dev": true, - "dependencies": { - "browserslist": "^4.17.6", - "semver": "7.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "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==", - "dev": true, - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/critters": { - "version": "0.0.14", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.14.tgz", - "integrity": "sha512-YiBoGKfU8/xg+tVMw0KfMBgmr0TWa1JGmRXDzbQRQQaDarGUcZZtZEB25QyYrLasQZAnvqoZhSg2GW0zdsQkYQ==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "css-select": "^4.1.3", - "parse5": "^6.0.1", - "parse5-htmlparser2-tree-adapter": "^6.0.1", - "postcss": "^8.3.7", - "pretty-bytes": "^5.3.0" - } - }, - "node_modules/critters/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, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/critters/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, - "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/critters/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/critters/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 - }, - "node_modules/critters/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/critters/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, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cross-spawn/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, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", - "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.4", - "source-map": "^0.6.1", - "source-map-resolve": "^0.6.0" - } - }, - "node_modules/css-blank-pseudo": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz", - "integrity": "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==", - "dev": true, - "dependencies": { - "postcss": "^7.0.5" - }, - "bin": { - "css-blank-pseudo": "cli.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/css-blank-pseudo/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/css-blank-pseudo/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/css-blank-pseudo/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/css-has-pseudo": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz", - "integrity": "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==", - "dev": true, - "dependencies": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^5.0.0-rc.4" - }, - "bin": { - "css-has-pseudo": "cli.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/css-has-pseudo/node_modules/cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/css-has-pseudo/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/css-has-pseudo/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/css-has-pseudo/node_modules/postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dev": true, - "dependencies": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/css-has-pseudo/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/css-loader": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.5.0.tgz", - "integrity": "sha512-VmuSdQa3K+wJsl39i7X3qGBM5+ZHmtTnv65fqMGI+fzmHoYmszTVvTqC1XN8JwWDViCB1a8wgNim5SV4fb37xg==", - "dev": true, - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.2.15", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.1.0", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/css-prefers-color-scheme": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz", - "integrity": "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==", - "dev": true, - "dependencies": { - "postcss": "^7.0.5" - }, - "bin": { - "css-prefers-color-scheme": "cli.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/css-prefers-color-scheme/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/css-prefers-color-scheme/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/css-prefers-color-scheme/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/css-select": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", - "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", - "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cssdb": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz", - "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==", - "dev": true - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", - "dev": true - }, - "node_modules/date-format": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz", - "integrity": "sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dev": true, - "dependencies": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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 - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "dependencies": { - "clone": "^1.0.2" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/del": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", - "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", - "dev": true, - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/dependency-graph": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "node_modules/di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", - "dev": true - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true - }, - "node_modules/dns-packet": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", - "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", - "dev": true, - "dependencies": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "dev": true, - "dependencies": { - "buffer-indexof": "^1.0.0" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", - "dev": true, - "dependencies": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "dev": true, - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", - "dev": true, - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "node_modules/electron-to-chromium": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.1.tgz", - "integrity": "sha512-9ldvb6QMHiDpUNF1iSwBTiTT0qXEN+xIO5WlCJrC5gt0z74ofOiqR698vaJqYWnri0XZiF0YmnrFmGq/EmpGAA==", - "dev": true - }, - "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 - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/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==", - "dev": true, - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/engine.io": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.0.tgz", - "integrity": "sha512-ErhZOVu2xweCjEfYcTdkCnEYUiZgkAcBBAhW4jbIvNG8SLU3orAqoJCiytZjYF7eTpVmmCrLDjLIEaPlUAs1uw==", - "dev": true, - "dependencies": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.0.0", - "ws": "~8.2.3" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/engine.io-parser": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.2.tgz", - "integrity": "sha512-wuiO7qO/OEkPJSFueuATIXtrxF7/6GTbAO9QLv7nnbjwZ5tYhLm9zxvLwxstRs0dcT0KUlWTjtIOs1T86jt12g==", - "dev": true, - "dependencies": { - "base64-arraybuffer": "~1.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", - "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", - "dev": true - }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "optional": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "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, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", - "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/esbuild": { - "version": "0.13.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.12.tgz", - "integrity": "sha512-vTKKUt+yoz61U/BbrnmlG9XIjwpdIxmHB8DlPR0AAW6OdS+nBQBci6LUHU2q9WbBobMEIQxxDpKbkmOGYvxsow==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "optionalDependencies": { - "esbuild-android-arm64": "0.13.12", - "esbuild-darwin-64": "0.13.12", - "esbuild-darwin-arm64": "0.13.12", - "esbuild-freebsd-64": "0.13.12", - "esbuild-freebsd-arm64": "0.13.12", - "esbuild-linux-32": "0.13.12", - "esbuild-linux-64": "0.13.12", - "esbuild-linux-arm": "0.13.12", - "esbuild-linux-arm64": "0.13.12", - "esbuild-linux-mips64le": "0.13.12", - "esbuild-linux-ppc64le": "0.13.12", - "esbuild-netbsd-64": "0.13.12", - "esbuild-openbsd-64": "0.13.12", - "esbuild-sunos-64": "0.13.12", - "esbuild-windows-32": "0.13.12", - "esbuild-windows-64": "0.13.12", - "esbuild-windows-arm64": "0.13.12" - } - }, - "node_modules/esbuild-darwin-64": { - "version": "0.13.12", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.12.tgz", - "integrity": "sha512-c51C+N+UHySoV2lgfWSwwmlnLnL0JWj/LzuZt9Ltk9ub1s2Y8cr6SQV5W3mqVH1egUceew6KZ8GyI4nwu+fhsw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/esbuild-wasm": { - "version": "0.13.12", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.13.12.tgz", - "integrity": "sha512-eGdiSewbnJffEvyA0qQmr+w3HurBMVp4QhOfICzeeoL9naC8qC3PFaw6hZaqSgks5DXnQONtUGUFLsX3eXpq8A==", - "dev": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "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": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "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": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.9.0.tgz", - "integrity": "sha512-PB09IGwv4F4b0/atrbcMFboF/giawbBLVC7fyDamk5Wtey4Jh2K+rYaBhCAbUyEI4QzB1ly09Uglc9iCtFaG2Q==", - "dev": true, - "dependencies": { - "@eslint/eslintrc": "^1.1.0", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "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.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "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-airbnb-base": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", - "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", - "dev": true, - "dependencies": { - "confusing-browser-globals": "^1.0.10", - "object.assign": "^4.1.2", - "object.entries": "^1.1.5", - "semver": "^6.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "peerDependencies": { - "eslint": "^7.32.0 || ^8.2.0", - "eslint-plugin-import": "^2.25.2" - } - }, - "node_modules/eslint-config-airbnb-base/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-config-google": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz", - "integrity": "sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "eslint": ">=5.16.0" - } - }, - "node_modules/eslint-config-prettier": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.4.0.tgz", - "integrity": "sha512-CFotdUcMY18nGRo5KGsnNxpznzhkopOcOo0InID+sgQssPrzjvsyKZPvOgymTFeHrFuC3Tzdf2YndhXtULK9Iw==", - "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "dev": true, - "peer": true, - "dependencies": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - } - }, - "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, - "peer": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", - "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", - "dev": true, - "peer": true, - "dependencies": { - "debug": "^3.2.7", - "find-up": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "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, - "peer": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "peer": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "peer": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "peer": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "peer": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.25.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz", - "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==", - "dev": true, - "peer": true, - "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.2", - "has": "^1.0.3", - "is-core-module": "^2.8.0", - "is-glob": "^4.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.5", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.12.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "peer": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "peer": true - }, - "node_modules/eslint-plugin-prettier": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", - "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==", - "dev": true, - "dependencies": { - "prettier-linter-helpers": "^1.0.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "eslint": ">=7.28.0", - "prettier": ">=2.0.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "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, - "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, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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/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, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/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==", - "dev": true - }, - "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, - "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, - "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 - }, - "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, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/eslint/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, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/eslint/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==", - "dev": true - }, - "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, - "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, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/espree": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", - "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", - "dev": true, - "dependencies": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "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==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "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, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "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==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter-asyncresource": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", - "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", - "dev": true - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "dev": true, - "dependencies": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "node_modules/express/node_modules/cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "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==", - "dev": true - }, - "node_modules/fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "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, - "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": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flat-cache/node_modules/flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", - "dev": true - }, - "node_modules/flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true - }, - "node_modules/flatten": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", - "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==", - "deprecated": "flatten is deprecated in favor of utility frameworks such as lodash.", - "dev": true - }, - "node_modules/follow-redirects": { - "version": "1.14.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz", - "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "node_modules/gauge": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.0.tgz", - "integrity": "sha512-F8sU45yQpjQjxKkm1UOAhf0U/O0aFt//Fl7hsrNVto+patMHjs7dPI9mFOGUKbhrgKm0S3EjW3scMFuQmWSROw==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1", - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "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, - "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, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "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, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "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, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "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, - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", - "dev": true - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "node_modules/hdr-histogram-js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.1.tgz", - "integrity": "sha512-uPZxl1dAFnjUFHWLZmt93vUUvtHeaBay9nVNHu38SdOjMSF/4KqJUqa1Seuj08ptU1rEb6AHvB41X8n/zFZ74Q==", - "dev": true, - "dependencies": { - "@assemblyscript/loader": "^0.10.1", - "base64-js": "^1.2.0", - "pako": "^1.0.3" - } - }, - "node_modules/hdr-histogram-percentiles-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", - "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", - "dev": true - }, - "node_modules/hosted-git-info": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "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/hpack.js/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==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-entities": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", - "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", - "dev": true - }, - "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 - }, - "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true - }, - "node_modules/http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http-errors/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "node_modules/http-parser-js": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", - "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", - "dev": true - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "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==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.1.tgz", - "integrity": "sha512-cfaXRVoZxSed/BmkA7SwBVNI9Kj7HFltaE5rqYOub5kWzWZ+gofV2koVN1j2rMW7pEfSSlCHGJ31xmuyFyfLOg==", - "dev": true, - "dependencies": { - "@types/http-proxy": "^1.17.5", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", - "dev": true, - "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==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "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" - } - ] - }, - "node_modules/ignore": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", - "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-walk": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-4.0.1.tgz", - "integrity": "sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw==", - "dev": true, - "dependencies": { - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", - "dev": true, - "optional": true, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "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, - "engines": { - "node": ">=4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "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==", - "dev": true - }, - "node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/inquirer": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.0.tgz", - "integrity": "sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.2.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/inquirer/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, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/inquirer/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, - "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/inquirer/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/inquirer/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 - }, - "node_modules/inquirer/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/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, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/internal-ip": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-6.2.0.tgz", - "integrity": "sha512-D8WGsR6yDt8uq7vDMu7mjcR+yRMm3dW8yufyChmszWRjcSHuxLBkR3GdS2HZAjodsaGuCvXeEJpueisXJULghg==", - "dev": true, - "dependencies": { - "default-gateway": "^6.0.0", - "ipaddr.js": "^1.9.1", - "is-ip": "^3.1.0", - "p-event": "^4.2.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/internal-ip?sponsor=1" - } - }, - "node_modules/internal-ip/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==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "node_modules/ip-regex": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", - "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "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": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "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, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "engines": { - "node": ">=8" - } - }, - "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, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-ip": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz", - "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==", - "dev": true, - "dependencies": { - "ip-regex": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", - "dev": true - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, - "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, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", - "dev": true, - "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==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-what": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", - "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", - "dev": true - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/isbinaryfile": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", - "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==", - "dev": true, - "engines": { - "node": ">= 8.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", - "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "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, - "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/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz", - "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jasmine-core": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.10.1.tgz", - "integrity": "sha512-ooZWSDVAdh79Rrj4/nnfklL3NQVra0BcuhcuWoAwwi+znLDoUeH87AFfeX8s+YeYi6xlv5nveRyaA1v7CintfA==", - "dev": true - }, - "node_modules/jest-worker": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.3.1.tgz", - "integrity": "sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "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 - }, - "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, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "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 - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", - "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true, - "engines": [ - "node >= 0.2.0" - ] - }, - "node_modules/karma": { - "version": "6.3.9", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.9.tgz", - "integrity": "sha512-E/MqdLM9uVIhfuyVnrhlGBu4miafBdXEAEqCmwdEMh3n17C7UWC/8Kvm3AYKr91gc7scutekZ0xv6rxRaUCtnw==", - "dev": true, - "dependencies": { - "body-parser": "^1.19.0", - "braces": "^3.0.2", - "chokidar": "^3.5.1", - "colors": "^1.4.0", - "connect": "^3.7.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.1", - "glob": "^7.1.7", - "graceful-fs": "^4.2.6", - "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.8", - "lodash": "^4.17.21", - "log4js": "^6.3.0", - "mime": "^2.5.2", - "minimatch": "^3.0.4", - "qjobs": "^1.2.0", - "range-parser": "^1.2.1", - "rimraf": "^3.0.2", - "socket.io": "^4.2.0", - "source-map": "^0.6.1", - "tmp": "^0.2.1", - "ua-parser-js": "^0.7.30", - "yargs": "^16.1.1" - }, - "bin": { - "karma": "bin/karma" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/karma-chrome-launcher": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz", - "integrity": "sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg==", - "dev": true, - "dependencies": { - "which": "^1.2.1" - } - }, - "node_modules/karma-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.0.3.tgz", - "integrity": "sha512-atDvLQqvPcLxhED0cmXYdsPMCQuh6Asa9FMZW1bhNqlVEhJoB9qyZ2BY1gu7D/rr5GLGb5QzYO4siQskxaWP/g==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.1", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.0", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/karma-coverage/node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/karma-coverage/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/karma-jasmine": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-4.0.1.tgz", - "integrity": "sha512-h8XDAhTiZjJKzfkoO1laMH+zfNlra+dEQHUAjpn5JV1zCPtOIVWGQjLBrqhnzQa/hrU2XrZwSyBa6XjEBzfXzw==", - "dev": true, - "dependencies": { - "jasmine-core": "^3.6.0" - }, - "engines": { - "node": ">= 10" - }, - "peerDependencies": { - "karma": "*" - } - }, - "node_modules/karma-jasmine-html-reporter": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.7.0.tgz", - "integrity": "sha512-pzum1TL7j90DTE86eFt48/s12hqwQuiD+e5aXx2Dc9wDEn2LfGq6RoAxEZZjFiN0RDSCOnosEKRZWxbQ+iMpQQ==", - "dev": true, - "peerDependencies": { - "jasmine-core": ">=3.8", - "karma": ">=0.9", - "karma-jasmine": ">=1.1" - } - }, - "node_modules/karma-source-map-support": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", - "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", - "dev": true, - "dependencies": { - "source-map-support": "^0.5.5" - } - }, - "node_modules/karma/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/karma/node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/karma/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/less": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/less/-/less-4.1.2.tgz", - "integrity": "sha512-EoQp/Et7OSOVu0aJknJOtlXZsnr8XE8KwuzTHOLeVSEx8pVWUICc8Q0VYRHgzyjX78nMEyC/oztWFbgyhtNfDA==", - "dev": true, - "dependencies": { - "copy-anything": "^2.0.1", - "parse-node-version": "^1.0.1", - "tslib": "^2.3.0" - }, - "bin": { - "lessc": "bin/lessc" - }, - "engines": { - "node": ">=6" - }, - "optionalDependencies": { - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "needle": "^2.5.2", - "source-map": "~0.6.0" - } - }, - "node_modules/less-loader": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-10.2.0.tgz", - "integrity": "sha512-AV5KHWvCezW27GT90WATaDnfXBv99llDbtaj4bshq6DvAihMdNjaPDcUMa6EXKLRF+P2opFenJp89BXg91XLYg==", - "dev": true, - "dependencies": { - "klona": "^2.0.4" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "less": "^3.5.0 || ^4.0.0", - "webpack": "^5.0.0" - } - }, - "node_modules/less/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "optional": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/less/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "optional": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/less/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, - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/less/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "optional": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/less/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/license-webpack-plugin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.0.tgz", - "integrity": "sha512-b9iMrROrw2fTOJBZ57h0xJfT5/1Cxg4ucYbtpWoukv4Awb2TFPfDDFVHNM8w6SYQpVfB13a5tQJxgGamqwrsyw==", - "dev": true, - "dependencies": { - "webpack-sources": "^3.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-sources": { - "optional": true - } - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", - "dev": true, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.0.0.tgz", - "integrity": "sha512-ry4RE7qen73BFLgihlbyllGIW9SVWLUD5Cq9VWtzrqhntOMOJl8yEjA89d5mCUTT0puCnHo4EecO6bz+BOAS8w==", - "dev": true, - "dependencies": { - "big.js": "^6.1.1" - }, - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true - }, - "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 - }, - "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, - "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, - "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, - "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, - "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 - }, - "node_modules/log-symbols/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, - "engines": { - "node": ">=8" - } - }, - "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, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log4js": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.3.0.tgz", - "integrity": "sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw==", - "dev": true, - "dependencies": { - "date-format": "^3.0.0", - "debug": "^4.1.1", - "flatted": "^2.0.1", - "rfdc": "^1.1.4", - "streamroller": "^2.2.4" - }, - "engines": { - "node": ">=8.0" - } - }, - "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==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.4" - } - }, - "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, - "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.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/make-fetch-happen": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "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=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.0.tgz", - "integrity": "sha512-o/RfP0J1d03YwsAxyHxAYs2kyJp55AFkMazlFAZFR2I2IXkxiUTXRabJ6RmNNCQ83LAD2jy52Khj0m3OffpNdA==", - "dev": true, - "dependencies": { - "fs-monkey": "1.0.3" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "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=", - "dev": true - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "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, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "dev": true, - "dependencies": { - "mime-db": "1.51.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.4.3.tgz", - "integrity": "sha512-zekavl9mZuGyk7COjsfFY/f655AX61EKE0AthXPrmDk+oZyjZ9WzO4WPjXnnO9xl8obK2kmM6rAQrBEmk+WK1g==", - "dev": true, - "dependencies": { - "schema-utils": "^3.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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/mini-css-extract-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/mini-css-extract-plugin/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==", - "dev": true - }, - "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "node_modules/minipass": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz", - "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", - "dev": true, - "dependencies": { - "minipass": "^3.1.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "optionalDependencies": { - "encoding": "^0.1.12" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-json-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", - "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", - "dev": true, - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "dev": true, - "dependencies": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.1.30", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", - "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node_modules/needle": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", - "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", - "dev": true, - "optional": true, - "dependencies": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 4.4.x" - } - }, - "node_modules/needle/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "optional": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/nice-napi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", - "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "!win32" - ], - "dependencies": { - "node-addon-api": "^3.0.0", - "node-gyp-build": "^4.2.2" - } - }, - "node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true, - "optional": true - }, - "node_modules/node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", - "dev": true, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/node-gyp": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", - "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", - "dev": true, - "dependencies": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^9.1.0", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": ">= 10.12.0" - } - }, - "node_modules/node-gyp-build": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", - "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", - "dev": true, - "optional": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-gyp/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, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", - "dev": true - }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", - "dev": true, - "dependencies": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "node_modules/npm-install-checks": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", - "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", - "dev": true, - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true - }, - "node_modules/npm-package-arg": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", - "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", - "validate-npm-package-name": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-packlist": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-3.0.0.tgz", - "integrity": "sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ==", - "dev": true, - "dependencies": { - "glob": "^7.1.6", - "ignore-walk": "^4.0.1", - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - }, - "bin": { - "npm-packlist": "bin/index.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-pick-manifest": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", - "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", - "dev": true, - "dependencies": { - "npm-install-checks": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^8.1.2", - "semver": "^7.3.4" - } - }, - "node_modules/npm-registry-fetch": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", - "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", - "dev": true, - "dependencies": { - "make-fetch-happen": "^9.0.1", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npmlog": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.0.tgz", - "integrity": "sha512-03ppFRGlsyUaQFbGC2C8QWJN/C/K7PsfyD9aQdhVKAQIH4sQBc8WASqFBP7O+Ut4d2oo5LoeoboB3cGdBZSp6Q==", - "dev": true, - "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.0", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true - }, - "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=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "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==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", - "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "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.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/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, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ora/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, - "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/ora/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ora/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 - }, - "node_modules/ora/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/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, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-event": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", - "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", - "dev": true, - "dependencies": { - "p-timeout": "^3.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "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, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", - "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", - "dev": true, - "dependencies": { - "@types/retry": "^0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-retry/node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, - "dependencies": { - "p-finally": "^1.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, - "engines": { - "node": ">=6" - } - }, - "node_modules/pacote": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-12.0.2.tgz", - "integrity": "sha512-Ar3mhjcxhMzk+OVZ8pbnXdb0l8+pimvlsqBGRNkble2NVgyqOGE3yrCGi/lAYq7E7NRDMz89R1Wx5HIMCGgeYg==", - "dev": true, - "dependencies": { - "@npmcli/git": "^2.1.0", - "@npmcli/installed-package-contents": "^1.0.6", - "@npmcli/promise-spawn": "^1.2.0", - "@npmcli/run-script": "^2.0.0", - "cacache": "^15.0.5", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.3", - "mkdirp": "^1.0.3", - "npm-package-arg": "^8.0.1", - "npm-packlist": "^3.0.0", - "npm-pick-manifest": "^6.0.0", - "npm-registry-fetch": "^11.0.0", - "promise-retry": "^2.0.1", - "read-package-json-fast": "^2.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.1.0" - }, - "bin": { - "pacote": "lib/bin.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "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, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/parse5-html-rewriting-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-6.0.1.tgz", - "integrity": "sha512-vwLQzynJVEfUlURxgnf51yAJDQTtVpNyGD8tKi2Za7m+akukNHxCcUQMAa/mUGLhCeicFdpy7Tlvj8ZNKadprg==", - "dev": true, - "dependencies": { - "parse5": "^6.0.1", - "parse5-sax-parser": "^6.0.1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dev": true, - "dependencies": { - "parse5": "^6.0.1" - } - }, - "node_modules/parse5-sax-parser": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz", - "integrity": "sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg==", - "dev": true, - "dependencies": { - "parse5": "^6.0.1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "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, - "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": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "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, - "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 - }, - "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=", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/piscina": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.1.0.tgz", - "integrity": "sha512-KTW4sjsCD34MHrUbx9eAAbuUSpVj407hQSgk/6Epkg0pbRBmv4a3UX7Sr8wxm9xYqQLnsN4mFOjqGDzHAdgKQg==", - "dev": true, - "dependencies": { - "eventemitter-asyncresource": "^1.0.0", - "hdr-histogram-js": "^2.0.1", - "hdr-histogram-percentiles-obj": "^3.0.0" - }, - "optionalDependencies": { - "nice-napi": "^1.0.2" - } - }, - "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, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "dev": true, - "dependencies": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "engines": { - "node": ">= 0.12.0" - } - }, - "node_modules/portfinder/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/portfinder/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/postcss": { - "version": "8.3.11", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.11.tgz", - "integrity": "sha512-hCmlUAIlUiav8Xdqw3Io4LcpA1DOt7h3LSTAC4G6JGHFFaWzI6qvFt9oilvl8BmkbBRX1IhM90ZAmpk68zccQA==", - "dev": true, - "dependencies": { - "nanoid": "^3.1.30", - "picocolors": "^1.0.0", - "source-map-js": "^0.6.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-attribute-case-insensitive": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz", - "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^6.0.2" - } - }, - "node_modules/postcss-attribute-case-insensitive/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-attribute-case-insensitive/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-attribute-case-insensitive/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-color-functional-notation": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", - "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-color-functional-notation/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-color-functional-notation/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-color-functional-notation/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-color-gray": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz", - "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==", - "dev": true, - "dependencies": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.5", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-color-gray/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-color-gray/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-color-gray/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-color-hex-alpha": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz", - "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==", - "dev": true, - "dependencies": { - "postcss": "^7.0.14", - "postcss-values-parser": "^2.0.1" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-color-hex-alpha/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-color-hex-alpha/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-color-hex-alpha/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-color-mod-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz", - "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==", - "dev": true, - "dependencies": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-color-mod-function/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-color-mod-function/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-color-mod-function/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-color-rebeccapurple": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz", - "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-color-rebeccapurple/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-color-rebeccapurple/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-color-rebeccapurple/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-custom-media": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz", - "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==", - "dev": true, - "dependencies": { - "postcss": "^7.0.14" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-custom-media/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-custom-media/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-custom-media/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-custom-properties": { - "version": "8.0.11", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz", - "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==", - "dev": true, - "dependencies": { - "postcss": "^7.0.17", - "postcss-values-parser": "^2.0.1" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-custom-properties/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-custom-properties/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-custom-properties/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-custom-selectors": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz", - "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-custom-selectors/node_modules/cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-custom-selectors/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-custom-selectors/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-custom-selectors/node_modules/postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dev": true, - "dependencies": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-custom-selectors/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-dir-pseudo-class": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz", - "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/postcss-dir-pseudo-class/node_modules/cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-dir-pseudo-class/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-dir-pseudo-class/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-dir-pseudo-class/node_modules/postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dev": true, - "dependencies": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-dir-pseudo-class/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-double-position-gradients": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz", - "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==", - "dev": true, - "dependencies": { - "postcss": "^7.0.5", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-double-position-gradients/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-double-position-gradients/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-double-position-gradients/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-env-function": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz", - "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-env-function/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-env-function/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-env-function/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-focus-visible": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz", - "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-focus-visible/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-focus-visible/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-focus-visible/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-focus-within": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz", - "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-focus-within/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-focus-within/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-focus-within/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-font-variant": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz", - "integrity": "sha512-I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2" - } - }, - "node_modules/postcss-font-variant/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-font-variant/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-font-variant/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-gap-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz", - "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-gap-properties/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-gap-properties/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-gap-properties/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-image-set-function": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz", - "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-image-set-function/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-image-set-function/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-image-set-function/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-import": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.2.tgz", - "integrity": "sha512-BJ2pVK4KhUyMcqjuKs9RijV5tatNzNa73e/32aBVE/ejYPe37iH+6vAu9WvqUkB5OAYgLHzbSvzHnorybJCm9g==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-initial": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.4.tgz", - "integrity": "sha512-3RLn6DIpMsK1l5UUy9jxQvoDeUN4gP939tDcKUHD/kM8SGSKbFAnvkpFpj3Bhtz3HGk1jWY5ZNWX6mPta5M9fg==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2" - } - }, - "node_modules/postcss-initial/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-initial/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-initial/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-lab-function": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz", - "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==", - "dev": true, - "dependencies": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-lab-function/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-lab-function/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-lab-function/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.0.tgz", - "integrity": "sha512-H9hv447QjQJVDbHj3OUdciyAXY3v5+UDduzEytAlZCVHCpNAAg/mCSwhYYqZr9BiGYhmYspU8QXxZwiHTLn3yA==", - "dev": true, - "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.4", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-logical": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz", - "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-logical/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-logical/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-logical/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-media-minmax": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz", - "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-media-minmax/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-media-minmax/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-media-minmax/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-nesting": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz", - "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-nesting/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-nesting/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-nesting/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-overflow-shorthand": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", - "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-overflow-shorthand/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-overflow-shorthand/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-overflow-shorthand/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-page-break": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz", - "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2" - } - }, - "node_modules/postcss-page-break/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-page-break/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-page-break/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-place": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz", - "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-place/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-place/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-place/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-preset-env": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz", - "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==", - "dev": true, - "dependencies": { - "autoprefixer": "^9.6.1", - "browserslist": "^4.6.4", - "caniuse-lite": "^1.0.30000981", - "css-blank-pseudo": "^0.1.4", - "css-has-pseudo": "^0.10.0", - "css-prefers-color-scheme": "^3.1.1", - "cssdb": "^4.4.0", - "postcss": "^7.0.17", - "postcss-attribute-case-insensitive": "^4.0.1", - "postcss-color-functional-notation": "^2.0.1", - "postcss-color-gray": "^5.0.0", - "postcss-color-hex-alpha": "^5.0.3", - "postcss-color-mod-function": "^3.0.3", - "postcss-color-rebeccapurple": "^4.0.1", - "postcss-custom-media": "^7.0.8", - "postcss-custom-properties": "^8.0.11", - "postcss-custom-selectors": "^5.1.2", - "postcss-dir-pseudo-class": "^5.0.0", - "postcss-double-position-gradients": "^1.0.0", - "postcss-env-function": "^2.0.2", - "postcss-focus-visible": "^4.0.0", - "postcss-focus-within": "^3.0.0", - "postcss-font-variant": "^4.0.0", - "postcss-gap-properties": "^2.0.0", - "postcss-image-set-function": "^3.0.1", - "postcss-initial": "^3.0.0", - "postcss-lab-function": "^2.0.1", - "postcss-logical": "^3.0.0", - "postcss-media-minmax": "^4.0.0", - "postcss-nesting": "^7.0.0", - "postcss-overflow-shorthand": "^2.0.0", - "postcss-page-break": "^2.0.0", - "postcss-place": "^4.0.1", - "postcss-pseudo-class-any-link": "^6.0.0", - "postcss-replace-overflow-wrap": "^3.0.0", - "postcss-selector-matches": "^4.0.0", - "postcss-selector-not": "^4.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-preset-env/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-preset-env/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-preset-env/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-pseudo-class-any-link": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz", - "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-pseudo-class-any-link/node_modules/cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-pseudo-class-any-link/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-pseudo-class-any-link/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-pseudo-class-any-link/node_modules/postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dev": true, - "dependencies": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-pseudo-class-any-link/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-replace-overflow-wrap": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz", - "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2" - } - }, - "node_modules/postcss-replace-overflow-wrap/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-replace-overflow-wrap/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-replace-overflow-wrap/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-selector-matches": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz", - "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "postcss": "^7.0.2" - } - }, - "node_modules/postcss-selector-matches/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-selector-matches/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-selector-matches/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-selector-not": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz", - "integrity": "sha512-YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "postcss": "^7.0.2" - } - }, - "node_modules/postcss-selector-not/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-selector-not/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-selector-not/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", - "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", - "dev": true - }, - "node_modules/postcss-values-parser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", - "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", - "dev": true, - "dependencies": { - "flatten": "^1.0.2", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=6.14.4" - } - }, - "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, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", - "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "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==", - "dev": true, - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/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==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true, - "optional": true - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/qjobs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", - "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", - "dev": true, - "engines": { - "node": ">=0.9" - } - }, - "node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "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" - } - ] - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "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==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "dev": true, - "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", - "dev": true, - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/read-package-json-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", - "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", - "dev": true, - "dependencies": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "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, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", - "dev": true - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", - "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", - "dev": true - }, - "node_modules/regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-parser": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", - "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", - "dev": true - }, - "node_modules/regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "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, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/regexpu-core": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", - "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^9.0.0", - "regjsgen": "^0.5.2", - "regjsparser": "^0.7.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", - "dev": true - }, - "node_modules/regjsparser": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", - "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-url-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", - "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", - "dev": true, - "dependencies": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^7.0.35", - "source-map": "0.6.1" - }, - "engines": { - "node": ">=8.9" - }, - "peerDependencies": { - "rework": "1.0.1", - "rework-visit": "1.0.0" - }, - "peerDependenciesMeta": { - "rework": { - "optional": true - }, - "rework-visit": { - "optional": true - } - } - }, - "node_modules/resolve-url-loader/node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/resolve-url-loader/node_modules/loader-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", - "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/resolve-url-loader/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/resolve-url-loader/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/resolve-url-loader/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "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" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz", - "integrity": "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==", - "dependencies": { - "tslib": "~2.1.0" - } - }, - "node_modules/rxjs/node_modules/tslib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", - "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" - }, - "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==", - "dev": true - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/sass": { - "version": "1.43.4", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.43.4.tgz", - "integrity": "sha512-/ptG7KE9lxpGSYiXn7Ar+lKOv37xfWsZRtFYal2QHNigyVQDx685VFT/h7ejVr+R8w7H4tmUgtulsKl5YpveOg==", - "dev": true, - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/sass-loader": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.3.0.tgz", - "integrity": "sha512-6l9qwhdOb7qSrtOu96QQ81LVl8v6Dp9j1w3akOm0aWHyrTYtagDt5+kS32N4yq4hHk3M+rdqoRMH+lIdqvW6HA==", - "dev": true, - "dependencies": { - "klona": "^2.0.4", - "neo-async": "^2.6.2" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0", - "sass": "^1.3.0", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/schema-utils/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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/schema-utils/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/schema-utils/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==", - "dev": true - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", - "dev": true - }, - "node_modules/selfsigned": { - "version": "1.10.11", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", - "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", - "dev": true, - "dependencies": { - "node-forge": "^0.10.0" - } - }, - "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/send/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/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=", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "node_modules/serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "dev": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - }, - "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": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "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, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socket.io": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.0.tgz", - "integrity": "sha512-bnpJxswR9ov0Bw6ilhCvO38/1WPtE3eA2dtxi2Iq4/sFebiDJQzgKNYA7AuVVdGW09nrESXd90NbZqtDd9dzRQ==", - "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "debug": "~4.3.2", - "engine.io": "~6.1.0", - "socket.io-adapter": "~2.3.3", - "socket.io-parser": "~4.0.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/socket.io-adapter": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz", - "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==", - "dev": true - }, - "node_modules/socket.io-parser": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", - "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", - "dev": true, - "dependencies": { - "@types/component-emitter": "^1.2.10", - "component-emitter": "~1.3.0", - "debug": "~4.3.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/sockjs": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", - "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", - "dev": true, - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^3.4.0", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/sockjs/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.", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/socks": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", - "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", - "dev": true, - "dependencies": { - "ip": "^1.1.5", - "smart-buffer": "^4.1.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", - "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.1", - "socks": "^2.6.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", - "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.0.tgz", - "integrity": "sha512-GKGWqWvYr04M7tn8dryIWvb0s8YM41z82iQv01yBtIylgxax0CwvSy6gc2Y02iuXwEfGWRlMicH0nvms9UZphw==", - "dev": true, - "dependencies": { - "abab": "^2.0.5", - "iconv-lite": "^0.6.2", - "source-map-js": "^0.6.2" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/source-map-loader/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==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", - "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/streamroller": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz", - "integrity": "sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ==", - "dev": true, - "dependencies": { - "date-format": "^2.1.0", - "debug": "^4.1.1", - "fs-extra": "^8.1.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/streamroller/node_modules/date-format": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", - "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", - "dev": true, - "engines": { - "node": ">=4.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==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string_decoder/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==", - "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" - } - ] - }, - "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, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "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, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylus": { - "version": "0.55.0", - "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.55.0.tgz", - "integrity": "sha512-MuzIIVRSbc8XxHH7FjkvWqkIcr1BvoMZoR/oFuAJDlh7VSaNJzrB4uJ38GRQa+mWjLXODAMzeDe0xi9GYbGwnw==", - "dev": true, - "dependencies": { - "css": "^3.0.0", - "debug": "~3.1.0", - "glob": "^7.1.6", - "mkdirp": "~1.0.4", - "safer-buffer": "^2.1.2", - "sax": "~1.2.4", - "semver": "^6.3.0", - "source-map": "^0.7.3" - }, - "bin": { - "stylus": "bin/stylus" - }, - "engines": { - "node": "*" - } - }, - "node_modules/stylus-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-6.2.0.tgz", - "integrity": "sha512-5dsDc7qVQGRoc6pvCL20eYgRUxepZ9FpeK28XhdXaIPP6kXr6nI1zAAKFQgP5OBkOfKaURp4WUpJzspg1f01Gg==", - "dev": true, - "dependencies": { - "fast-glob": "^3.2.7", - "klona": "^2.0.4", - "normalize-path": "^3.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "stylus": ">=0.52.4", - "webpack": "^5.0.0" - } - }, - "node_modules/stylus/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/stylus/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/stylus/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/symbol-observable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", - "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/terser": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz", - "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==", - "dev": true, - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.5.tgz", - "integrity": "sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g==", - "dev": true, - "dependencies": { - "jest-worker": "^27.0.6", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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/terser-webpack-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/terser-webpack-plugin/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==", - "dev": true - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser-webpack-plugin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "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, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/tsconfig-paths": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", - "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "peer": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, - "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, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-assert": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.8.tgz", - "integrity": "sha512-5NkbXZUlmCE73Fs7gvkp1XXJWHYetPkg60QnQ2NXQmBYNFxbBr2zA8GCtaH4K2s2WhOmSlgiSTmrjrcm5tnM5g==", - "dev": true - }, - "node_modules/typescript": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", - "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/ua-parser-js": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", - "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "engines": { - "node": "*" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, - "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "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, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", - "dev": true, - "dependencies": { - "builtins": "^1.0.3" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.0.tgz", - "integrity": "sha512-MnN0Q1OsvB/GGHETrFeZPQaOelWh/7O+EiFlj8sM9GPjtQkis7k01aAxrg/18kTfoIVcLL+haEVFlXDaSRwKRw==", - "dev": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/webpack": { - "version": "5.64.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.64.1.tgz", - "integrity": "sha512-b4FHmRgaaAjP+aVOVz41a9Qa5SmkUPQ+u8FntTQ1roPHahSComB6rXnLwc976VhUY4CqTaLu5mCswuHiNhOfVw==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.3", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.2.0", - "webpack-sources": "^3.2.2" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-middleware": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.2.1.tgz", - "integrity": "sha512-Kx1X+36Rn9JaZcQMrJ7qN3PMAuKmEDD9ZISjUj3Cgq4A6PtwYsC4mpaKotSRYH3iOF6HsUa8viHKS59FlyVifQ==", - "dev": true, - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.2.2", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^3.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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/webpack-dev-middleware/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/webpack-dev-middleware/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==", - "dev": true - }, - "node_modules/webpack-dev-middleware/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.4.0.tgz", - "integrity": "sha512-+S0XRIbsopVjPFjCO8I07FXYBWYqkFmuP56ucGMTs2hA/gV4q2M9xTmNo5Tg4o8ffRR+Nm3AsXnQXxKRyYovrA==", - "dev": true, - "dependencies": { - "ansi-html-community": "^0.0.8", - "bonjour": "^3.5.0", - "chokidar": "^3.5.2", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "del": "^6.0.0", - "express": "^4.17.1", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.0", - "internal-ip": "^6.2.0", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "portfinder": "^1.0.28", - "schema-utils": "^3.1.0", - "selfsigned": "^1.10.11", - "serve-index": "^1.9.1", - "sockjs": "^0.3.21", - "spdy": "^4.0.2", - "strip-ansi": "^7.0.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^5.2.1", - "ws": "^8.1.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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/webpack-dev-server/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/webpack-dev-server/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/webpack-dev-server/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==", - "dev": true - }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.2.tgz", - "integrity": "sha512-cp5qdmHnu5T8wRg2G3vZZHoJPN14aqQ89SyQ11NpGH5zEMDCclt49rzo+MaRazk7/UeILhAI+/sEtcM+7Fr0nw==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-subresource-integrity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.0.0.tgz", - "integrity": "sha512-x9514FpLRydO+UAQ8DY4aLtCjxmdLkuQVcDFN1kGzuusREYJ1B0rzk/iIlWiL6dnvrhEGFj2+UsdxDkP8Z4UKg==", - "dev": true, - "dependencies": { - "typed-assert": "^1.0.8" - }, - "engines": { - "node": ">= 12" - }, - "peerDependencies": { - "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", - "webpack": "^5.12.0" - }, - "peerDependenciesMeta": { - "html-webpack-plugin": { - "optional": true - } - } - }, - "node_modules/webpack/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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/webpack/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/webpack/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==", - "dev": true - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "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" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "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/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, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/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 - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", - "dev": true, - "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/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "17.2.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.2.1.tgz", - "integrity": "sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "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, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zone.js": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.4.tgz", - "integrity": "sha512-DDh2Ab+A/B+9mJyajPjHFPWfYU1H+pdun4wnnk0OcQTNjem1XQSZ2CDW+rfZEUDjv5M19SBqAkjZi0x5wuB5Qw==", - "dependencies": { - "tslib": "^2.0.0" - } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-1.0.1.tgz", - "integrity": "sha512-Ta9bMA3EtUHDaZJXqUoT5cn/EecwOp+SXpKJqxDbDuMbLvEMu6YTyDDuvTWeStODfdmXyfMo7LymQyPkN3BicA==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "1.0.0", - "sourcemap-codec": "1.4.8" - } - }, - "@angular-devkit/architect": { - "version": "0.1300.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1300.3.tgz", - "integrity": "sha512-XY3sjRLk06Q+uAU0BePuIWcK1n3Jr0ksNV0ACNAct+MnI3QFfPPaYA/Tdhp9uWobuZ4lUrL0drc2uppNu0wKmA==", - "dev": true, - "requires": { - "@angular-devkit/core": "13.0.3", - "rxjs": "6.6.7" - }, - "dependencies": { - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@angular-devkit/build-angular": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-13.0.3.tgz", - "integrity": "sha512-5KFsknpnq3mc0KwcIDjvmqB3trz5cMt48dB0nrc23zkFI9v4hkpalc/OEg/H3G93K0c9g6dcyxmHkNfsU1+CHw==", - "dev": true, - "requires": { - "@ampproject/remapping": "1.0.1", - "@angular-devkit/architect": "0.1300.3", - "@angular-devkit/build-webpack": "0.1300.3", - "@angular-devkit/core": "13.0.3", - "@babel/core": "7.15.8", - "@babel/generator": "7.15.8", - "@babel/helper-annotate-as-pure": "7.15.4", - "@babel/plugin-proposal-async-generator-functions": "7.15.8", - "@babel/plugin-transform-async-to-generator": "7.14.5", - "@babel/plugin-transform-runtime": "7.15.8", - "@babel/preset-env": "7.15.8", - "@babel/runtime": "7.15.4", - "@babel/template": "7.15.4", - "@discoveryjs/json-ext": "0.5.5", - "@ngtools/webpack": "13.0.3", - "ansi-colors": "4.1.1", - "babel-loader": "8.2.3", - "babel-plugin-istanbul": "6.1.1", - "browserslist": "^4.9.1", - "cacache": "15.3.0", - "caniuse-lite": "^1.0.30001032", - "circular-dependency-plugin": "5.2.2", - "copy-webpack-plugin": "9.0.1", - "core-js": "3.19.0", - "critters": "0.0.14", - "css-loader": "6.5.0", - "esbuild": "0.13.12", - "esbuild-wasm": "0.13.12", - "glob": "7.2.0", - "https-proxy-agent": "5.0.0", - "inquirer": "8.2.0", - "karma-source-map-support": "1.4.0", - "less": "4.1.2", - "less-loader": "10.2.0", - "license-webpack-plugin": "4.0.0", - "loader-utils": "3.0.0", - "mini-css-extract-plugin": "2.4.3", - "minimatch": "3.0.4", - "open": "8.4.0", - "ora": "5.4.1", - "parse5-html-rewriting-stream": "6.0.1", - "piscina": "3.1.0", - "postcss": "8.3.11", - "postcss-import": "14.0.2", - "postcss-loader": "6.2.0", - "postcss-preset-env": "6.7.0", - "regenerator-runtime": "0.13.9", - "resolve-url-loader": "4.0.0", - "rxjs": "6.6.7", - "sass": "1.43.4", - "sass-loader": "12.3.0", - "semver": "7.3.5", - "source-map-loader": "3.0.0", - "source-map-support": "0.5.20", - "stylus": "0.55.0", - "stylus-loader": "6.2.0", - "terser": "5.9.0", - "text-table": "0.2.0", - "tree-kill": "1.2.2", - "tslib": "2.3.1", - "webpack": "5.64.1", - "webpack-dev-middleware": "5.2.1", - "webpack-dev-server": "4.4.0", - "webpack-merge": "5.8.0", - "webpack-subresource-integrity": "5.0.0" - }, - "dependencies": { - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - } - } - }, - "@angular-devkit/build-webpack": { - "version": "0.1300.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1300.3.tgz", - "integrity": "sha512-3DNo8575FFPMqJaVMXxrIduWkrcKm5zYSCvkMOmzHLp+gx+RXQiwnoXfVJpukcE/jwK/4SWyRE8Tw75sfPJ71A==", - "dev": true, - "requires": { - "@angular-devkit/architect": "0.1300.3", - "rxjs": "6.6.7" - }, - "dependencies": { - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@angular-devkit/core": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.0.3.tgz", - "integrity": "sha512-5yTYW6m4pkDPSYNxThm+47h+UZ6XVEfdfsXR3o+WlRG0hc18EuQ+sXZkzhvZrk5KMLlXFex4eO40RPq2vvWS/w==", - "dev": true, - "requires": { - "ajv": "8.6.3", - "ajv-formats": "2.1.1", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.7", - "source-map": "0.7.3" - }, - "dependencies": { - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@angular-devkit/schematics": { - "version": "13.0.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.0.4.tgz", - "integrity": "sha512-3LsmpfAEOxwPyachrktCHtGUYBzQCCzD0++CUjhK8W99v8/IAplkm4dgovFb1RiRkUm44l+HIS7387AbvEIf5A==", - "dev": true, - "requires": { - "@angular-devkit/core": "13.0.4", - "jsonc-parser": "3.0.0", - "magic-string": "0.25.7", - "ora": "5.4.1", - "rxjs": "6.6.7" - }, - "dependencies": { - "@angular-devkit/core": { - "version": "13.0.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.0.4.tgz", - "integrity": "sha512-AzgLvERLC6qzY5aZWUpkz5nx+pZChrq3DSt6azMPALwzzoABrwiO6XqzRnj17mXtANXLH2oe9FuHr9jzgFbF1g==", - "dev": true, - "requires": { - "ajv": "8.6.3", - "ajv-formats": "2.1.1", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.7", - "source-map": "0.7.3" - } - }, - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@angular/animations": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-13.0.2.tgz", - "integrity": "sha512-ROR70rM6E13pIJzaYf0Su/ALSoBm5fIMjozey636pAq21TxTy5IfhgaBjv/vflC9psbpaySGw2H5XnwejP0gSw==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/cdk": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-13.0.2.tgz", - "integrity": "sha512-m7RHIAXpFpgsrydhWXX1hAXRmQpQ+m9eRCYAoz8QiDCchYyVvTaxkZ8J7XGS8RtJ2EiocXSp4TlwQQrpXe+4lg==", - "requires": { - "parse5": "^5.0.0", - "tslib": "^2.3.0" - }, - "dependencies": { - "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "optional": true - } - } - }, - "@angular/cli": { - "version": "13.0.4", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-13.0.4.tgz", - "integrity": "sha512-0QMJXFNn57LVg7ZwZFPO90g6aZHDnoe5yCB7fo3nskOhDw1AW/rnbbaNVMVX/SvP30hOOTLsfVJ1Y3I6eKDgRA==", - "dev": true, - "requires": { - "@angular-devkit/architect": "0.1300.4", - "@angular-devkit/core": "13.0.4", - "@angular-devkit/schematics": "13.0.4", - "@schematics/angular": "13.0.4", - "@yarnpkg/lockfile": "1.1.0", - "ansi-colors": "4.1.1", - "debug": "4.3.2", - "ini": "2.0.0", - "inquirer": "8.2.0", - "jsonc-parser": "3.0.0", - "npm-package-arg": "8.1.5", - "npm-pick-manifest": "6.1.1", - "open": "8.4.0", - "ora": "5.4.1", - "pacote": "12.0.2", - "resolve": "1.20.0", - "semver": "7.3.5", - "symbol-observable": "4.0.0", - "uuid": "8.3.2" - }, - "dependencies": { - "@angular-devkit/architect": { - "version": "0.1300.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1300.4.tgz", - "integrity": "sha512-COW2W6rI9D69QEXGc/MyTbJY9gT+u8yMTpONpIjopd+KoSK/q2wGr0RleUf7XSCunZCs0SRI7z3Pw1EAdQCP7Q==", - "dev": true, - "requires": { - "@angular-devkit/core": "13.0.4", - "rxjs": "6.6.7" - } - }, - "@angular-devkit/core": { - "version": "13.0.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.0.4.tgz", - "integrity": "sha512-AzgLvERLC6qzY5aZWUpkz5nx+pZChrq3DSt6azMPALwzzoABrwiO6XqzRnj17mXtANXLH2oe9FuHr9jzgFbF1g==", - "dev": true, - "requires": { - "ajv": "8.6.3", - "ajv-formats": "2.1.1", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.7", - "source-map": "0.7.3" - } - }, - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@angular/common": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-13.0.2.tgz", - "integrity": "sha512-UxWzNAU/o9pP02AYB5MrnIlShirfO631NolmvP0jTSEmym1nAeDOwZIYlkgfcJMHFXFc7DBnE2XOGaTZ8if3kw==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/compiler": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-13.0.2.tgz", - "integrity": "sha512-EvIFT8y5VNICrnPgiamv/z9hfQ7KjLCM52g4ssXGCeGPVj58OEfslEc3jO4BCJG7xuLm7dCuSRV0pBlJNTSYFg==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/compiler-cli": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.0.2.tgz", - "integrity": "sha512-KVDntMBoPoAPdpyO3LxR2U3BO3ja5fY5Im5rzynjBCC3dnwAPPKoIlYZlFY/5ov6yVoVleeb/BOovYxHuxZBsA==", - "dev": true, - "requires": { - "@babel/core": "^7.8.6", - "canonical-path": "1.0.0", - "chokidar": "^3.0.0", - "convert-source-map": "^1.5.1", - "dependency-graph": "^0.11.0", - "magic-string": "^0.25.0", - "reflect-metadata": "^0.1.2", - "semver": "^7.0.0", - "sourcemap-codec": "^1.4.8", - "tslib": "^2.3.0", - "yargs": "^17.2.1" - } - }, - "@angular/core": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-13.0.2.tgz", - "integrity": "sha512-6Jbct50lncMqzwLILzfmwQRK8eOEMv0quCL3pQptEpYPSlPqKz6QRxD76BykSUOs7XYJ/KdZmu3uGcT2Q/DUVg==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/forms": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-13.0.2.tgz", - "integrity": "sha512-JGgEOTH/OYr7/RlqJUPSzKQF/a55UM5PD6CgpUjAXKrCV18+zhofO05g+ibIZH3OfONntthcbKEXxMTX2EEQqg==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/material": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-13.0.2.tgz", - "integrity": "sha512-DbbkQFpZ73oxOuR9LkkpeUPWP31DNIG3Z94sOrtdBhX3HfbLLOCaAJAIwMl8+bEuzDgtWBmx3taUR8l4WKCO8g==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/platform-browser": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-13.0.2.tgz", - "integrity": "sha512-fkLGr9Vj2cvFzXefyhNaqwXX90+WbpYj5cCii7S1HcbJ9qSM5ZenLp1t8mGRhmWI7odY4BrFskWOChlWFrLEkA==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/platform-browser-dynamic": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-13.0.2.tgz", - "integrity": "sha512-2wZX2oop3A1kWFcbRYqe8AxBQjT35DXf1qlGyFQoMn7D0vOAprg6X1hUK2XBItRrvwRWh3hSVhzkustTIl+r6g==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/router": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-13.0.2.tgz", - "integrity": "sha512-AfmT845dcYPvNbUdV2ALlf++szZP3ie2d0eu7JyGWe3anV1fbDcg76RhjxFK8yVUxryrCQtEnot1VEEVlhGkyw==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@assemblyscript/loader": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", - "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", - "dev": true - }, - "@babel/code-frame": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", - "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.0" - } - }, - "@babel/compat-data": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", - "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", - "dev": true - }, - "@babel/core": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.8.tgz", - "integrity": "sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.15.8", - "@babel/generator": "^7.15.8", - "@babel/helper-compilation-targets": "^7.15.4", - "@babel/helper-module-transforms": "^7.15.8", - "@babel/helpers": "^7.15.4", - "@babel/parser": "^7.15.8", - "@babel/template": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.6", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz", - "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==", - "dev": true, - "requires": { - "@babel/types": "^7.15.6", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz", - "integrity": "sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA==", - "dev": true, - "requires": { - "@babel/types": "^7.15.4" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.0.tgz", - "integrity": "sha512-9KuleLT0e77wFUku6TUkqZzCEymBdtuQQ27MhEKzf9UOOJu3cYj98kyaDAzxpC7lV6DGiZFuC8XqDsq8/Kl6aQ==", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz", - "integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.16.0", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.17.5", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.0.tgz", - "integrity": "sha512-XLwWvqEaq19zFlF5PTgOod4bUA+XbkR4WLQBct1bkzmxJGB0ZEJaoKF4c8cgH9oBtCDuYJ8BP5NB9uFiEgO5QA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-member-expression-to-functions": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0" - }, - "dependencies": { - "@babel/helper-annotate-as-pure": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", - "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - } - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.0.tgz", - "integrity": "sha512-3DyG0zAFAZKcOp7aVr33ddwkxJ0Z0Jr5V99y3I690eYLpukJsJvAbzTy1ewoCqsML8SbIrjH14Jc/nSQ4TvNPA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "regexpu-core": "^4.7.1" - }, - "dependencies": { - "@babel/helper-annotate-as-pure": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", - "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - } - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.4.tgz", - "integrity": "sha512-OrpPZ97s+aPi6h2n1OXzdhVis1SGSsMU2aMHgLcOKfsp4/v1NWpx3CWT3lBj5eeBq9cDkPkh+YCfdF7O12uNDQ==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz", - "integrity": "sha512-Hk2SLxC9ZbcOhLpg/yMznzJ11W++lg5GMbxt1ev6TXUiJB0N42KPC+7w8a+eWGuqDnUYuwStJoZHM7RgmIOaGQ==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-function-name": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", - "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "dependencies": { - "@babel/template": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", - "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0" - } - } - } - }, - "@babel/helper-get-function-arity": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", - "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", - "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", - "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", - "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-module-transforms": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", - "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.16.0", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-simple-access": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/helper-validator-identifier": "^7.15.7", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "dependencies": { - "@babel/template": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", - "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0" - } - } - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", - "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.4.tgz", - "integrity": "sha512-vGERmmhR+s7eH5Y/cp8PCVzj4XEjerq8jooMfxFdA5xVtAk9Sh4AQsrWgiErUEBjtGrBtOFKDUcWQFW4/dFwMA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-wrap-function": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "dependencies": { - "@babel/helper-annotate-as-pure": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", - "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - } - } - }, - "@babel/helper-replace-supers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", - "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-simple-access": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", - "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", - "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", - "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.0.tgz", - "integrity": "sha512-VVMGzYY3vkWgCJML+qVLvGIam902mJW0FvT7Avj1zEe0Gn7D93aWdLblYARTxEw+6DhZmtzhBM2zv0ekE5zg1g==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "dependencies": { - "@babel/template": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", - "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0" - } - } - } - }, - "@babel/helpers": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.3.tgz", - "integrity": "sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==", - "dev": true, - "requires": { - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.3", - "@babel/types": "^7.16.0" - }, - "dependencies": { - "@babel/template": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", - "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0" - } - } - } - }, - "@babel/highlight": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", - "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.15.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz", - "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==", - "dev": true - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.0.tgz", - "integrity": "sha512-4tcFwwicpWTrpl9qjf7UsoosaArgImF85AxqCRZlgc3IQDvkUHjJpruXAL58Wmj+T6fypWTC/BakfEkwIL/pwA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.0" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.8.tgz", - "integrity": "sha512-2Z5F2R2ibINTc63mY7FLqGfEbmofrHU9FitJW1Q7aPaKFhiPvSq6QEt/BoWN5oME3GVyjcRuNNSRbb9LC0CSWA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.15.4", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz", - "integrity": "sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.0.tgz", - "integrity": "sha512-mAy3sdcY9sKAkf3lQbDiv3olOfiLqI51c9DR9b19uMoR2Z6r5pmGl7dfNFqEvqOyqbf1ta4lknK4gc5PJn3mfA==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.0.tgz", - "integrity": "sha512-QGSA6ExWk95jFQgwz5GQ2Dr95cf7eI7TKutIXXTb7B1gCLTCz5hTjFTQGfLFBBiC5WSNi7udNwWsqbbMh1c4yQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.0.tgz", - "integrity": "sha512-CjI4nxM/D+5wCnhD11MHB1AwRSAYeDT+h8gCdcVJZ/OK7+wRzFsf7PFPWVpVpNRkHMmMkQWAHpTq+15IXQ1diA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.0.tgz", - "integrity": "sha512-kouIPuiv8mSi5JkEhzApg5Gn6hFyKPnlkO0a9YSzqRurH8wYzSlf6RJdzluAsbqecdW5pBvDJDfyDIUR/vLxvg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.0.tgz", - "integrity": "sha512-pbW0fE30sVTYXXm9lpVQQ/Vc+iTeQKiXlaNRZPPN2A2VdlWyAtsUrsQ3xydSlDW00TFMK7a8m3cDTkBF5WnV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.0.tgz", - "integrity": "sha512-3bnHA8CAFm7cG93v8loghDYyQ8r97Qydf63BeYiGgYbjKKB/XP53W15wfRC7dvKfoiJ34f6Rbyyx2btExc8XsQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.0.tgz", - "integrity": "sha512-FAhE2I6mjispy+vwwd6xWPyEx3NYFS13pikDBWUAFGZvq6POGs5eNchw8+1CYoEgBl9n11I3NkzD7ghn25PQ9Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.0.tgz", - "integrity": "sha512-LU/+jp89efe5HuWJLmMmFG0+xbz+I2rSI7iLc1AlaeSMDMOGzWlc5yJrMN1d04osXN4sSfpo4O+azkBNBes0jg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.16.0", - "@babel/helper-compilation-targets": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.16.0" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.0.tgz", - "integrity": "sha512-kicDo0A/5J0nrsCPbn89mTG3Bm4XgYi0CZtvex9Oyw7gGZE3HXGD0zpQNH+mo+tEfbo8wbmMvJftOwpmPy7aVw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.0.tgz", - "integrity": "sha512-Y4rFpkZODfHrVo70Uaj6cC1JJOt3Pp0MdWSwIKtb8z1/lsjl9AmnB7ErRFV+QNGIfcY1Eruc2UMx5KaRnXjMyg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.0.tgz", - "integrity": "sha512-IvHmcTHDFztQGnn6aWq4t12QaBXTKr1whF/dgp9kz84X6GUcwq9utj7z2wFCUfeOup/QKnOlt2k0zxkGFx9ubg==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.0.tgz", - "integrity": "sha512-3jQUr/HBbMVZmi72LpjQwlZ55i1queL8KcDTQEkAHihttJnAPrcvG9ZNXIfsd2ugpizZo595egYV6xy+pv4Ofw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-create-class-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "dependencies": { - "@babel/helper-annotate-as-pure": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", - "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - } - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.0.tgz", - "integrity": "sha512-ti7IdM54NXv29cA4+bNNKEMS4jLMCbJgl+Drv+FgYy0erJLAxNAIXcNjNjrRZEcWq0xJHsNVwQezskMFpF8N9g==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.0.tgz", - "integrity": "sha512-vIFb5250Rbh7roWARvCLvIJ/PtAU5Lhv7BtZ1u24COwpI9Ypjsh+bZcKk6rlIyalK+r0jOc1XQ8I4ovNxNrWrA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", - "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.0.tgz", - "integrity": "sha512-V14As3haUOP4ZWrLJ3VVx5rCnrYhMSHN/jX7z6FAt5hjRkLsb0snPCmJwSOML5oxkKO4FNoNv7V5hw/y2bjuvg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.0.tgz", - "integrity": "sha512-27n3l67/R3UrXfizlvHGuTwsRIFyce3D/6a37GRxn28iyTPvNXaW4XvznexRh1zUNLPjbLL22Id0XQElV94ruw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.0.tgz", - "integrity": "sha512-HUxMvy6GtAdd+GKBNYDWCIA776byUQH8zjnfjxwT1P1ARv/wFu8eBDpmXQcLS/IwRtrxIReGiplOwMeyO7nsDQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "globals": "^11.1.0" - }, - "dependencies": { - "@babel/helper-annotate-as-pure": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", - "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - } - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.0.tgz", - "integrity": "sha512-63l1dRXday6S8V3WFY5mXJwcRAnPYxvFfTlt67bwV1rTyVTM5zrp0DBBb13Kl7+ehkCVwIZPumPpFP/4u70+Tw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.0.tgz", - "integrity": "sha512-Q7tBUwjxLTsHEoqktemHBMtb3NYwyJPTJdM+wDwb0g8PZ3kQUIzNvwD5lPaqW/p54TXBc/MXZu9Jr7tbUEUM8Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.0.tgz", - "integrity": "sha512-FXlDZfQeLILfJlC6I1qyEwcHK5UpRCFkaoVyA1nk9A1L1Yu583YO4un2KsLBsu3IJb4CUbctZks8tD9xPQubLw==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.0.tgz", - "integrity": "sha512-LIe2kcHKAZOJDNxujvmp6z3mfN6V9lJxubU4fJIGoQCkKe3Ec2OcbdlYP+vW++4MpxwG0d1wSDOJtQW5kLnkZQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.0.tgz", - "integrity": "sha512-OwYEvzFI38hXklsrbNivzpO3fh87skzx8Pnqi4LoSYeav0xHlueSoCJrSgTPfnbyzopo5b3YVAJkFIcUpK2wsw==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.0.tgz", - "integrity": "sha512-5QKUw2kO+GVmKr2wMYSATCTTnHyscl6sxFRAY+rvN7h7WB0lcG0o4NoV6ZQU32OZGVsYUsfLGgPQpDFdkfjlJQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.0.tgz", - "integrity": "sha512-lBzMle9jcOXtSOXUpc7tvvTpENu/NuekNJVova5lCCWCV9/U1ho2HH2y0p6mBg8fPm/syEAbfaaemYGOHCY3mg==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.0.tgz", - "integrity": "sha512-gQDlsSF1iv9RU04clgXqRjrPyyoJMTclFt3K1cjLmTKikc0s/6vE3hlDeEVC71wLTRu72Fq7650kABrdTc2wMQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.0.tgz", - "integrity": "sha512-WRpw5HL4Jhnxw8QARzRvwojp9MIE7Tdk3ez6vRyUk1MwgjJN0aNpRoXainLR5SgxmoXx/vsXGZ6OthP6t/RbUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.0.tgz", - "integrity": "sha512-rWFhWbCJ9Wdmzln1NmSCqn7P0RAD+ogXG/bd9Kg5c7PKWkJtkiXmYsMBeXjDlzHpVTJ4I/hnjs45zX4dEv81xw==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.0.tgz", - "integrity": "sha512-Dzi+NWqyEotgzk/sb7kgQPJQf7AJkQBWsVp1N6JWc1lBVo0vkElUnGdr1PzUBmfsCCN5OOFya3RtpeHk15oLKQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-simple-access": "^7.16.0", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.0.tgz", - "integrity": "sha512-yuGBaHS3lF1m/5R+6fjIke64ii5luRUg97N2wr+z1sF0V+sNSXPxXDdEEL/iYLszsN5VKxVB1IPfEqhzVpiqvg==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.16.0", - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-identifier": "^7.15.7", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.0.tgz", - "integrity": "sha512-nx4f6no57himWiHhxDM5pjwhae5vLpTK2zCnDH8+wNLJy0TVER/LJRHl2bkt6w9Aad2sPD5iNNoUpY3X9sTGDg==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.0.tgz", - "integrity": "sha512-LogN88uO+7EhxWc8WZuQ8vxdSyVGxhkh8WTC3tzlT8LccMuQdA81e9SGV6zY7kY2LjDhhDOFdQVxdGwPyBCnvg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.0" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.0.tgz", - "integrity": "sha512-fhjrDEYv2DBsGN/P6rlqakwRwIp7rBGLPbrKxwh7oVt5NNkIhZVOY2GRV+ULLsQri1bDqwDWnU3vhlmx5B2aCw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.0.tgz", - "integrity": "sha512-fds+puedQHn4cPLshoHcR1DTMN0q1V9ou0mUjm8whx9pGcNvDrVVrgw+KJzzCaiTdaYhldtrUps8DWVMgrSEyg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.16.0" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.3.tgz", - "integrity": "sha512-3MaDpJrOXT1MZ/WCmkOFo7EtmVVC8H4EUZVrHvFOsmwkk4lOjQj8rzv8JKUZV4YoQKeoIgk07GO+acPU9IMu/w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.0.tgz", - "integrity": "sha512-XLldD4V8+pOqX2hwfWhgwXzGdnDOThxaNTgqagOcpBgIxbUvpgU2FMvo5E1RyHbk756WYgdbS0T8y0Cj9FKkWQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.0.tgz", - "integrity": "sha512-JAvGxgKuwS2PihiSFaDrp94XOzzTUeDeOQlcKzVAyaPap7BnZXK/lvMDiubkPTdotPKOIZq9xWXWnggUMYiExg==", - "dev": true, - "requires": { - "regenerator-transform": "^0.14.2" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.0.tgz", - "integrity": "sha512-Dgs8NNCehHSvXdhEhln8u/TtJxfVwGYCgP2OOr5Z3Ar+B+zXicEOKNTyc+eca2cuEOMtjW6m9P9ijOt8QdqWkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.15.8.tgz", - "integrity": "sha512-+6zsde91jMzzvkzuEA3k63zCw+tm/GvuuabkpisgbDMTPQsIMHllE3XczJFFtEHLjjhKQFZmGQVRdELetlWpVw==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.15.4", - "@babel/helper-plugin-utils": "^7.14.5", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.5", - "babel-plugin-polyfill-regenerator": "^0.2.2", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.0.tgz", - "integrity": "sha512-iVb1mTcD8fuhSv3k99+5tlXu5N0v8/DPm2mO3WACLG6al1CGZH7v09HJyUb1TtYl/Z+KrM6pHSIJdZxP5A+xow==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.0.tgz", - "integrity": "sha512-Ao4MSYRaLAQczZVp9/7E7QHsCuK92yHRrmVNRe/SlEJjhzivq0BSn8mEraimL8wizHZ3fuaHxKH0iwzI13GyGg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.0.tgz", - "integrity": "sha512-/ntT2NljR9foobKk4E/YyOSwcGUXtYWv5tinMK/3RkypyNBNdhHUaq6Orw5DWq9ZcNlS03BIlEALFeQgeVAo4Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.0.tgz", - "integrity": "sha512-Rd4Ic89hA/f7xUSJQk5PnC+4so50vBoBfxjdQAdvngwidM8jYIBVxBZ/sARxD4e0yMXRbJVDrYf7dyRtIIKT6Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.0.tgz", - "integrity": "sha512-++V2L8Bdf4vcaHi2raILnptTBjGEFxn5315YU+e8+EqXIucA+q349qWngCLpUYqqv233suJ6NOienIVUpS9cqg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.0.tgz", - "integrity": "sha512-VFi4dhgJM7Bpk8lRc5CMaRGlKZ29W9C3geZjt9beuzSUrlJxsNwX7ReLwaL6WEvsOf2EQkyIJEPtF8EXjB/g2A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.0.tgz", - "integrity": "sha512-jHLK4LxhHjvCeZDWyA9c+P9XH1sOxRd1RO9xMtDVRAOND/PczPqizEtVdx4TQF/wyPaewqpT+tgQFYMnN/P94A==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/preset-env": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.15.8.tgz", - "integrity": "sha512-rCC0wH8husJgY4FPbHsiYyiLxSY8oMDJH7Rl6RQMknbN9oDDHhM9RDFvnGM2MgkbUJzSQB4gtuwygY5mCqGSsA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.15.0", - "@babel/helper-compilation-targets": "^7.15.4", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.15.4", - "@babel/plugin-proposal-async-generator-functions": "^7.15.8", - "@babel/plugin-proposal-class-properties": "^7.14.5", - "@babel/plugin-proposal-class-static-block": "^7.15.4", - "@babel/plugin-proposal-dynamic-import": "^7.14.5", - "@babel/plugin-proposal-export-namespace-from": "^7.14.5", - "@babel/plugin-proposal-json-strings": "^7.14.5", - "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", - "@babel/plugin-proposal-numeric-separator": "^7.14.5", - "@babel/plugin-proposal-object-rest-spread": "^7.15.6", - "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", - "@babel/plugin-proposal-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-private-methods": "^7.14.5", - "@babel/plugin-proposal-private-property-in-object": "^7.15.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.14.5", - "@babel/plugin-transform-async-to-generator": "^7.14.5", - "@babel/plugin-transform-block-scoped-functions": "^7.14.5", - "@babel/plugin-transform-block-scoping": "^7.15.3", - "@babel/plugin-transform-classes": "^7.15.4", - "@babel/plugin-transform-computed-properties": "^7.14.5", - "@babel/plugin-transform-destructuring": "^7.14.7", - "@babel/plugin-transform-dotall-regex": "^7.14.5", - "@babel/plugin-transform-duplicate-keys": "^7.14.5", - "@babel/plugin-transform-exponentiation-operator": "^7.14.5", - "@babel/plugin-transform-for-of": "^7.15.4", - "@babel/plugin-transform-function-name": "^7.14.5", - "@babel/plugin-transform-literals": "^7.14.5", - "@babel/plugin-transform-member-expression-literals": "^7.14.5", - "@babel/plugin-transform-modules-amd": "^7.14.5", - "@babel/plugin-transform-modules-commonjs": "^7.15.4", - "@babel/plugin-transform-modules-systemjs": "^7.15.4", - "@babel/plugin-transform-modules-umd": "^7.14.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.9", - "@babel/plugin-transform-new-target": "^7.14.5", - "@babel/plugin-transform-object-super": "^7.14.5", - "@babel/plugin-transform-parameters": "^7.15.4", - "@babel/plugin-transform-property-literals": "^7.14.5", - "@babel/plugin-transform-regenerator": "^7.14.5", - "@babel/plugin-transform-reserved-words": "^7.14.5", - "@babel/plugin-transform-shorthand-properties": "^7.14.5", - "@babel/plugin-transform-spread": "^7.15.8", - "@babel/plugin-transform-sticky-regex": "^7.14.5", - "@babel/plugin-transform-template-literals": "^7.14.5", - "@babel/plugin-transform-typeof-symbol": "^7.14.5", - "@babel/plugin-transform-unicode-escapes": "^7.14.5", - "@babel/plugin-transform-unicode-regex": "^7.14.5", - "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.15.6", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.5", - "babel-plugin-polyfill-regenerator": "^0.2.2", - "core-js-compat": "^3.16.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/runtime": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", - "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", - "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.15.4", - "@babel/types": "^7.15.4" - } - }, - "@babel/traverse": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.3.tgz", - "integrity": "sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-hoist-variables": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/parser": "^7.16.3", - "@babel/types": "^7.16.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "dependencies": { - "@babel/generator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", - "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", - "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.15.7", - "to-fast-properties": "^2.0.0" - } - }, - "@csstools/convert-colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", - "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==", - "dev": true - }, - "@discoveryjs/json-ext": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz", - "integrity": "sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA==", - "dev": true - }, - "@eslint/eslintrc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.1.0.tgz", - "integrity": "sha512-C1DfL7XX4nPqGd6jcP01W9pVM1HYCuUkFk1432D7F0v3JSlUIeOYn9oCoi3eoLZ+iwBSb29BMFxxny0YrrEZqg==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.1", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "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, - "requires": { - "argparse": "^2.0.1" - } - }, - "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==", - "dev": true - }, - "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 - } - } - }, - "@fortawesome/angular-fontawesome": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@fortawesome/angular-fontawesome/-/angular-fontawesome-0.10.2.tgz", - "integrity": "sha512-VxsCAo2lK74KwD236AKAhGpiethfz9yqCViIG2iRAZqgNmuZ6ihwumjbLW32n6hV4fFvCqLcHmpngoEl3TNiOg==", - "requires": { - "tslib": "^2.3.1" - } - }, - "@fortawesome/fontawesome-common-types": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.1.1.tgz", - "integrity": "sha512-wVn5WJPirFTnzN6tR95abCx+ocH+3IFLXAgyavnf9hUmN0CfWoDjPT/BAWsUVwSlYYVBeCLJxaqi7ZGe4uSjBA==" - }, - "@fortawesome/fontawesome-svg-core": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.1.1.tgz", - "integrity": "sha512-NCg0w2YIp81f4V6cMGD9iomfsIj7GWrqmsa0ZsPh59G7PKiGN1KymZNxmF00ssuAlo/VZmpK6xazsGOwzKYUMg==", - "requires": { - "@fortawesome/fontawesome-common-types": "6.1.1" - } - }, - "@fortawesome/free-regular-svg-icons": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.1.1.tgz", - "integrity": "sha512-xXiW7hcpgwmWtndKPOzG+43fPH7ZjxOaoeyooptSztGmJxCAflHZxXNK0GcT0uEsR4jTGQAfGklDZE5NHoBhKg==", - "requires": { - "@fortawesome/fontawesome-common-types": "6.1.1" - } - }, - "@fortawesome/free-solid-svg-icons": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.1.1.tgz", - "integrity": "sha512-0/5exxavOhI/D4Ovm2r3vxNojGZioPwmFrKg0ZUH69Q68uFhFPs6+dhAToh6VEQBntxPRYPuT5Cg1tpNa9JUPg==", - "requires": { - "@fortawesome/fontawesome-common-types": "6.1.1" - } - }, - "@gar/promisify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.2.tgz", - "integrity": "sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==", - "dev": true - }, - "@humanwhocodes/config-array": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz", - "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@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, - "requires": { - "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" - } - }, - "@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 - }, - "@jridgewell/resolve-uri": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-1.0.0.tgz", - "integrity": "sha512-9oLAnygRMi8Q5QkYEU4XWK04B+nuoXoxjRvRxgjuChkLZFBja0YPSgdZ7dZtwhncLBcQe/I/E+fLuk5qxcYVJA==", - "dev": true - }, - "@ngtools/webpack": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.0.3.tgz", - "integrity": "sha512-sVi1Xk8pyy6Y6JODySucYfvuxb5k3IIX/oIWy8QxlFVzpeB2UMqEOevrgvtmiEbQNB1W+aYSTph6oeV+PRX5YA==", - "dev": true, - "requires": {} - }, - "@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, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@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 - }, - "@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, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@npmcli/fs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.0.0.tgz", - "integrity": "sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ==", - "dev": true, - "requires": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, - "@npmcli/git": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz", - "integrity": "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==", - "dev": true, - "requires": { - "@npmcli/promise-spawn": "^1.3.2", - "lru-cache": "^6.0.0", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^6.1.1", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" - }, - "dependencies": { - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "@npmcli/installed-package-contents": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", - "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", - "dev": true, - "requires": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - } - }, - "@npmcli/node-gyp": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz", - "integrity": "sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==", - "dev": true - }, - "@npmcli/promise-spawn": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", - "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", - "dev": true, - "requires": { - "infer-owner": "^1.0.4" - } - }, - "@npmcli/run-script": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-2.0.0.tgz", - "integrity": "sha512-fSan/Pu11xS/TdaTpTB0MRn9guwGU8dye+x56mEVgBEd/QsybBbYcAL0phPXi8SGWFEChkQd6M9qL4y6VOpFig==", - "dev": true, - "requires": { - "@npmcli/node-gyp": "^1.0.2", - "@npmcli/promise-spawn": "^1.3.2", - "node-gyp": "^8.2.0", - "read-package-json-fast": "^2.0.1" - } - }, - "@schematics/angular": { - "version": "13.0.4", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.0.4.tgz", - "integrity": "sha512-P9F5c8ApLbEyfNO4TZNsTyAdrtOjwIhrM/P+eEC4/x6nklWlEFE6TGMYTNjiK/RRhkbX1tBs8gcdJLYxtEqPSg==", - "dev": true, - "requires": { - "@angular-devkit/core": "13.0.4", - "@angular-devkit/schematics": "13.0.4", - "jsonc-parser": "3.0.0" - }, - "dependencies": { - "@angular-devkit/core": { - "version": "13.0.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.0.4.tgz", - "integrity": "sha512-AzgLvERLC6qzY5aZWUpkz5nx+pZChrq3DSt6azMPALwzzoABrwiO6XqzRnj17mXtANXLH2oe9FuHr9jzgFbF1g==", - "dev": true, - "requires": { - "ajv": "8.6.3", - "ajv-formats": "2.1.1", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.7", - "source-map": "0.7.3" - } - }, - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, - "@types/component-emitter": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", - "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==", - "dev": true - }, - "@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", - "dev": true - }, - "@types/cors": { - "version": "2.8.12", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", - "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", - "dev": true - }, - "@types/eslint": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.2.0.tgz", - "integrity": "sha512-74hbvsnc+7TEDa1z5YLSe4/q8hGYB3USNvCuzHUJrjPV6hXaq8IXcngCrHkuvFt0+8rFz7xYXrHgNayIX0UZvQ==", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", - "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", - "dev": true - }, - "@types/http-proxy": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.7.tgz", - "integrity": "sha512-9hdj6iXH64tHSLTY+Vt2eYOGzSogC+JQ2H7bdPWkuh7KXP5qLllWx++t+K9Wk556c3dkDdPws/SpMRi0sdCT1w==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/jasmine": { - "version": "3.10.2", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.10.2.tgz", - "integrity": "sha512-qs4xjVm4V/XjM6owGm/x6TNmhGl5iKX8dkTdsgdgl9oFnqgzxLepnS7rN9Tdo7kDmnFD/VEqKrW57cGD2odbEg==", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", - "dev": true - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true, - "peer": true - }, - "@types/node": { - "version": "12.20.37", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.37.tgz", - "integrity": "sha512-i1KGxqcvJaLQali+WuypQnXwcplhtNtjs66eNsZpp2P2FL/trJJxx/VWsM0YCL2iMoIJrbXje48lvIQAQ4p2ZA==", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "@types/retry": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", - "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", - "dev": true - }, - "@types/scriptjs": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@types/scriptjs/-/scriptjs-0.0.2.tgz", - "integrity": "sha1-CaIociGno0H8a5WwBeS/sqVANTg=", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.12.0.tgz", - "integrity": "sha512-fwCMkDimwHVeIOKeBHiZhRUfJXU8n6xW1FL9diDxAyGAFvKcH4csy0v7twivOQdQdA0KC8TDr7GGRd3L4Lv0rQ==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.12.0", - "@typescript-eslint/type-utils": "5.12.0", - "@typescript-eslint/utils": "5.12.0", - "debug": "^4.3.2", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.2.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - } - } - }, - "@typescript-eslint/parser": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.12.0.tgz", - "integrity": "sha512-MfSwg9JMBojMUoGjUmX+D2stoQj1CBYTCP0qnnVtu9A+YQXVKNtLjasYh+jozOcrb/wau8TCfWOkQTiOAruBog==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.12.0", - "@typescript-eslint/types": "5.12.0", - "@typescript-eslint/typescript-estree": "5.12.0", - "debug": "^4.3.2" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.12.0.tgz", - "integrity": "sha512-GAMobtIJI8FGf1sLlUWNUm2IOkIjvn7laFWyRx7CLrv6nLBI7su+B7lbStqVlK5NdLvHRFiJo2HhiDF7Ki01WQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.12.0", - "@typescript-eslint/visitor-keys": "5.12.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.12.0.tgz", - "integrity": "sha512-9j9rli3zEBV+ae7rlbBOotJcI6zfc6SHFMdKI9M3Nc0sy458LJ79Os+TPWeBBL96J9/e36rdJOfCuyRSgFAA0Q==", - "dev": true, - "requires": { - "@typescript-eslint/utils": "5.12.0", - "debug": "^4.3.2", - "tsutils": "^3.21.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - } - } - }, - "@typescript-eslint/types": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.12.0.tgz", - "integrity": "sha512-JowqbwPf93nvf8fZn5XrPGFBdIK8+yx5UEGs2QFAYFI8IWYfrzz+6zqlurGr2ctShMaJxqwsqmra3WXWjH1nRQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.12.0.tgz", - "integrity": "sha512-Dd9gVeOqt38QHR0BEA8oRaT65WYqPYbIc5tRFQPkfLquVEFPD1HAtbZT98TLBkEcCkvwDYOAvuSvAD9DnQhMfQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.12.0", - "@typescript-eslint/visitor-keys": "5.12.0", - "debug": "^4.3.2", - "globby": "^11.0.4", - "is-glob": "^4.0.3", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - } - } - }, - "@typescript-eslint/utils": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.12.0.tgz", - "integrity": "sha512-k4J2WovnMPGI4PzKgDtQdNrCnmBHpMUFy21qjX2CoPdoBcSBIMvVBr9P2YDP8jOqZOeK3ThOL6VO/sy6jtnvzw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.12.0", - "@typescript-eslint/types": "5.12.0", - "@typescript-eslint/typescript-estree": "5.12.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.12.0.tgz", - "integrity": "sha512-cFwTlgnMV6TgezQynx2c/4/tx9Tufbuo9LPzmWqyRC3QC4qTGkAG1C6pBr0/4I10PAI/FlYunI3vJjIcu+ZHMg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.12.0", - "eslint-visitor-keys": "^3.0.0" - } - }, - "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, - "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true - }, - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "dev": true - }, - "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true, - "requires": {} - }, - "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, - "requires": {} - }, - "adjust-sourcemap-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", - "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "dependencies": { - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "loader-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", - "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - } - } - }, - "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==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "agentkeepalive": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz", - "integrity": "sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - } - }, - "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, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "8.6.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", - "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "requires": { - "ajv": "^8.0.0" - } - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, - "array-includes": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", - "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "array.prototype.flat": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", - "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" - } - }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "autoprefixer": { - "version": "9.8.8", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", - "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", - "dev": true, - "requires": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "picocolors": "^0.2.1", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "babel-loader": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz", - "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==", - "dev": true, - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^1.4.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "dependencies": { - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - } - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.3.tgz", - "integrity": "sha512-NDZ0auNRzmAfE1oDDPW2JhzIMXUk+FFe2ICejmt5T4ocKgiQx3e0VCRx9NCAidcMtL2RUZaWtXnmjTCkx0tcbA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.4", - "semver": "^6.1.1" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz", - "integrity": "sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.2.2", - "core-js-compat": "^3.16.2" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.3.tgz", - "integrity": "sha512-JVE78oRZPKFIeUqFGrSORNzQnrDwZR16oiWeGM8ZyjBn2XAT5OjP+wXx5ESuo33nUsFUEJYjtklnsKbxW5L+7g==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.2.4" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base64-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.1.tgz", - "integrity": "sha512-vFIUq7FdLtjZMhATwDul5RZWv2jpXQ09Pd6jcVEOvIsqCWTRFD/ONHNfyOS8dA/Ippi5dsIgpyKWKZaAKZltbA==", - "dev": true - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "base64id": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", - "dev": true - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true - }, - "big.js": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-6.1.1.tgz", - "integrity": "sha512-1vObw81a8ylZO5ePrtMay0n018TcftpTA5HFKDaSuiUDBo8biRBtjIobw60OpwuvrGk+FsxKamqN4cnmj/eXdg==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "dev": true, - "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "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, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz", - "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001280", - "electron-to-chromium": "^1.3.896", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true - }, - "builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", - "dev": true - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - }, - "cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "dev": true, - "requires": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001283", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001283.tgz", - "integrity": "sha512-9RoKo841j1GQFSJz/nCXOj0sD7tHBtlowjYlrqIUS812x9/emfBLBt6IyMz1zIaYc/eRL8Cs6HPUVi2Hzq4sIg==", - "dev": true - }, - "canonical-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz", - "integrity": "sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.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" - } - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true - }, - "circular-dependency-plugin": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.2.2.tgz", - "integrity": "sha512-g38K9Cm5WRwlaH6g03B9OEz/0qRizI+2I7n+Gz+L5DxXJAPAiWQvwlYNm1V1jkdpUv95bOe/ASm2vfi/G560jQ==", - "dev": true, - "requires": {} - }, - "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 - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", - "dev": true - }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "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==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true - }, - "colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", - "dev": true - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true - }, - "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==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", - "dev": true - }, - "connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dev": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "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==", - "dev": true - }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "copy-anything": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.3.tgz", - "integrity": "sha512-GK6QUtisv4fNS+XcI7shX0Gx9ORg7QqIznyfho79JTnX1XhLiyZHfftvGiziqzRiEi/Bjhgpi+D2o7HxJFPnDQ==", - "dev": true, - "requires": { - "is-what": "^3.12.0" - } - }, - "copy-webpack-plugin": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.0.1.tgz", - "integrity": "sha512-14gHKKdYIxF84jCEgPgYXCPpldbwpxxLbCmA7LReY7gvbaT555DgeBWBgBZM116tv/fO6RRJrsivBqRyRlukhw==", - "dev": true, - "requires": { - "fast-glob": "^3.2.5", - "glob-parent": "^6.0.0", - "globby": "^11.0.3", - "normalize-path": "^3.0.0", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^6.0.0" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "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==", - "dev": true - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "core-js": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.19.0.tgz", - "integrity": "sha512-L1TpFRWXZ76vH1yLM+z6KssLZrP8Z6GxxW4auoCj+XiViOzNPJCAuTIkn03BGdFe6Z5clX5t64wRIRypsZQrUg==", - "dev": true - }, - "core-js-compat": { - "version": "3.19.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.19.1.tgz", - "integrity": "sha512-Q/VJ7jAF/y68+aUsQJ/afPOewdsGkDtcMb40J8MbuWKlK3Y+wtHq8bTHKPj2WKWLIqmS5JhHs4CzHtz6pT2W6g==", - "dev": true, - "requires": { - "browserslist": "^4.17.6", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } - } - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "critters": { - "version": "0.0.14", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.14.tgz", - "integrity": "sha512-YiBoGKfU8/xg+tVMw0KfMBgmr0TWa1JGmRXDzbQRQQaDarGUcZZtZEB25QyYrLasQZAnvqoZhSg2GW0zdsQkYQ==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "css-select": "^4.1.3", - "parse5": "^6.0.1", - "parse5-htmlparser2-tree-adapter": "^6.0.1", - "postcss": "^8.3.7", - "pretty-bytes": "^5.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "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 - }, - "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 - }, - "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, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "dependencies": { - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "css": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", - "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "source-map": "^0.6.1", - "source-map-resolve": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "css-blank-pseudo": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz", - "integrity": "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==", - "dev": true, - "requires": { - "postcss": "^7.0.5" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "css-has-pseudo": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz", - "integrity": "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==", - "dev": true, - "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^5.0.0-rc.4" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "dev": true - }, - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dev": true, - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "css-loader": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.5.0.tgz", - "integrity": "sha512-VmuSdQa3K+wJsl39i7X3qGBM5+ZHmtTnv65fqMGI+fzmHoYmszTVvTqC1XN8JwWDViCB1a8wgNim5SV4fb37xg==", - "dev": true, - "requires": { - "icss-utils": "^5.1.0", - "postcss": "^8.2.15", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.1.0", - "semver": "^7.3.5" - } - }, - "css-prefers-color-scheme": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz", - "integrity": "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==", - "dev": true, - "requires": { - "postcss": "^7.0.5" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "css-select": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", - "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" - } - }, - "css-what": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", - "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", - "dev": true - }, - "cssdb": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz", - "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==", - "dev": true - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true - }, - "custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", - "dev": true - }, - "date-format": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz", - "integrity": "sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w==", - "dev": true - }, - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dev": true, - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - }, - "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 - }, - "default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, - "requires": { - "execa": "^5.0.0" - } - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "requires": { - "clone": "^1.0.2" - } - }, - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "del": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", - "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", - "dev": true, - "requires": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - } - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "dependency-graph": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", - "dev": true - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true - }, - "dns-packet": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", - "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", - "dev": true, - "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "dev": true, - "requires": { - "buffer-indexof": "^1.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", - "dev": true, - "requires": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true - }, - "domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "electron-to-chromium": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.1.tgz", - "integrity": "sha512-9ldvb6QMHiDpUNF1iSwBTiTT0qXEN+xIO5WlCJrC5gt0z74ofOiqR698vaJqYWnri0XZiF0YmnrFmGq/EmpGAA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, - "optional": true, - "requires": { - "iconv-lite": "^0.6.2" - }, - "dependencies": { - "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==", - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "engine.io": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.0.tgz", - "integrity": "sha512-ErhZOVu2xweCjEfYcTdkCnEYUiZgkAcBBAhW4jbIvNG8SLU3orAqoJCiytZjYF7eTpVmmCrLDjLIEaPlUAs1uw==", - "dev": true, - "requires": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.0.0", - "ws": "~8.2.3" - } - }, - "engine.io-parser": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.2.tgz", - "integrity": "sha512-wuiO7qO/OEkPJSFueuATIXtrxF7/6GTbAO9QLv7nnbjwZ5tYhLm9zxvLwxstRs0dcT0KUlWTjtIOs1T86jt12g==", - "dev": true, - "requires": { - "base64-arraybuffer": "~1.0.1" - } - }, - "enhanced-resolve": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", - "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", - "dev": true - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true - }, - "err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "optional": true, - "requires": { - "prr": "~1.0.1" - } - }, - "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, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", - "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - } - }, - "es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "esbuild": { - "version": "0.13.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.12.tgz", - "integrity": "sha512-vTKKUt+yoz61U/BbrnmlG9XIjwpdIxmHB8DlPR0AAW6OdS+nBQBci6LUHU2q9WbBobMEIQxxDpKbkmOGYvxsow==", - "dev": true, - "optional": true, - "requires": { - "esbuild-android-arm64": "0.13.12", - "esbuild-darwin-64": "0.13.12", - "esbuild-darwin-arm64": "0.13.12", - "esbuild-freebsd-64": "0.13.12", - "esbuild-freebsd-arm64": "0.13.12", - "esbuild-linux-32": "0.13.12", - "esbuild-linux-64": "0.13.12", - "esbuild-linux-arm": "0.13.12", - "esbuild-linux-arm64": "0.13.12", - "esbuild-linux-mips64le": "0.13.12", - "esbuild-linux-ppc64le": "0.13.12", - "esbuild-netbsd-64": "0.13.12", - "esbuild-openbsd-64": "0.13.12", - "esbuild-sunos-64": "0.13.12", - "esbuild-windows-32": "0.13.12", - "esbuild-windows-64": "0.13.12", - "esbuild-windows-arm64": "0.13.12" - } - }, - "esbuild-darwin-64": { - "version": "0.13.12", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.12.tgz", - "integrity": "sha512-c51C+N+UHySoV2lgfWSwwmlnLnL0JWj/LzuZt9Ltk9ub1s2Y8cr6SQV5W3mqVH1egUceew6KZ8GyI4nwu+fhsw==", - "dev": true, - "optional": true - }, - "esbuild-wasm": { - "version": "0.13.12", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.13.12.tgz", - "integrity": "sha512-eGdiSewbnJffEvyA0qQmr+w3HurBMVp4QhOfICzeeoL9naC8qC3PFaw6hZaqSgks5DXnQONtUGUFLsX3eXpq8A==", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.9.0.tgz", - "integrity": "sha512-PB09IGwv4F4b0/atrbcMFboF/giawbBLVC7fyDamk5Wtey4Jh2K+rYaBhCAbUyEI4QzB1ly09Uglc9iCtFaG2Q==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.1.0", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "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.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "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 - }, - "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 - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "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 - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "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, - "requires": { - "argparse": "^2.0.1" - } - }, - "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==", - "dev": true - }, - "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, - "requires": { - "has-flag": "^4.0.0" - } - }, - "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 - } - } - }, - "eslint-config-airbnb-base": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", - "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", - "dev": true, - "requires": { - "confusing-browser-globals": "^1.0.10", - "object.assign": "^4.1.2", - "object.entries": "^1.1.5", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "eslint-config-google": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz", - "integrity": "sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==", - "dev": true, - "requires": {} - }, - "eslint-config-prettier": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.4.0.tgz", - "integrity": "sha512-CFotdUcMY18nGRo5KGsnNxpznzhkopOcOo0InID+sgQssPrzjvsyKZPvOgymTFeHrFuC3Tzdf2YndhXtULK9Iw==", - "dev": true, - "requires": {} - }, - "eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "dev": true, - "peer": true, - "requires": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "peer": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-module-utils": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", - "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", - "dev": true, - "peer": true, - "requires": { - "debug": "^3.2.7", - "find-up": "^2.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "peer": true, - "requires": { - "ms": "^2.1.1" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "peer": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "peer": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "peer": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "peer": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true, - "peer": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "peer": true - } - } - }, - "eslint-plugin-import": { - "version": "2.25.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz", - "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==", - "dev": true, - "peer": true, - "requires": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.2", - "has": "^1.0.3", - "is-core-module": "^2.8.0", - "is-glob": "^4.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.5", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.12.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "peer": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "peer": true - } - } - }, - "eslint-plugin-prettier": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", - "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "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, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "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 - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - }, - "espree": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", - "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", - "dev": true, - "requires": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.3.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "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, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "eventemitter-asyncresource": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", - "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", - "dev": true - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "dev": true, - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "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==", - "dev": true - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "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==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "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, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "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, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "dependencies": { - "flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", - "dev": true - } - } - }, - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true - }, - "flatten": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", - "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==", - "dev": true - }, - "follow-redirects": { - "version": "1.14.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz", - "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==", - "dev": true - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "gauge": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.0.tgz", - "integrity": "sha512-F8sU45yQpjQjxKkm1UOAhf0U/O0aFt//Fl7hsrNVto+patMHjs7dPI9mFOGUKbhrgKm0S3EjW3scMFuQmWSROw==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1", - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - } - }, - "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 - }, - "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 - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "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 - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "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 - }, - "globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", - "dev": true - }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "hdr-histogram-js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.1.tgz", - "integrity": "sha512-uPZxl1dAFnjUFHWLZmt93vUUvtHeaBay9nVNHu38SdOjMSF/4KqJUqa1Seuj08ptU1rEb6AHvB41X8n/zFZ74Q==", - "dev": true, - "requires": { - "@assemblyscript/loader": "^0.10.1", - "base64-js": "^1.2.0", - "pako": "^1.0.3" - } - }, - "hdr-histogram-percentiles-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", - "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", - "dev": true - }, - "hosted-git-info": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "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" - } - }, - "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==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "html-entities": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", - "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", - "dev": true - }, - "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 - }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } - } - }, - "http-parser-js": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", - "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", - "dev": true - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "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==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "http-proxy-middleware": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.1.tgz", - "integrity": "sha512-cfaXRVoZxSed/BmkA7SwBVNI9Kj7HFltaE5rqYOub5kWzWZ+gofV2koVN1j2rMW7pEfSSlCHGJ31xmuyFyfLOg==", - "dev": true, - "requires": { - "@types/http-proxy": "^1.17.5", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - } - }, - "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", - "dev": true, - "requires": { - "ms": "^2.0.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "requires": {} - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "ignore": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", - "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", - "dev": true - }, - "ignore-walk": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-4.0.1.tgz", - "integrity": "sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw==", - "dev": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", - "dev": true, - "optional": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "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 - } - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "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 - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true - }, - "inquirer": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.0.tgz", - "integrity": "sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.2.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "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 - }, - "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 - }, - "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, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "internal-ip": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-6.2.0.tgz", - "integrity": "sha512-D8WGsR6yDt8uq7vDMu7mjcR+yRMm3dW8yufyChmszWRjcSHuxLBkR3GdS2HZAjodsaGuCvXeEJpueisXJULghg==", - "dev": true, - "requires": { - "default-gateway": "^6.0.0", - "ipaddr.js": "^1.9.1", - "is-ip": "^3.1.0", - "p-event": "^4.2.0" - }, - "dependencies": { - "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==", - "dev": true - } - } - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "ip-regex": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", - "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", - "dev": true - }, - "ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", - "dev": true - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "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, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true - }, - "is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "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 - }, - "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, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true - }, - "is-ip": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz", - "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==", - "dev": true, - "requires": { - "ip-regex": "^4.0.0" - } - }, - "is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true - }, - "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 - }, - "is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true - }, - "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 - }, - "is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", - "dev": true - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "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 - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-what": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", - "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isbinaryfile": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", - "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", - "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "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, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz", - "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jasmine-core": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.10.1.tgz", - "integrity": "sha512-ooZWSDVAdh79Rrj4/nnfklL3NQVra0BcuhcuWoAwwi+znLDoUeH87AFfeX8s+YeYi6xlv5nveRyaA1v7CintfA==", - "dev": true - }, - "jest-worker": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.3.1.tgz", - "integrity": "sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "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, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "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 - }, - "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, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "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 - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "jsonc-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", - "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true - }, - "karma": { - "version": "6.3.9", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.9.tgz", - "integrity": "sha512-E/MqdLM9uVIhfuyVnrhlGBu4miafBdXEAEqCmwdEMh3n17C7UWC/8Kvm3AYKr91gc7scutekZ0xv6rxRaUCtnw==", - "dev": true, - "requires": { - "body-parser": "^1.19.0", - "braces": "^3.0.2", - "chokidar": "^3.5.1", - "colors": "^1.4.0", - "connect": "^3.7.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.1", - "glob": "^7.1.7", - "graceful-fs": "^4.2.6", - "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.8", - "lodash": "^4.17.21", - "log4js": "^6.3.0", - "mime": "^2.5.2", - "minimatch": "^3.0.4", - "qjobs": "^1.2.0", - "range-parser": "^1.2.1", - "rimraf": "^3.0.2", - "socket.io": "^4.2.0", - "source-map": "^0.6.1", - "tmp": "^0.2.1", - "ua-parser-js": "^0.7.30", - "yargs": "^16.1.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - } - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - } - } - }, - "karma-chrome-launcher": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz", - "integrity": "sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg==", - "dev": true, - "requires": { - "which": "^1.2.1" - } - }, - "karma-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.0.3.tgz", - "integrity": "sha512-atDvLQqvPcLxhED0cmXYdsPMCQuh6Asa9FMZW1bhNqlVEhJoB9qyZ2BY1gu7D/rr5GLGb5QzYO4siQskxaWP/g==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.1", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.0", - "minimatch": "^3.0.4" - }, - "dependencies": { - "istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "requires": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "karma-jasmine": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-4.0.1.tgz", - "integrity": "sha512-h8XDAhTiZjJKzfkoO1laMH+zfNlra+dEQHUAjpn5JV1zCPtOIVWGQjLBrqhnzQa/hrU2XrZwSyBa6XjEBzfXzw==", - "dev": true, - "requires": { - "jasmine-core": "^3.6.0" - } - }, - "karma-jasmine-html-reporter": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.7.0.tgz", - "integrity": "sha512-pzum1TL7j90DTE86eFt48/s12hqwQuiD+e5aXx2Dc9wDEn2LfGq6RoAxEZZjFiN0RDSCOnosEKRZWxbQ+iMpQQ==", - "dev": true, - "requires": {} - }, - "karma-source-map-support": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", - "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", - "dev": true, - "requires": { - "source-map-support": "^0.5.5" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", - "dev": true - }, - "less": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/less/-/less-4.1.2.tgz", - "integrity": "sha512-EoQp/Et7OSOVu0aJknJOtlXZsnr8XE8KwuzTHOLeVSEx8pVWUICc8Q0VYRHgzyjX78nMEyC/oztWFbgyhtNfDA==", - "dev": true, - "requires": { - "copy-anything": "^2.0.1", - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "needle": "^2.5.2", - "parse-node-version": "^1.0.1", - "source-map": "~0.6.0", - "tslib": "^2.3.0" - }, - "dependencies": { - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "optional": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "optional": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "optional": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - } - } - }, - "less-loader": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-10.2.0.tgz", - "integrity": "sha512-AV5KHWvCezW27GT90WATaDnfXBv99llDbtaj4bshq6DvAihMdNjaPDcUMa6EXKLRF+P2opFenJp89BXg91XLYg==", - "dev": true, - "requires": { - "klona": "^2.0.4" - } - }, - "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, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "license-webpack-plugin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.0.tgz", - "integrity": "sha512-b9iMrROrw2fTOJBZ57h0xJfT5/1Cxg4ucYbtpWoukv4Awb2TFPfDDFVHNM8w6SYQpVfB13a5tQJxgGamqwrsyw==", - "dev": true, - "requires": { - "webpack-sources": "^3.0.0" - } - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", - "dev": true - }, - "loader-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.0.0.tgz", - "integrity": "sha512-ry4RE7qen73BFLgihlbyllGIW9SVWLUD5Cq9VWtzrqhntOMOJl8yEjA89d5mCUTT0puCnHo4EecO6bz+BOAS8w==", - "dev": true, - "requires": { - "big.js": "^6.1.1" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true - }, - "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 - }, - "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, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "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 - }, - "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 - }, - "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, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "log4js": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.3.0.tgz", - "integrity": "sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw==", - "dev": true, - "requires": { - "date-format": "^3.0.0", - "debug": "^4.1.1", - "flatted": "^2.0.1", - "rfdc": "^1.1.4", - "streamroller": "^2.2.4" - } - }, - "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==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.4" - } - }, - "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, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "make-fetch-happen": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", - "dev": true, - "requires": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "memfs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.0.tgz", - "integrity": "sha512-o/RfP0J1d03YwsAxyHxAYs2kyJp55AFkMazlFAZFR2I2IXkxiUTXRabJ6RmNNCQ83LAD2jy52Khj0m3OffpNdA==", - "dev": true, - "requires": { - "fs-monkey": "1.0.3" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true - }, - "mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", - "dev": true - }, - "mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "dev": true, - "requires": { - "mime-db": "1.51.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "mini-css-extract-plugin": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.4.3.tgz", - "integrity": "sha512-zekavl9mZuGyk7COjsfFY/f655AX61EKE0AthXPrmDk+oZyjZ9WzO4WPjXnnO9xl8obK2kmM6rAQrBEmk+WK1g==", - "dev": true, - "requires": { - "schema-utils": "^3.1.0" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} - }, - "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==", - "dev": true - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "minipass": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz", - "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", - "dev": true, - "requires": { - "encoding": "^0.1.12", - "minipass": "^3.1.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" - } - }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-json-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", - "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", - "dev": true, - "requires": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "dev": true, - "requires": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - } - }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "nanoid": { - "version": "3.1.30", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", - "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "needle": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", - "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", - "dev": true, - "optional": true, - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "nice-napi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", - "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", - "dev": true, - "optional": true, - "requires": { - "node-addon-api": "^3.0.0", - "node-gyp-build": "^4.2.2" - } - }, - "node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true, - "optional": true - }, - "node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", - "dev": true - }, - "node-gyp": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", - "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", - "dev": true, - "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^9.1.0", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "dependencies": { - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "node-gyp-build": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", - "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", - "dev": true, - "optional": true - }, - "node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", - "dev": true - }, - "nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "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 - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true - }, - "npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", - "dev": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-install-checks": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", - "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", - "dev": true, - "requires": { - "semver": "^7.1.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true - }, - "npm-package-arg": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", - "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", - "validate-npm-package-name": "^3.0.0" - } - }, - "npm-packlist": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-3.0.0.tgz", - "integrity": "sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ==", - "dev": true, - "requires": { - "glob": "^7.1.6", - "ignore-walk": "^4.0.1", - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-pick-manifest": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", - "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", - "dev": true, - "requires": { - "npm-install-checks": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^8.1.2", - "semver": "^7.3.4" - } - }, - "npm-registry-fetch": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", - "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", - "dev": true, - "requires": { - "make-fetch-happen": "^9.0.1", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" - } - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "npmlog": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.0.tgz", - "integrity": "sha512-03ppFRGlsyUaQFbGC2C8QWJN/C/K7PsfyD9aQdhVKAQIH4sQBc8WASqFBP7O+Ut4d2oo5LoeoboB3cGdBZSp6Q==", - "dev": true, - "requires": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.0", - "set-blocking": "^2.0.0" - } - }, - "nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", - "dev": true, - "requires": { - "boolbase": "^1.0.0" - } - }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", - "dev": true - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "object.entries": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", - "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "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.3" - } - }, - "ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "requires": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "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 - }, - "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 - }, - "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, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "p-event": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", - "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", - "dev": true, - "requires": { - "p-timeout": "^3.1.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "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, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - }, - "dependencies": { - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - } - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-retry": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", - "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", - "dev": true, - "requires": { - "@types/retry": "^0.12.0", - "retry": "^0.13.1" - }, - "dependencies": { - "retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true - } - } - }, - "p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, - "requires": { - "p-finally": "^1.0.0" - } - }, - "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 - }, - "pacote": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-12.0.2.tgz", - "integrity": "sha512-Ar3mhjcxhMzk+OVZ8pbnXdb0l8+pimvlsqBGRNkble2NVgyqOGE3yrCGi/lAYq7E7NRDMz89R1Wx5HIMCGgeYg==", - "dev": true, - "requires": { - "@npmcli/git": "^2.1.0", - "@npmcli/installed-package-contents": "^1.0.6", - "@npmcli/promise-spawn": "^1.2.0", - "@npmcli/run-script": "^2.0.0", - "cacache": "^15.0.5", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.3", - "mkdirp": "^1.0.3", - "npm-package-arg": "^8.0.1", - "npm-packlist": "^3.0.0", - "npm-pick-manifest": "^6.0.0", - "npm-registry-fetch": "^11.0.0", - "promise-retry": "^2.0.1", - "read-package-json-fast": "^2.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.1.0" - } - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "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, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "parse5-html-rewriting-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-6.0.1.tgz", - "integrity": "sha512-vwLQzynJVEfUlURxgnf51yAJDQTtVpNyGD8tKi2Za7m+akukNHxCcUQMAa/mUGLhCeicFdpy7Tlvj8ZNKadprg==", - "dev": true, - "requires": { - "parse5": "^6.0.1", - "parse5-sax-parser": "^6.0.1" - } - }, - "parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dev": true, - "requires": { - "parse5": "^6.0.1" - } - }, - "parse5-sax-parser": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz", - "integrity": "sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg==", - "dev": true, - "requires": { - "parse5": "^6.0.1" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "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 - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "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 - }, - "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 - }, - "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=", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "piscina": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.1.0.tgz", - "integrity": "sha512-KTW4sjsCD34MHrUbx9eAAbuUSpVj407hQSgk/6Epkg0pbRBmv4a3UX7Sr8wxm9xYqQLnsN4mFOjqGDzHAdgKQg==", - "dev": true, - "requires": { - "eventemitter-asyncresource": "^1.0.0", - "hdr-histogram-js": "^2.0.1", - "hdr-histogram-percentiles-obj": "^3.0.0", - "nice-napi": "^1.0.2" - } - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "dev": true, - "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - } - } - }, - "postcss": { - "version": "8.3.11", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.11.tgz", - "integrity": "sha512-hCmlUAIlUiav8Xdqw3Io4LcpA1DOt7h3LSTAC4G6JGHFFaWzI6qvFt9oilvl8BmkbBRX1IhM90ZAmpk68zccQA==", - "dev": true, - "requires": { - "nanoid": "^3.1.30", - "picocolors": "^1.0.0", - "source-map-js": "^0.6.2" - } - }, - "postcss-attribute-case-insensitive": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz", - "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^6.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-color-functional-notation": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", - "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-color-gray": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz", - "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==", - "dev": true, - "requires": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.5", - "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-color-hex-alpha": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz", - "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==", - "dev": true, - "requires": { - "postcss": "^7.0.14", - "postcss-values-parser": "^2.0.1" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-color-mod-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz", - "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==", - "dev": true, - "requires": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-color-rebeccapurple": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz", - "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-custom-media": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz", - "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==", - "dev": true, - "requires": { - "postcss": "^7.0.14" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-custom-properties": { - "version": "8.0.11", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz", - "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==", - "dev": true, - "requires": { - "postcss": "^7.0.17", - "postcss-values-parser": "^2.0.1" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-custom-selectors": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz", - "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "dev": true - }, - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dev": true, - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-dir-pseudo-class": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz", - "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "dev": true - }, - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dev": true, - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-double-position-gradients": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz", - "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==", - "dev": true, - "requires": { - "postcss": "^7.0.5", - "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-env-function": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz", - "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-focus-visible": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz", - "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-focus-within": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz", - "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-font-variant": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz", - "integrity": "sha512-I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-gap-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz", - "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-image-set-function": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz", - "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-import": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.2.tgz", - "integrity": "sha512-BJ2pVK4KhUyMcqjuKs9RijV5tatNzNa73e/32aBVE/ejYPe37iH+6vAu9WvqUkB5OAYgLHzbSvzHnorybJCm9g==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - } - }, - "postcss-initial": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.4.tgz", - "integrity": "sha512-3RLn6DIpMsK1l5UUy9jxQvoDeUN4gP939tDcKUHD/kM8SGSKbFAnvkpFpj3Bhtz3HGk1jWY5ZNWX6mPta5M9fg==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-lab-function": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz", - "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==", - "dev": true, - "requires": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.0.tgz", - "integrity": "sha512-H9hv447QjQJVDbHj3OUdciyAXY3v5+UDduzEytAlZCVHCpNAAg/mCSwhYYqZr9BiGYhmYspU8QXxZwiHTLn3yA==", - "dev": true, - "requires": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.4", - "semver": "^7.3.5" - } - }, - "postcss-logical": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz", - "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-media-minmax": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz", - "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "requires": {} - }, - "postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.4" - } - }, - "postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0" - } - }, - "postcss-nesting": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz", - "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-overflow-shorthand": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", - "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-page-break": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz", - "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-place": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz", - "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-preset-env": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz", - "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==", - "dev": true, - "requires": { - "autoprefixer": "^9.6.1", - "browserslist": "^4.6.4", - "caniuse-lite": "^1.0.30000981", - "css-blank-pseudo": "^0.1.4", - "css-has-pseudo": "^0.10.0", - "css-prefers-color-scheme": "^3.1.1", - "cssdb": "^4.4.0", - "postcss": "^7.0.17", - "postcss-attribute-case-insensitive": "^4.0.1", - "postcss-color-functional-notation": "^2.0.1", - "postcss-color-gray": "^5.0.0", - "postcss-color-hex-alpha": "^5.0.3", - "postcss-color-mod-function": "^3.0.3", - "postcss-color-rebeccapurple": "^4.0.1", - "postcss-custom-media": "^7.0.8", - "postcss-custom-properties": "^8.0.11", - "postcss-custom-selectors": "^5.1.2", - "postcss-dir-pseudo-class": "^5.0.0", - "postcss-double-position-gradients": "^1.0.0", - "postcss-env-function": "^2.0.2", - "postcss-focus-visible": "^4.0.0", - "postcss-focus-within": "^3.0.0", - "postcss-font-variant": "^4.0.0", - "postcss-gap-properties": "^2.0.0", - "postcss-image-set-function": "^3.0.1", - "postcss-initial": "^3.0.0", - "postcss-lab-function": "^2.0.1", - "postcss-logical": "^3.0.0", - "postcss-media-minmax": "^4.0.0", - "postcss-nesting": "^7.0.0", - "postcss-overflow-shorthand": "^2.0.0", - "postcss-page-break": "^2.0.0", - "postcss-place": "^4.0.1", - "postcss-pseudo-class-any-link": "^6.0.0", - "postcss-replace-overflow-wrap": "^3.0.0", - "postcss-selector-matches": "^4.0.0", - "postcss-selector-not": "^4.0.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-pseudo-class-any-link": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz", - "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "dev": true - }, - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dev": true, - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-replace-overflow-wrap": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz", - "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-selector-matches": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz", - "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-selector-not": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz", - "integrity": "sha512-YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-selector-parser": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", - "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", - "dev": true - }, - "postcss-values-parser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", - "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", - "dev": true, - "requires": { - "flatten": "^1.0.2", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "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 - }, - "prettier": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", - "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true - }, - "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==", - "dev": true - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, - "promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "requires": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - } - }, - "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==", - "dev": true, - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "dependencies": { - "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==", - "dev": true - } - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true, - "optional": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qjobs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", - "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", - "dev": true - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "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 - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "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==", - "dev": true - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", - "dev": true, - "requires": { - "pify": "^2.3.0" - } - }, - "read-package-json-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", - "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", - "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", - "dev": true - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", - "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", - "dev": true, - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", - "dev": true - }, - "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regex-parser": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", - "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", - "dev": true - }, - "regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "regexpu-core": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", - "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", - "dev": true, - "requires": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^9.0.0", - "regjsgen": "^0.5.2", - "regjsparser": "^0.7.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - } - }, - "regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", - "dev": true - }, - "regjsparser": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", - "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "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 - }, - "resolve-url-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", - "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", - "dev": true, - "requires": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^7.0.35", - "source-map": "0.6.1" - }, - "dependencies": { - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "loader-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", - "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true - }, - "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, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rxjs": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz", - "integrity": "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==", - "requires": { - "tslib": "~2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", - "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" - } - } - }, - "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==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sass": { - "version": "1.43.4", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.43.4.tgz", - "integrity": "sha512-/ptG7KE9lxpGSYiXn7Ar+lKOv37xfWsZRtFYal2QHNigyVQDx685VFT/h7ejVr+R8w7H4tmUgtulsKl5YpveOg==", - "dev": true, - "requires": { - "chokidar": ">=3.0.0 <4.0.0" - } - }, - "sass-loader": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.3.0.tgz", - "integrity": "sha512-6l9qwhdOb7qSrtOu96QQ81LVl8v6Dp9j1w3akOm0aWHyrTYtagDt5+kS32N4yq4hHk3M+rdqoRMH+lIdqvW6HA==", - "dev": true, - "requires": { - "klona": "^2.0.4", - "neo-async": "^2.6.2" - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} - }, - "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==", - "dev": true - } - } - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", - "dev": true - }, - "selfsigned": { - "version": "1.10.11", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", - "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", - "dev": true, - "requires": { - "node-forge": "^0.10.0" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "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=", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - } - } - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } - }, - "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, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "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 - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true - }, - "socket.io": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.0.tgz", - "integrity": "sha512-bnpJxswR9ov0Bw6ilhCvO38/1WPtE3eA2dtxi2Iq4/sFebiDJQzgKNYA7AuVVdGW09nrESXd90NbZqtDd9dzRQ==", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "debug": "~4.3.2", - "engine.io": "~6.1.0", - "socket.io-adapter": "~2.3.3", - "socket.io-parser": "~4.0.4" - } - }, - "socket.io-adapter": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz", - "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==", - "dev": true - }, - "socket.io-parser": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", - "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", - "dev": true, - "requires": { - "@types/component-emitter": "^1.2.10", - "component-emitter": "~1.3.0", - "debug": "~4.3.1" - } - }, - "sockjs": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", - "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", - "dev": true, - "requires": { - "faye-websocket": "^0.11.3", - "uuid": "^3.4.0", - "websocket-driver": "^0.7.4" - }, - "dependencies": { - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - } - } - }, - "socks": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", - "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", - "dev": true, - "requires": { - "ip": "^1.1.5", - "smart-buffer": "^4.1.0" - } - }, - "socks-proxy-agent": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", - "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", - "dev": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.1", - "socks": "^2.6.1" - } - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - }, - "source-map-js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", - "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", - "dev": true - }, - "source-map-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.0.tgz", - "integrity": "sha512-GKGWqWvYr04M7tn8dryIWvb0s8YM41z82iQv01yBtIylgxax0CwvSy6gc2Y02iuXwEfGWRlMicH0nvms9UZphw==", - "dev": true, - "requires": { - "abab": "^2.0.5", - "iconv-lite": "^0.6.2", - "source-map-js": "^0.6.2" - }, - "dependencies": { - "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==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "source-map-resolve": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", - "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0" - } - }, - "source-map-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } - }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - }, - "streamroller": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz", - "integrity": "sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ==", - "dev": true, - "requires": { - "date-format": "^2.1.0", - "debug": "^4.1.1", - "fs-extra": "^8.1.0" - }, - "dependencies": { - "date-format": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", - "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", - "dev": true - } - } - }, - "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==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "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==", - "dev": true - } - } - }, - "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, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "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, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true, - "peer": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "stylus": { - "version": "0.55.0", - "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.55.0.tgz", - "integrity": "sha512-MuzIIVRSbc8XxHH7FjkvWqkIcr1BvoMZoR/oFuAJDlh7VSaNJzrB4uJ38GRQa+mWjLXODAMzeDe0xi9GYbGwnw==", - "dev": true, - "requires": { - "css": "^3.0.0", - "debug": "~3.1.0", - "glob": "^7.1.6", - "mkdirp": "~1.0.4", - "safer-buffer": "^2.1.2", - "sax": "~1.2.4", - "semver": "^6.3.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "stylus-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-6.2.0.tgz", - "integrity": "sha512-5dsDc7qVQGRoc6pvCL20eYgRUxepZ9FpeK28XhdXaIPP6kXr6nI1zAAKFQgP5OBkOfKaURp4WUpJzspg1f01Gg==", - "dev": true, - "requires": { - "fast-glob": "^3.2.7", - "klona": "^2.0.4", - "normalize-path": "^3.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "symbol-observable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", - "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", - "dev": true - }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true - }, - "tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - } - }, - "terser": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz", - "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.20" - } - }, - "terser-webpack-plugin": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.5.tgz", - "integrity": "sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g==", - "dev": true, - "requires": { - "jest-worker": "^27.0.6", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.2" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} - }, - "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==", - "dev": true - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true - }, - "tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true - }, - "tsconfig-paths": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", - "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", - "dev": true, - "peer": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "peer": true, - "requires": { - "minimist": "^1.2.0" - } - } - } - }, - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, - "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, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typed-assert": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.8.tgz", - "integrity": "sha512-5NkbXZUlmCE73Fs7gvkp1XXJWHYetPkg60QnQ2NXQmBYNFxbBr2zA8GCtaH4K2s2WhOmSlgiSTmrjrcm5tnM5g==", - "dev": true - }, - "typescript": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", - "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", - "dev": true - }, - "ua-parser-js": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", - "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", - "dev": true - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "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 - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", - "dev": true, - "requires": { - "builtins": "^1.0.3" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, - "void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", - "dev": true - }, - "watchpack": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.0.tgz", - "integrity": "sha512-MnN0Q1OsvB/GGHETrFeZPQaOelWh/7O+EiFlj8sM9GPjtQkis7k01aAxrg/18kTfoIVcLL+haEVFlXDaSRwKRw==", - "dev": true, - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "webpack": { - "version": "5.64.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.64.1.tgz", - "integrity": "sha512-b4FHmRgaaAjP+aVOVz41a9Qa5SmkUPQ+u8FntTQ1roPHahSComB6rXnLwc976VhUY4CqTaLu5mCswuHiNhOfVw==", - "dev": true, - "requires": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.3", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.2.0", - "webpack-sources": "^3.2.2" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} - }, - "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==", - "dev": true - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "webpack-dev-middleware": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.2.1.tgz", - "integrity": "sha512-Kx1X+36Rn9JaZcQMrJ7qN3PMAuKmEDD9ZISjUj3Cgq4A6PtwYsC4mpaKotSRYH3iOF6HsUa8viHKS59FlyVifQ==", - "dev": true, - "requires": { - "colorette": "^2.0.10", - "memfs": "^3.2.2", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^3.1.0" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} - }, - "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==", - "dev": true - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "webpack-dev-server": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.4.0.tgz", - "integrity": "sha512-+S0XRIbsopVjPFjCO8I07FXYBWYqkFmuP56ucGMTs2hA/gV4q2M9xTmNo5Tg4o8ffRR+Nm3AsXnQXxKRyYovrA==", - "dev": true, - "requires": { - "ansi-html-community": "^0.0.8", - "bonjour": "^3.5.0", - "chokidar": "^3.5.2", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "del": "^6.0.0", - "express": "^4.17.1", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.0", - "internal-ip": "^6.2.0", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "portfinder": "^1.0.28", - "schema-utils": "^3.1.0", - "selfsigned": "^1.10.11", - "serve-index": "^1.9.1", - "sockjs": "^0.3.21", - "spdy": "^4.0.2", - "strip-ansi": "^7.0.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^5.2.1", - "ws": "^8.1.0" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} - }, - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - } - }, - "webpack-sources": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.2.tgz", - "integrity": "sha512-cp5qdmHnu5T8wRg2G3vZZHoJPN14aqQ89SyQ11NpGH5zEMDCclt49rzo+MaRazk7/UeILhAI+/sEtcM+7Fr0nw==", - "dev": true - }, - "webpack-subresource-integrity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.0.0.tgz", - "integrity": "sha512-x9514FpLRydO+UAQ8DY4aLtCjxmdLkuQVcDFN1kGzuusREYJ1B0rzk/iIlWiL6dnvrhEGFj2+UsdxDkP8Z4UKg==", - "dev": true, - "requires": { - "typed-assert": "^1.0.8" - } - }, - "websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "requires": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "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" - } - }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "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 - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", - "dev": true, - "requires": {} - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - }, - "yargs": { - "version": "17.2.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.2.1.tgz", - "integrity": "sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - }, - "zone.js": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.4.tgz", - "integrity": "sha512-DDh2Ab+A/B+9mJyajPjHFPWfYU1H+pdun4wnnk0OcQTNjem1XQSZ2CDW+rfZEUDjv5M19SBqAkjZi0x5wuB5Qw==", - "requires": { - "tslib": "^2.0.0" - } - } - } -} diff --git a/client/package.json b/client/package.json deleted file mode 100644 index 5c10597..0000000 --- a/client/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "client", - "version": "0.0.0", - "scripts": { - "lint": "eslint", - "ng": "ng", - "start": "ng serve --proxy-config src/proxy.conf.json", - "build": "ng build", - "watch": "ng build --watch --configuration development", - "test": "ng test", - "test-no-browser": "ng test --browsers ChromeHeadless --watch=false", - "pre-commit": "npm run test-no-browser" - }, - "private": true, - "dependencies": { - "@angular/animations": "~13.0.0", - "@angular/cdk": "^13.0.2", - "@angular/common": "~13.0.0", - "@angular/compiler": "~13.0.0", - "@angular/core": "~13.0.0", - "@angular/forms": "~13.0.0", - "@angular/material": "^13.0.2", - "@angular/platform-browser": "~13.0.0", - "@angular/platform-browser-dynamic": "~13.0.0", - "@angular/router": "~13.0.0", - "@fortawesome/angular-fontawesome": "^0.10.2", - "@fortawesome/fontawesome-svg-core": "^6.1.0", - "@fortawesome/free-regular-svg-icons": "^6.1.0", - "@fortawesome/free-solid-svg-icons": "^6.1.0", - "rxjs": "~7.4.0", - "tslib": "^2.3.0", - "zone.js": "~0.11.4" - }, - "devDependencies": { - "@angular-devkit/build-angular": "~13.0.3", - "@angular/cli": "^13.0.4", - "@angular/compiler-cli": "~13.0.0", - "@types/jasmine": "~3.10.0", - "@types/node": "^12.11.1", - "@types/scriptjs": "^0.0.2", - "@typescript-eslint/eslint-plugin": "^5.12.0", - "@typescript-eslint/parser": "^5.12.0", - "eslint": "^8.9.0", - "eslint-config-airbnb-base": "^15.0.0", - "eslint-config-google": "^0.14.0", - "eslint-config-prettier": "^8.4.0", - "eslint-plugin-prettier": "^4.0.0", - "jasmine-core": "~3.10.0", - "karma": "~6.3.0", - "karma-chrome-launcher": "~3.1.0", - "karma-coverage": "~2.0.3", - "karma-jasmine": "~4.0.0", - "karma-jasmine-html-reporter": "~1.7.0", - "prettier": "^2.5.1", - "typescript": "~4.4.3" - } -} \ No newline at end of file diff --git a/client/src/app/app-routing.module.ts b/client/src/app/app-routing.module.ts deleted file mode 100644 index a346971..0000000 --- a/client/src/app/app-routing.module.ts +++ /dev/null @@ -1,61 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; -import { AddRuleComponent } from 'src/app/components/add-rule/add-rule.component'; -import { LoginComponent } from 'src/app/components/login/login.component'; - -import { AuthGuard } from './services/auth.guard'; -import { UserSettingsComponent } from './components/user-settings/user-settings.component'; -import { RulesComponent } from './components/rules/rules.component'; -import { RulesStatusComponent } from './components/rules-status/rules.status.component'; - -const routes: Routes = [ - { - path: 'rules/new', - component: AddRuleComponent, - canActivate: [AuthGuard], - }, - { - path: 'rules/list', - component: RulesComponent, - canActivate: [AuthGuard], - }, - { - path: 'rules/status', - component: RulesStatusComponent, - canActivate: [AuthGuard], - }, - { - path: 'login', - component: LoginComponent, - }, - { - path: 'settings', - component: UserSettingsComponent, - canActivate: [AuthGuard], - }, - { - path: '', - redirectTo: '/rules/list', - pathMatch: 'full', - }, -]; - -@NgModule({ - imports: [RouterModule.forRoot(routes)], - exports: [RouterModule], -}) -// eslint-disable-next-line require-jsdoc -export class AppRoutingModule {} diff --git a/client/src/app/app.component.html b/client/src/app/app.component.html deleted file mode 100644 index bd70f3e..0000000 --- a/client/src/app/app.component.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - Home - - - - - - Create Rule - - - - - - All Rules - - - - - - Rules Status - - - - - - Settings - - - - - - Report a bug - - - - - -
- - -
-
- -
-
-
-
- diff --git a/client/src/app/app.component.scss b/client/src/app/app.component.scss deleted file mode 100644 index a675002..0000000 --- a/client/src/app/app.component.scss +++ /dev/null @@ -1,47 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -mat-sidenav-container { - height: 100%; -} - -mat-sidenav { - width: 200px; -} - -.wrapper { - padding-bottom: 2rem; - height: 100%; - width: 100%; - display: flex; - flex-direction: column; -} - -.main { - margin-top: 64px; - padding-bottom: 2rem; - width: 100%; - display: flex; - flex-direction: column; - align-items: center; - flex: 1; -} - -.content { - padding-top: 1rem; - flex: 1; -} - -.sidenav-label { - margin-left: 1rem; -} diff --git a/client/src/app/app.component.spec.ts b/client/src/app/app.component.spec.ts deleted file mode 100644 index 779ee39..0000000 --- a/client/src/app/app.component.spec.ts +++ /dev/null @@ -1,46 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { TestBed } from '@angular/core/testing'; -import { RouterTestingModule } from '@angular/router/testing'; -import { AppComponent } from './app.component'; - -describe('AppComponent', () => { - beforeEach(async () => { - await TestBed.configureTestingModule({ - imports: [RouterTestingModule], - declarations: [AppComponent], - }).compileComponents(); - }); - - it('should create the app', () => { - const fixture = TestBed.createComponent(AppComponent); - const app = fixture.componentInstance; - expect(app).toBeTruthy(); - }); - - it(`should have as title 'client'`, () => { - const fixture = TestBed.createComponent(AppComponent); - const app = fixture.componentInstance; - expect(app.title).toEqual('client'); - }); - - it('should render title', () => { - const fixture = TestBed.createComponent(AppComponent); - fixture.detectChanges(); - const compiled = fixture.nativeElement as HTMLElement; - expect(compiled.querySelector('.content span')?.textContent).toContain( - 'client app is running!' - ); - }); -}); diff --git a/client/src/app/app.component.ts b/client/src/app/app.component.ts deleted file mode 100644 index e89b905..0000000 --- a/client/src/app/app.component.ts +++ /dev/null @@ -1,64 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { Component, ViewChild } from '@angular/core'; -import { - faBug, - faGear, - faHouse, - faList, - faMessage, - faSquarePlus, -} from '@fortawesome/free-solid-svg-icons'; - -import { store } from 'src/app/store'; -import { AgentsService } from './services/agents.service'; -import { AuthService } from './services/auth.service'; - -@Component({ - selector: 'app-root', - templateUrl: './app.component.html', - styleUrls: ['./app.component.scss'], -}) -// eslint-disable-next-line require-jsdoc -export class AppComponent { - faHouse = faHouse; - faList = faList; - faSquarePlus = faSquarePlus; - faGear = faGear; - faMessage = faMessage; - faBug = faBug; - title = 'IFTTA'; - - @ViewChild('sidenav') sidenav: any; - - /** - * Constructor. - * - * @param {AuthService} authService - * @param {AgentService} agentService - */ - constructor( - public authService: AuthService, - private readonly agentsService: AgentsService - ) { - store.sidenav.subscribe((v) => { - if (authService.isLoggedIn) { - this.sidenav.toggle(); - } - }); - if (authService.isLoggedIn) { - this.agentsService.fetchAgentsMetadata(); - } - } -} diff --git a/client/src/app/app.module.ts b/client/src/app/app.module.ts deleted file mode 100644 index 4188529..0000000 --- a/client/src/app/app.module.ts +++ /dev/null @@ -1,108 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { HttpClientModule } from '@angular/common/http'; -import { NgModule } from '@angular/core'; -import { FormsModule, ReactiveFormsModule } from '@angular/forms'; -import { MatButtonModule } from '@angular/material/button'; -import { MatCardModule } from '@angular/material/card'; -import { MatCheckboxModule } from '@angular/material/checkbox'; -import { MatDialogModule } from '@angular/material/dialog'; -import { MatExpansionModule } from '@angular/material/expansion'; -import { MatIconModule } from '@angular/material/icon'; -import { MatInputModule } from '@angular/material/input'; -import { MatListModule } from '@angular/material/list'; -import { MatMenuModule } from '@angular/material/menu'; -import { MatPaginatorModule } from '@angular/material/paginator'; -import { MatProgressBarModule } from '@angular/material/progress-bar'; -import { MatRadioModule } from '@angular/material/radio'; -import { MatSelectModule } from '@angular/material/select'; -import { MatSidenavModule } from '@angular/material/sidenav'; -import { MatSnackBarModule } from '@angular/material/snack-bar'; -import { MatStepperModule } from '@angular/material/stepper'; -import { MatTableModule } from '@angular/material/table'; -import { MatToolbarModule } from '@angular/material/toolbar'; -import { MatTooltipModule } from '@angular/material/tooltip'; -import { MatTreeModule } from '@angular/material/tree'; -import { BrowserModule } from '@angular/platform-browser'; -import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { AppRoutingModule } from './app-routing.module'; -import { AppComponent } from './app.component'; - -import { FontAwesomeModule } from '@fortawesome/angular-fontawesome'; -import { AddRuleComponent } from './components/add-rule/add-rule.component'; -import { DashComponent } from './components/dash/dash.component'; -import { GoogleAdsSelectorComponent } from './components/googleads-selector/googleads-selector.component'; -import { HeaderComponent } from './components/header/header.component'; -import { LocationAutoComplete } from './components/location-auto-complete/location-auto-complete.component'; -import { LoginComponent } from './components/login/login.component'; -import { MissingSettingsDialogComponent } from './components/missing-settings-dialog/missing-settings-dialog.component'; -import { RulesStatusComponent } from './components/rules-status/rules.status.component'; -import { RulesComponent } from './components/rules/rules.component'; -import { TargetSelectorComponent } from './components/target-selector/target-selector.component'; -import { UserSettingsComponent } from './components/user-settings/user-settings.component'; -import { httpInterceptorProviders } from './interceptors'; -import { IntervalFormatPipe } from './pipes/interval-format/interval-format.pipe'; -import { StringReplacePipe } from './pipes/string-replace/string-replace.pipe'; - -@NgModule({ - declarations: [ - AppComponent, - AddRuleComponent, - RulesComponent, - RulesStatusComponent, - TargetSelectorComponent, - HeaderComponent, - LoginComponent, - LocationAutoComplete, - UserSettingsComponent, - MissingSettingsDialogComponent, - GoogleAdsSelectorComponent, - DashComponent, - StringReplacePipe, - IntervalFormatPipe, - ], - imports: [ - BrowserModule, - AppRoutingModule, - BrowserAnimationsModule, - FormsModule, - ReactiveFormsModule, - MatButtonModule, - MatCheckboxModule, - MatInputModule, - MatSelectModule, - MatTableModule, - MatPaginatorModule, - MatTreeModule, - MatIconModule, - MatProgressBarModule, - MatToolbarModule, - MatMenuModule, - MatExpansionModule, - MatDialogModule, - MatSnackBarModule, - HttpClientModule, - MatStepperModule, - MatSidenavModule, - MatListModule, - MatRadioModule, - MatCardModule, - MatTooltipModule, - FontAwesomeModule, - ], - providers: [httpInterceptorProviders], - bootstrap: [AppComponent], -}) -// eslint-disable-next-line require-jsdoc -export class AppModule {} diff --git a/client/src/app/components/add-rule/add-rule.component.html b/client/src/app/components/add-rule/add-rule.component.html deleted file mode 100644 index 7d09371..0000000 --- a/client/src/app/components/add-rule/add-rule.component.html +++ /dev/null @@ -1,301 +0,0 @@ - - -
- - -
- Data source - - -

Rule name

- - Rule name - - -
- -
-

Select a data source

- - Data Source - - - {{ source.name }} - - - -
- - -
-

Parameters

- - {{ param.name }} - - - - - - -
- - -
- -
- Rule conditions - - -

Run every

- - Interval - - - {{ interval | intervalFormat }} - - - -
- - -
- -

Datapoint

- - Datapoint - - - {{ dataPoint.name }} - - - - - - - Comparator - - {{ c.value }} - - - - - - - Value - - - {{ value }} - - - - - Yes - No - - - - - -
- -
- - Target -

Application to target

- - - -
- DV360 - DV360 -
-
- -
- Google Ads - Google Ads -
-
-
- - - - - -
- - Review & Finish -
-

- Rule name {{ currentRuleName }} -

-

- Monitor {{ currentRuleSourceAgentDescription.name }} for - - {{ param.name }} : {{ currentRuleSourceParameters[param.key] }} - -

-

- Trigger when - - {{ this.currentRuleConditionDataPoint }} - {{ this.currentRuleConditionComparator }} - {{ this.currentRuleConditionCompareValue }} - -

- -

- Run every {{ this.currentExecutionInterval }} minutes -

- -

Perform these actions:

-
    -
  • - {{ target.action }} - - - {{ ap.value }}   - -
  • -
-
- -
-
-
diff --git a/client/src/app/components/add-rule/add-rule.component.scss b/client/src/app/components/add-rule/add-rule.component.scss deleted file mode 100644 index b081358..0000000 --- a/client/src/app/components/add-rule/add-rule.component.scss +++ /dev/null @@ -1,78 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -.wrapper { - width: 100%; - height: 100%; - display: flex; - flex-direction: column; - align-items: center; -} - -.form-element { - margin-left: 10px; -} - -.rules { - width: 100%; -} - -form { - display: flex; - flex-direction: column; -} - -[hidden] { - display: none !important; -} - -.step-footer { - margin-top: 3em; - text-align: right; -} - -.mat-input-element { - min-height: 2em; -} - -button { - margin-left: 1.5em; -} - -#rule-summary > p > i { - font-weight: 300; - padding: 6px; - color: blue; -} - -.mat-radio-button ~ .mat-radio-button { - margin-left: 25px; - margin-bottom: 15px; -} - -.radio-button-content { - display: flex !important; - align-items: center; -} - -.radio-button-icon { - height: 50px; - width: 50px; - margin-right: 10px; - margin-left: 10px; -} - -.radio-button-label { - font-size: medium; - font-weight: 200; -} diff --git a/client/src/app/components/add-rule/add-rule.component.spec.ts b/client/src/app/components/add-rule/add-rule.component.spec.ts deleted file mode 100644 index 9a4219d..0000000 --- a/client/src/app/components/add-rule/add-rule.component.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { AddRuleComponent } from './add-rule.component'; - -describe('RulesComponent', () => { - let component: AddRuleComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [AddRuleComponent], - }).compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(AddRuleComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/client/src/app/components/add-rule/add-rule.component.ts b/client/src/app/components/add-rule/add-rule.component.ts deleted file mode 100644 index e0510ba..0000000 --- a/client/src/app/components/add-rule/add-rule.component.ts +++ /dev/null @@ -1,300 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { StepperOrientation } from '@angular/cdk/stepper'; -import { Component, OnInit, ViewChild } from '@angular/core'; -import { NgForm } from '@angular/forms'; -import { MatDialog } from '@angular/material/dialog'; -import { Router } from '@angular/router'; -import { MissingSettingsDialogComponent } from 'src/app/components/missing-settings-dialog/missing-settings-dialog.component'; -import { AgentSettingMetadata, ModelSpec } from 'src/app/interfaces/common'; -import { Comparator, Rule, RuleTargetAction } from 'src/app/interfaces/rule'; -import { SourceAgentMetadata } from 'src/app/interfaces/source'; -import { TargetAgentMetadata } from 'src/app/interfaces/target'; -import { AgentsService } from 'src/app/services/agents.service'; -import { RulesService } from 'src/app/services/rules.service'; -import { UserService } from 'src/app/services/user.service'; -import { store } from 'src/app/store'; - -const EMPTY_SOURCE_AGENT_DESCRIPTION: SourceAgentMetadata = { - dataPoints: [], - id: '', - name: '', - parameters: [], - type: 'source', -}; - -@Component({ - selector: 'app-add-rule', - templateUrl: './add-rule.component.html', - styleUrls: ['./add-rule.component.scss'], -}) - -/** - * Add rule component. - */ -export class AddRuleComponent implements OnInit { - isLinear = false; - stepperOrientation: StepperOrientation = 'horizontal'; // vertical - saveEnabled: boolean = false; - lockEquals: boolean = false; - - executionIntervals: number[] = [30, 60, 240, 480, 720, 1440]; - sources: SourceAgentMetadata[] = []; - comparators: any[] = [ - { key: 'gt', value: 'greater than' }, - { key: 'lt', value: 'less than' }, - { key: 'eq', value: 'equals' }, - ]; - targets: TargetAgentMetadata[] = []; - - currentRuleName: string = ''; - currentRuleSourceAgentId: string = ''; - currentRuleSourceAgentDescription = EMPTY_SOURCE_AGENT_DESCRIPTION; - currentExecutionInterval = 30; - currentRuleConditionDataPoint: string = ''; - currentRuleConditionDataType: string; - currentRuleConditionValues?: string[]; - currentRuleConditionComparator: Comparator; - currentRuleConditionCompareValue: string | boolean | number; - currentTargetAgentId: string; - currentRuleTargets: RuleTargetAction[]; - currentRuleSourceParameters: Record = {}; - - @ViewChild('name', { static: true }) nameForm: NgForm; - @ViewChild('source', { static: true }) sourceForm: NgForm; - @ViewChild('condition', { static: true }) conditionForm: NgForm; - @ViewChild('executionInterval', { static: true }) - executionIntervalForm: NgForm; - - /** - * Constructor - * @param {UserService} userService - injected - * @param {Router} router - injected - * @param {MatDialog} dialog - */ - constructor( - private userService: UserService, - private readonly rulesService: RulesService, - private readonly agentsService: AgentsService, - private router: Router, - public dialog: MatDialog - ) { - // Watch save requirements - store.saveRequirements.subscribe((_) => { - this.saveEnabled = Object.values(store.saveRequirements.value).every( - (x) => x - ); - }); - - // Watch targets update - store.targets.subscribe((targets) => { - this.currentRuleTargets = targets; - }); - } - - // eslint-disable-next-line require-jsdoc - ngOnInit(): void { - // Watch name form changes - this.nameForm.form.valueChanges.subscribe((val) => { - const valid = !!this.nameForm.valid; - - store.saveRequirements.next({ - ...store.saveRequirements.value, - ...{ name: valid }, - }); - }); - - // Watch source form changes - this.sourceForm.form.valueChanges.subscribe((val) => { - const valid = !!this.sourceForm.valid; - - store.saveRequirements.next({ - ...store.saveRequirements.value, - ...{ source: valid }, - }); - }); - - // Watch executionInterval form changes - this.executionIntervalForm.form.valueChanges.subscribe((val) => { - const valid = !!this.executionIntervalForm.valid; - - store.saveRequirements.next({ - ...store.saveRequirements.value, - ...{ executionInterval: valid }, - }); - }); - - // Watch condition form changes - this.conditionForm.form.valueChanges.subscribe((val) => { - const valid = !!this.conditionForm.valid; - - store.saveRequirements.next({ - ...store.saveRequirements.value, - ...{ condition: valid }, - }); - }); - - this.agentsService.fetchAgentsMetadata(); - store.agents.subscribe((agentsDescription) => { - this.sources = agentsDescription.source; - this.targets = agentsDescription.target; - }); - } - - /** - * Get source agent by ID. - * - * @param {string} id - * @returns {SourceAgentDescription | undefined} - */ - getSourceAgent(id: string): SourceAgentMetadata | undefined { - return this.sources.find((source) => source.id === id); - } - - /** - * Get target agent by ID. - * - * @param {string} id - * @returns {TargetAgent | undefined} - */ - getTargetAgent(id: string): TargetAgentMetadata | undefined { - return this.targets.find((agent) => agent.id === id); - } - - /** - * Handle source change. - * - * @param {string} sourceAgentId - */ - onSourceChange(sourceAgentId: string) { - const agent = this.getSourceAgent(sourceAgentId); - - if (agent) { - this.currentRuleSourceAgentDescription = agent; - store.sourceSet.next(true); - - this.checkUserSettingsForAgent(agent.settings); - } - } - - /** - * Handle source change. - * - * @param {string} val - */ - onTargetChange(val: string) { - const agent = this.getTargetAgent(val); - - if (agent && agent.settings) { - this.checkUserSettingsForAgent(agent.settings); - } - } - - /** - * Handle dataPoint change. - * - * @param {DataPoint} val - */ - onDataPointChange(val: string) { - const dataPoint = this.currentRuleSourceAgentDescription!.dataPoints.find( - (dataPoint) => dataPoint.key === val - ); - if (dataPoint) { - this.currentRuleConditionDataPoint = val; - this.currentRuleConditionComparator = 'eq'; - this.currentRuleConditionDataType = dataPoint.type; - this.currentRuleConditionValues = undefined; - - if (dataPoint.type === 'boolean') { - this.lockEquals = true; - this.currentRuleConditionCompareValue = true; - } else if (dataPoint.values) { - this.lockEquals = true; - this.currentRuleConditionCompareValue = dataPoint.values[0]; - this.currentRuleConditionValues = dataPoint.values; - } else if (dataPoint.type === 'string') { - this.lockEquals = true; - this.currentRuleConditionCompareValue = ''; - } else { - this.lockEquals = false; - this.currentRuleConditionCompareValue = ''; - } - } - } - - /** - * Resets this form to its initial state - */ - reset() { - this.currentRuleName = ''; - this.currentRuleSourceAgentId = ''; - this.currentRuleSourceAgentDescription = EMPTY_SOURCE_AGENT_DESCRIPTION; - this.currentExecutionInterval = 30; - this.currentRuleConditionDataPoint = ''; - this.currentRuleConditionDataType = ''; - this.currentRuleConditionValues = undefined; - this.currentRuleConditionComparator = 'eq'; - this.currentRuleConditionCompareValue = ''; - this.currentTargetAgentId = ''; - this.currentRuleTargets = []; - this.currentRuleSourceParameters = {}; - - // Reset forms - this.conditionForm.resetForm(); - this.sourceForm.resetForm(); - this.executionIntervalForm.resetForm(); - } - - /** - * Save rule. - */ - saveRule() { - const rule: ModelSpec = { - ownerId: this.userService.loggedInUser.id, - name: this.currentRuleName, - executionInterval: this.currentExecutionInterval, - source: { - agentId: this.currentRuleSourceAgentId, - parameters: this.currentRuleSourceParameters, - }, - condition: { - dataPoint: this.currentRuleConditionDataPoint, - comparator: this.currentRuleConditionComparator, - compareValue: this.currentRuleConditionCompareValue, - }, - targets: this.currentRuleTargets, - }; - this.rulesService.addRule(rule); - - this.reset(); - - this.router.navigate(['/rules/list']); - } - - /** - * Checks missing settings required by an agent. - * @param {AgentSettingMetadata[]} settings? the agent's required settings - */ - private checkUserSettingsForAgent(settings?: AgentSettingMetadata[]) { - const missingSettings = settings?.filter( - (setting) => !this.userService.getSetting(setting.key) - ); - - if (missingSettings && missingSettings.length) { - this.dialog.open(MissingSettingsDialogComponent, { - data: missingSettings, - }); - } - } -} diff --git a/client/src/app/components/dash/dash.component.html b/client/src/app/components/dash/dash.component.html deleted file mode 100644 index b13f6f4..0000000 --- a/client/src/app/components/dash/dash.component.html +++ /dev/null @@ -1,47 +0,0 @@ - - -
-

Welcome {{ this.displayName }}

- - Overview - Total Rules - -

- {{ this.adsManaged }} Ads managed -

-

- {{ this.activeRules }} Active -

-

- {{ this.inactiveRules }} Inactive -

-

- {{ this.errorRules }} Errors -

- - - -
-
-
diff --git a/client/src/app/components/dash/dash.component.scss b/client/src/app/components/dash/dash.component.scss deleted file mode 100644 index 802d446..0000000 --- a/client/src/app/components/dash/dash.component.scss +++ /dev/null @@ -1,49 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -// dash css -.rule-stats { - width: 100%; -} - -:host { - .mat-card-subtitle { - padding-top: 20px; - padding-bottom: 20px; - font-size: large; - font-weight: 300; - } - - .rule-count { - font-style: bold; - font-size: x-large; - padding-right: 15px; - } - - .card-child { - width: 50%; - float: left; - padding: 20px; - } - .card-footer { - float: left; - width: 100%; - padding: 20px; - } - p { - font-size: medium; - } - .footer { - text-align: right; - } -} diff --git a/client/src/app/components/dash/dash.component.spec.ts b/client/src/app/components/dash/dash.component.spec.ts deleted file mode 100644 index f84bf66..0000000 --- a/client/src/app/components/dash/dash.component.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { DashComponent } from './dash.component'; - -describe('DashComponent', () => { - let component: DashComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [DashComponent], - }).compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(DashComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/client/src/app/components/dash/dash.component.ts b/client/src/app/components/dash/dash.component.ts deleted file mode 100644 index 2162b6b..0000000 --- a/client/src/app/components/dash/dash.component.ts +++ /dev/null @@ -1,69 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { HttpClient } from '@angular/common/http'; -import { Component, OnInit } from '@angular/core'; -import { Rule } from 'src/app/interfaces/rule'; -import { User } from 'src/app/interfaces/user'; -import { UserService } from 'src/app/services/user.service'; -import { store } from 'src/app/store'; - -@Component({ - selector: 'app-dash', - templateUrl: './dash.component.html', - styleUrls: ['./dash.component.scss'], -}) - -/** - * Dash Component. - */ -export class DashComponent implements OnInit { - displayName: string; - user: User; - rules: Rule[]; - activeRules: number = 0; - inactiveRules: number = 0; - errorRules: number = 0; - adsManaged: number = 420; - - /** - * Constructor. - * @param {UserService} userService - */ - constructor(private userService: UserService, private http: HttpClient) {} - - /** - * Init. - */ - ngOnInit(): void { - this.displayName = this.userService.loggedInUser.displayName!; - store.rules.subscribe((rules) => { - this.rules = rules; - this.calculateStats(this.rules); - }); - } - - /** - * Calculates statics to display on the dashboard. - * - * @param {Rule[]} rules - */ - calculateStats(rules: Rule[]) { - rules.forEach((rule) => { - this.activeRules += 1; - if (!rule.latestStatus?.success) { - this.errorRules += 1; - } - }); - } -} diff --git a/client/src/app/components/googleads-selector/googleads-selector.component.html b/client/src/app/components/googleads-selector/googleads-selector.component.html deleted file mode 100644 index 65c4a46..0000000 --- a/client/src/app/components/googleads-selector/googleads-selector.component.html +++ /dev/null @@ -1,98 +0,0 @@ - -
-
- - Account ID - - - - -
-
-
-

Select Ad Groups

- - - Refresh adGroups - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Status - - - - - Name{{ ad.name }}Campaign{{ ad.campaignName }}AdGroup Type - {{ ad.type | stringReplace: '_':' ' }} - Id{{ ad.id }}
- - - - -
diff --git a/client/src/app/components/googleads-selector/googleads-selector.component.scss b/client/src/app/components/googleads-selector/googleads-selector.component.scss deleted file mode 100644 index 7570c51..0000000 --- a/client/src/app/components/googleads-selector/googleads-selector.component.scss +++ /dev/null @@ -1,56 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -.ads-table > table { - width: 100%; -} - -.selected-rows { - background-color: #6e79b455; -} - -.mat-row .mat-cell { - border-bottom: 1px solid transparent; - border-top: 1px solid transparent; - cursor: pointer; -} - -.mat-header-cell { - font-size: large; - color: #6e79b4; -} - -.mat-row:hover .mat-cell { - border-color: #6e79b4; -} - -.adgroup-enabled { - color: yellowgreen; -} - -.adgroup-paused { - color: dimgrey; -} - -.mat-column-status { - font-size: large; - text-align: center; -} - -.refresh { - cursor: pointer; -} - -.refresh fa-icon { - margin-left: 15px; -} diff --git a/client/src/app/components/googleads-selector/googleads-selector.component.spec.ts b/client/src/app/components/googleads-selector/googleads-selector.component.spec.ts deleted file mode 100644 index fba0539..0000000 --- a/client/src/app/components/googleads-selector/googleads-selector.component.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { GoogleAdsSelectorComponent } from './googleads-selector.component'; - -describe('GoogleAdsSelectorComponent', () => { - let component: GoogleAdsSelectorComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [GoogleAdsSelectorComponent], - }).compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(GoogleAdsSelectorComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/client/src/app/components/googleads-selector/googleads-selector.component.ts b/client/src/app/components/googleads-selector/googleads-selector.component.ts deleted file mode 100644 index 4778098..0000000 --- a/client/src/app/components/googleads-selector/googleads-selector.component.ts +++ /dev/null @@ -1,154 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { HttpClient } from '@angular/common/http'; -import { AfterViewInit, Component, ViewChild } from '@angular/core'; -import { FormBuilder, FormGroup } from '@angular/forms'; -import { MatPaginator } from '@angular/material/paginator'; -import { MatTableDataSource } from '@angular/material/table'; -import { - faCircle, - faCirclePause, - faRefresh, -} from '@fortawesome/free-solid-svg-icons'; -import { map } from 'rxjs/operators'; -import { RuleTargetAction } from 'src/app/interfaces/rule'; -import { store } from 'src/app/store'; -import { environment } from 'src/environments/environment'; - -interface AdGroup { - customerId: string; - campaignId: string; - campaignName: string; - id: string; - name: string; - type: string; - status: string; -} - -const ACCOUNT_ID_IDENITFIER = 'accountId'; - -@Component({ - selector: 'app-googleads-selector', - templateUrl: './googleads-selector.component.html', - styleUrls: ['./googleads-selector.component.scss'], -}) -/** - * Google ad groups selector component - */ -export class GoogleAdsSelectorComponent implements AfterViewInit { - adGroupEnabled = faCircle; - adGroupDisabled = faCirclePause; - faRefresh = faRefresh; - isLoading = false; - account: FormGroup; - accountId: string; - adGroups: AdGroup[] = []; - displayedColumns: string[] = ['status', 'name', 'campaignName', 'type', 'id']; - selectedRows = new Set(); - dataSource = new MatTableDataSource(this.adGroups); - @ViewChild(MatPaginator) paginator!: MatPaginator; - - /** - * Constructor: Http client gets injected. - * - * @param {HttpClient} http Http client - */ - constructor(private http: HttpClient, private formBuilder: FormBuilder) { - const group: { [key: string]: string } = {}; - group[ACCOUNT_ID_IDENITFIER] = ''; - this.account = this.formBuilder.group(group); - } - - // eslint-disable-next-line require-jsdoc - ngAfterViewInit() { - this.dataSource.paginator = this.paginator; - } - - /** - * Fetch Google ads data to display - */ - onSubmit() { - this.accountId = this.account.value[ACCOUNT_ID_IDENITFIER]; - - this.fetchAccountData(); - } - - /** - * Handle select row click event. - * - * @param {AdGroup} r Clicked row - */ - selectRow(r: AdGroup) { - if (this.selectedRows.has(r)) { - this.selectedRows.delete(r); - } else { - this.selectedRows.add(r); - } - const targetAgentActions = this.transformToActions(this.selectedRows); - store.targets.next(targetAgentActions); - - // Update save requirements - const valid = this.selectedRows.size > 0; - store.saveRequirements.next({ - ...store.saveRequirements.value, - ...{ target: valid }, - }); - } - - /** - * Transform user selection into a TargetAgent object. - * - * @param {Set} userSelection - * @returns {TargetAgent} TargetAgent Object - */ - private transformToActions(userSelection: Set): RuleTargetAction[] { - const actions: RuleTargetAction[] = [...userSelection].map((row) => ({ - agentId: 'google-ads', - action: 'ACTIVATE', - parameters: { - customerAccountId: row.customerId, - adGroupId: row.id, - }, - })); - return actions; - } - - /** - * Refresh ad groups. - */ - refreshAdGroups() { - this.isLoading = true; - this.fetchAccountData(); - } - - /** - * Fetch Google Ads account data. - */ - private fetchAccountData() { - this.isLoading = true; - this.http - .get(`${environment.apiUrl}/agents/google-ads/list/adgroup`, { - params: { - customerAccountId: this.accountId, - }, - }) - .pipe(map((res: AdGroup[]) => res)) - .subscribe((adGroups) => { - this.adGroups = adGroups; - this.dataSource.data = this.adGroups; - this.dataSource.paginator = this.paginator; - this.isLoading = false; - }); - } -} diff --git a/client/src/app/components/header/header.component.html b/client/src/app/components/header/header.component.html deleted file mode 100644 index 2352087..0000000 --- a/client/src/app/components/header/header.component.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - If This Then Ad - - - - - - - - - - - - -
-
-
- -
-
-
diff --git a/client/src/app/components/header/header.component.scss b/client/src/app/components/header/header.component.scss deleted file mode 100644 index 86ecece..0000000 --- a/client/src/app/components/header/header.component.scss +++ /dev/null @@ -1,82 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -.header { - position: fixed; - z-index: 1000; -} - -.spacer { - flex: 1 1 auto; -} - -.avatar-wrapper { - display: flex; - justify-content: center; - align-items: center; -} - -.avatar { - height: 25px; - width: 25px; - border-radius: 50%; - background-size: 100%; - background-size: cover; -} - -.avatar-big { - height: 75px; - width: 75px; -} - -.avatar-wrapper-padding { - padding: 10px 10px; -} - -.centered-content { - justify-content: center; - align-items: center; - width: 100%; - display: flex; -} - -.user-info { - margin: 15px; -} - -.email { - font-size: 14px; -} - -.name { - font-size: 16px; -} - -.logout, -.settings { - padding-top: 15px; -} - -.menu-links { - display: none; -} - -fa-icon { - margin-right: 5px; -} - -@media only screen and (min-width: 768px) { - .menu-links { - display: block; - } -} diff --git a/client/src/app/components/header/header.component.spec.ts b/client/src/app/components/header/header.component.spec.ts deleted file mode 100644 index 367a569..0000000 --- a/client/src/app/components/header/header.component.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { HeaderComponent } from './header.component'; - -describe('HeaderComponent', () => { - let component: HeaderComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [HeaderComponent], - }).compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(HeaderComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/client/src/app/components/header/header.component.ts b/client/src/app/components/header/header.component.ts deleted file mode 100644 index 5352d9c..0000000 --- a/client/src/app/components/header/header.component.ts +++ /dev/null @@ -1,60 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { Component, OnInit } from '@angular/core'; -import { faGear } from '@fortawesome/free-solid-svg-icons'; -import { User } from 'src/app/interfaces/user'; - -import { AuthService } from 'src/app/services/auth.service'; -import { UserService } from 'src/app/services/user.service'; -import { store } from 'src/app/store'; - -@Component({ - selector: 'app-header', - templateUrl: './header.component.html', - styleUrls: ['./header.component.scss'], -}) - -/** - * Header component. - */ -export class HeaderComponent implements OnInit { - user?: User; - faGear = faGear; - - /** - * Constructor. - * - * @param {AuthService} authService - * @param {UserService} userService - */ - constructor( - public authService: AuthService, - public userService: UserService - ) {} - - // eslint-disable-next-line require-jsdoc - ngOnInit(): void { - // Get user's profile picture - this.userService.userWatch.subscribe((user?: User) => { - this.user = user; - }); - } - - /** - * Toggle sidenav. - */ - toggleSidenav() { - store.sidenav.next(true); - } -} diff --git a/client/src/app/components/location-auto-complete/config.ts b/client/src/app/components/location-auto-complete/config.ts deleted file mode 100644 index 60a8bec..0000000 --- a/client/src/app/components/location-auto-complete/config.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -export const config = { - apiUrl: 'https://maps.googleapis.com/maps/api/js?libraries=places&key=', -}; diff --git a/client/src/app/components/location-auto-complete/location-auto-complete.component.html b/client/src/app/components/location-auto-complete/location-auto-complete.component.html deleted file mode 100644 index 008aec4..0000000 --- a/client/src/app/components/location-auto-complete/location-auto-complete.component.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - diff --git a/client/src/app/components/location-auto-complete/location-auto-complete.component.scss b/client/src/app/components/location-auto-complete/location-auto-complete.component.scss deleted file mode 100644 index cf15541..0000000 --- a/client/src/app/components/location-auto-complete/location-auto-complete.component.scss +++ /dev/null @@ -1,21 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -span { - opacity: 0; - transition: opacity 200ms; -} - -:host.floating span { - opacity: 1; -} diff --git a/client/src/app/components/location-auto-complete/location-auto-complete.component.spec.ts b/client/src/app/components/location-auto-complete/location-auto-complete.component.spec.ts deleted file mode 100644 index 115aef3..0000000 --- a/client/src/app/components/location-auto-complete/location-auto-complete.component.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { LocationAutoComplete } from './location-auto-complete.component'; - -describe('InputGeoComponent', () => { - let component: LocationAutoComplete; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [LocationAutoComplete], - }).compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(LocationAutoComplete); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/client/src/app/components/location-auto-complete/location-auto-complete.component.ts b/client/src/app/components/location-auto-complete/location-auto-complete.component.ts deleted file mode 100644 index 2f730fa..0000000 --- a/client/src/app/components/location-auto-complete/location-auto-complete.component.ts +++ /dev/null @@ -1,353 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { - Component, - Input, - Output, - EventEmitter, - HostBinding, - Optional, - Self, - ViewChild, - ElementRef, - Inject, -} from '@angular/core'; -import { FormGroup, NgControl, FormBuilder } from '@angular/forms'; -import { MatFormFieldControl } from '@angular/material/form-field'; -import { Subject } from 'rxjs'; -import { coerceBooleanProperty } from '@angular/cdk/coercion'; -import { HttpClient } from '@angular/common/http'; -import { DOCUMENT } from '@angular/common'; - -import { config } from './config'; -import { UserService } from 'src/app/services/user.service'; -declare const google: any; - -@Component({ - selector: 'app-location-auto-complete', - templateUrl: './location-auto-complete.component.html', - styleUrls: ['./location-auto-complete.component.scss'], - providers: [ - { provide: MatFormFieldControl, useExisting: LocationAutoComplete }, - ], -}) - -/** - * Location auto completion component. - */ -export class LocationAutoComplete implements MatFormFieldControl { - @Input() dataPoint: string | undefined; - @Input() value: string; - @ViewChild('geoInput') geoInput: ElementRef; - - targetLocationValue: string | number | undefined = ''; - @Output() targetLocationChange = new EventEmitter(); - - geoForm: FormGroup; - static scriptIsLoaded = false; - - // START: Implementing the MatFormFieldControl interface - private _disabled = false; - private _placeholder: string; - private _required = false; - focused = false; - touched = false; - - controlType = 'location-auto-complete'; - static nextId = 0; - @HostBinding() id = `${this.controlType}-${LocationAutoComplete.nextId++}`; - stateChanges = new Subject(); - - /** - * Constructor. - * - * @param {FormBuilder} fb - * @param {NgControl} ngControl - * @param {HttpClient} http - * @param {UserService} userService - * @param {Document} document - */ - constructor( - fb: FormBuilder, - @Optional() @Self() public ngControl: NgControl, - private http: HttpClient, - private userService: UserService, - @Inject(DOCUMENT) private document: Document - ) { - this.geoForm = fb.group({ - targetLocation: '', - }); - } - - /** - * Get placeholder. - * - * @returns {string} - */ - @Input() - get placeholder() { - return this._placeholder; - } - - /** - * Set placeholder. - * - * @param {string} plh - */ - set placeholder(plh: string) { - this._placeholder = plh; - this.stateChanges.next(); - } - - /** - * Focus in handler. - * - * @param {FocusEvent} event - */ - onFocusIn(event: FocusEvent) { - if (!this.focused) { - this.focused = true; - this.stateChanges.next(); - } - } - - /** - * Focus out handler. - * - * @param {FocusEvent} event - */ - onFocusOut(event: FocusEvent) { - this.touched = true; - this.focused = false; - this.stateChanges.next(); - } - - /** - * Check for empty geo input. - * - * @returns {boolean} - */ - get empty() { - return !this.geoInput?.nativeElement.value; - } - - /** - * Check for floating label. - * - * @returns {boolean} - */ - @HostBinding('class.floating') - get shouldLabelFloat() { - return this.focused || !this.empty; - } - - /** - * Get required. - * - * @returns {string} - */ - @Input() - get required() { - return this._required; - } - - /** - * Set required. - * - * @param {boolean} req - */ - set required(req) { - this._required = coerceBooleanProperty(req); - this.stateChanges.next(); - } - - /** - * Get disabled. - * - * @returns {boolean} - */ - @Input() - get disabled(): boolean { - return this._disabled; - } - - /** - * Set disabled. - * - * @param {boolean} value - */ - set disabled(value: boolean) { - this._disabled = coerceBooleanProperty(value); - this.stateChanges.next(); - } - - /** - * Get error state - */ - get errorState(): boolean { - return !this.geoInput?.nativeElement.value && this.touched; - } - - /** - * Set described by IDs. - */ - setDescribedByIds() {} - - /** - * Container click handler. - */ - onContainerClick() {} - // END: Implementing the MatFormFieldControl interface - - /** - * Get target location. - * - * @returns {string|number|undefined} - */ - @Input() - get targetLocation() { - return this.targetLocationValue; - } - - /** - * Set target location value. - * - * @param {string|number|undefined} value - */ - set targetLocation(value: string | number | undefined) { - this.targetLocationValue = value; - this.targetLocationChange.emit(this.targetLocationValue as string); - this.stateChanges.next(); - } - - /** - * After view init. - */ - ngAfterViewInit(): void { - this.initGeoSearch(); - } - - /** - * Init geo search. - */ - private async initGeoSearch() { - const apiKey = this.userService.getSetting('GOOGLEMAPS_API_KEY'); - if (apiKey) { - const url = config.apiUrl + apiKey; - this.getScriptOnce(url, () => { - this.setGeoListener(); - }); - } - } - - /** - * Load script. - * - * @param {string} url - * @param {Function} callback - */ - private getScriptOnce(url: string, callback: Function) { - if (LocationAutoComplete.scriptIsLoaded) { - callback(); - } else { - const script = this.document.createElement('script'); - script.innerHTML = ''; - script.src = url; - script.async = true; - script.defer = true; - script.onload = () => { - callback(); - }; - this.document.head.appendChild(script); - - LocationAutoComplete.scriptIsLoaded = true; - } - } - - /** - * Set geo listener. - */ - private setGeoListener() { - const currentInput = this.geoInput.nativeElement; - const autocomplete = new google.maps.places.Autocomplete(currentInput); - - autocomplete.setFields(['address_components', 'name']); - - autocomplete.addListener('place_changed', () => { - const place = autocomplete.getPlace(); - const currentAddress = this.getFormattedAddress(place); - - currentInput.value = currentAddress; - this.targetLocation = currentAddress; - }); - } - - /** - * Get formatted address - * @param {any} place - * @returns {string} - */ - private getFormattedAddress(place: any): string { - let locality = ''; - let country = ''; - for (const component of place.address_components) { - switch (component.types[0]) { - case 'locality': - locality = component.long_name; - break; - - case 'country': - country = component.long_name; - break; - } - } - - return (locality ? `${locality}, ` : '') + country; - } - - /** - * Check if iterable. - * - * @param {any} a - * @returns {boolean} - */ - private isIterable(a: any) { - return a != null && Symbol.iterator in Object(a); - } - - /** - * Get API key from user settings. - * - * @param {string} name - * @returns {any} - */ - private getApiKey(name: string) { - const settings = (this.userService as any)?.currentUser.settings; - if (this.isIterable(settings)) { - // eslint-disable-next-line guard-for-in - for (const s in settings) { - const param = settings[s]?.params; - if (this.isIterable(param)) { - for (const p in param) { - if ('key' in (param[p] as Object) && name == param[p].key) { - return param[p].value; - } - } - } - } - } - - return ''; - } -} diff --git a/client/src/app/components/login/login.component.html b/client/src/app/components/login/login.component.html deleted file mode 100644 index f876345..0000000 --- a/client/src/app/components/login/login.component.html +++ /dev/null @@ -1,21 +0,0 @@ - - -
- - - - -
diff --git a/client/src/app/components/login/login.component.scss b/client/src/app/components/login/login.component.scss deleted file mode 100644 index 4470065..0000000 --- a/client/src/app/components/login/login.component.scss +++ /dev/null @@ -1,46 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -.wrapper { - height: 100%; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; -} - -.brand { - margin-top: 2.5rem; - margin-bottom: 1.5rem; - font-size: 2rem; - font-family: Verdana, Geneva, Tahoma, sans-serif; - letter-spacing: 5px; -} - -.login { - width: 191px; - height: 46px; - background: url('/assets/img/btn_google_signin_dark_normal_web.png'); - background-size: 100%; - background-repeat: no-repeat; - border: none; - cursor: pointer; - - &:active { - background: url('/assets/img/btn_google_signin_dark_pressed_web.png'); - } - - &:disabled { - background: url('/assets/img/btn_google_signin_dark_disabled_web.png'); - } -} diff --git a/client/src/app/components/login/login.component.spec.ts b/client/src/app/components/login/login.component.spec.ts deleted file mode 100644 index 63a1643..0000000 --- a/client/src/app/components/login/login.component.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { LoginComponent } from './login.component'; - -describe('LoginComponent', () => { - let component: LoginComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [LoginComponent], - }).compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(LoginComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/client/src/app/components/login/login.component.ts b/client/src/app/components/login/login.component.ts deleted file mode 100644 index b391473..0000000 --- a/client/src/app/components/login/login.component.ts +++ /dev/null @@ -1,63 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { Component, OnInit } from '@angular/core'; -import { ActivatedRoute, Router } from '@angular/router'; -import { User } from 'src/app/interfaces/user'; - -import { AuthService } from 'src/app/services/auth.service'; -import { UserService } from 'src/app/services/user.service'; - -@Component({ - selector: 'app-login', - templateUrl: './login.component.html', - styleUrls: ['./login.component.scss'], -}) - -/** - * Login component. - */ -export class LoginComponent implements OnInit { - bannerImage = 'assets/img/iftta-banner.png'; - - /** - * Constructor. - * - * @param {Router} router - * @param {ActivatedRoute} route - * @param {AuthService} authService - * @param {UserService} userService - */ - constructor( - private router: Router, - private route: ActivatedRoute, - public authService: AuthService, - private userService: UserService - ) {} - - /** - * Handle login if user is in query params. - */ - ngOnInit() { - const userString = this.route.snapshot.queryParamMap.get('user'); - - if (userString) { - const user = JSON.parse(userString) as User; - this.userService.updateUser(user); - - // Redirect user to where they came from - const returnTo = this.route.snapshot.queryParamMap.get('returnTo') || ''; - this.router.navigate([returnTo]); - } - } -} diff --git a/client/src/app/components/missing-settings-dialog/missing-settings-dialog.component.html b/client/src/app/components/missing-settings-dialog/missing-settings-dialog.component.html deleted file mode 100644 index 9f96285..0000000 --- a/client/src/app/components/missing-settings-dialog/missing-settings-dialog.component.html +++ /dev/null @@ -1,36 +0,0 @@ - - -

WARNING: Missing User Settings

- - You are missing the following settings for this rule type: -
    -
  • - {{ setting.key }} ({{ setting.name }}) -
  • -
- Note: You can add the missing settings later, but your rules won't - work. -
- - - - diff --git a/client/src/app/components/missing-settings-dialog/missing-settings-dialog.component.scss b/client/src/app/components/missing-settings-dialog/missing-settings-dialog.component.scss deleted file mode 100644 index 7864e0e..0000000 --- a/client/src/app/components/missing-settings-dialog/missing-settings-dialog.component.scss +++ /dev/null @@ -1,13 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - diff --git a/client/src/app/components/missing-settings-dialog/missing-settings-dialog.component.spec.ts b/client/src/app/components/missing-settings-dialog/missing-settings-dialog.component.spec.ts deleted file mode 100644 index e11a0db..0000000 --- a/client/src/app/components/missing-settings-dialog/missing-settings-dialog.component.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { MissingSettingsDialogComponent } from './missing-settings-dialog.component'; - -describe('MissingSettingsDialogComponent', () => { - let component: MissingSettingsDialogComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [MissingSettingsDialogComponent], - }).compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(MissingSettingsDialogComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/client/src/app/components/missing-settings-dialog/missing-settings-dialog.component.ts b/client/src/app/components/missing-settings-dialog/missing-settings-dialog.component.ts deleted file mode 100644 index 0e05fd8..0000000 --- a/client/src/app/components/missing-settings-dialog/missing-settings-dialog.component.ts +++ /dev/null @@ -1,47 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { Component, Inject } from '@angular/core'; -import { MAT_DIALOG_DATA } from '@angular/material/dialog'; -import { Router } from '@angular/router'; -import { AgentSettingMetadata } from '../../interfaces/common'; - -@Component({ - selector: 'missing-settings-dialog', - templateUrl: './missing-settings-dialog.component.html', - styleUrls: ['./missing-settings-dialog.component.scss'], -}) - -/** - * User Settings Dialog Component. - */ -export class MissingSettingsDialogComponent { - /** - * Component constructor. - * - * @param {AgentSettingMetadata[]} settings - * @param {Router} router - */ - constructor( - @Inject(MAT_DIALOG_DATA) public settings: AgentSettingMetadata[], - private router: Router - ) {} - - /** - * Navigate to user settings. - */ - goToUserSettings() { - const fragment = this.settings.map((s) => s.name).join(','); - this.router.navigate(['/settings'], { fragment }); - } -} diff --git a/client/src/app/components/rules-status/rules.status.component.html b/client/src/app/components/rules-status/rules.status.component.html deleted file mode 100644 index a069a05..0000000 --- a/client/src/app/components/rules-status/rules.status.component.html +++ /dev/null @@ -1,79 +0,0 @@ - -
-

Execution Status

- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Status - - - - Rule name{{ rule.name }}Source{{ rule.source }}Last exec. - {{ - rule.status ? (rule.lastExecution | date: 'medium') : 'Not executed' - }} - Message{{ rule.message }}
- - - - -
diff --git a/client/src/app/components/rules-status/rules.status.component.scss b/client/src/app/components/rules-status/rules.status.component.scss deleted file mode 100644 index afcaed7..0000000 --- a/client/src/app/components/rules-status/rules.status.component.scss +++ /dev/null @@ -1,65 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -.wrapper { - margin-top: 2rem; - width: 100%; - display: flex; - flex-direction: column; - align-items: center; -} - -.table { - width: 100%; -} - -.paginator { - width: 100%; -} - -th.mat-header-cell { - text-align: left; - padding: 15px; - font-size: medium; -} - -td { - margin: 20px; -} - -.mat-column-status { - width: 7%; -} - -.mat-column-message { - word-wrap: break-word; - min-width: 40%; -} - -.fa-lg { - font-size: 1.5em; - line-height: 0.05em; - vertical-align: -0.075em; -} - -.error-icon { - color: red !important; -} - -.success-icon { - color: #3a9e07 !important; -} - -.unknown-status-icon { - color: #cccccc !important; -} diff --git a/client/src/app/components/rules-status/rules.status.component.spec.ts b/client/src/app/components/rules-status/rules.status.component.spec.ts deleted file mode 100644 index 0e86c0b..0000000 --- a/client/src/app/components/rules-status/rules.status.component.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { RulesStatusComponent } from './rules.status.component'; - -describe('RulesComponent', () => { - let component: RulesStatusComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [RulesStatusComponent], - }).compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(RulesStatusComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/client/src/app/components/rules-status/rules.status.component.ts b/client/src/app/components/rules-status/rules.status.component.ts deleted file mode 100644 index 9e2286c..0000000 --- a/client/src/app/components/rules-status/rules.status.component.ts +++ /dev/null @@ -1,111 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { HttpClient } from '@angular/common/http'; -import { AfterViewInit, Component, OnInit, ViewChild } from '@angular/core'; -import { MatPaginator } from '@angular/material/paginator'; -import { MatTableDataSource } from '@angular/material/table'; -import { - faCircleCheck, - faQuestion, - faTriangleExclamation, -} from '@fortawesome/free-solid-svg-icons'; -import { AgentsMetadata } from 'src/app/interfaces/api'; -import { Rule } from 'src/app/interfaces/rule'; -import { UserService } from 'src/app/services/user.service'; -import { store } from 'src/app/store'; - -interface RulesDataSourceItem { - status?: string; - name: string; - source: string; - lastExecution?: Date; - message?: string; -} - -@Component({ - selector: 'app-rules-status', - templateUrl: './rules.status.component.html', - styleUrls: ['./rules.status.component.scss'], -}) - -/** - * Rules component. - */ -export class RulesStatusComponent implements AfterViewInit, OnInit { - errorIcon = faTriangleExclamation; - successIcon = faCircleCheck; - unknownStatusIcon = faQuestion; - columnHeaders: string[] = [ - 'status', - 'name', - 'source', - 'lastExecution', - 'message', - ]; - dataSource = new MatTableDataSource([]); - @ViewChild(MatPaginator) paginator!: MatPaginator; - - agentsMetadata: AgentsMetadata; - - /** - * Constructor. - * - * @param {HttpClient} http - */ - constructor(private http: HttpClient, private userService: UserService) {} - - /** - * @inheritdoc - */ - ngOnInit(): void { - store.agents.subscribe((agentsMetadata) => { - this.agentsMetadata = agentsMetadata; - }); - - store.rules.subscribe((rules) => { - this.dataSource.data = this.createRulesDataSource(rules); - }); - } - - // eslint-disable-next-line require-jsdoc - ngAfterViewInit() { - this.dataSource.paginator = this.paginator; - } - - /** - * Transforms a set of rules into a table data source. - * @param {Rule[]} rules the rules to display - * @returns {RulesDataSourceItem[]} - */ - private createRulesDataSource(rules: Rule[]): RulesDataSourceItem[] { - return rules.map((rule) => { - const sourceAgentMetadata = this.agentsMetadata.source?.find( - (agentMetadata) => agentMetadata.id === rule.source.agentId - ); - const status = rule.latestStatus - ? rule.latestStatus.success - ? 'success' - : 'failed' - : undefined; - - return { - status, - name: rule.name, - source: sourceAgentMetadata?.name ?? '[Unknown source]', - lastExecution: rule.latestStatus?.lastExecution, - message: rule.latestStatus?.error, - }; - }); - } -} diff --git a/client/src/app/components/rules/rules.component.html b/client/src/app/components/rules/rules.component.html deleted file mode 100644 index c60d451..0000000 --- a/client/src/app/components/rules/rules.component.html +++ /dev/null @@ -1,124 +0,0 @@ - - -
-

All Rules

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Status - - - - Name{{ rule.name }}Source{{ rule.source.agentName }}Type{{ rule.condition.name }}Comparator - {{ rule.condition.comparator }} - Value{{ rule.condition.value }}Interval - {{ rule.executionInterval | intervalFormat }} - Last execustion - {{ - rule.status - ? (rule.latestStatus?.lastExecution | date: 'medium') - : 'Not executed' - }} - Execution Info -
- {{ - rule?.latestStatus?.error?.length > 30 - ? rule?.status?.error.slice(0, 30) + '...' - : rule?.status?.error - }} -
-
Actions - -
- - - - -
diff --git a/client/src/app/components/rules/rules.component.scss b/client/src/app/components/rules/rules.component.scss deleted file mode 100644 index e200d77..0000000 --- a/client/src/app/components/rules/rules.component.scss +++ /dev/null @@ -1,51 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -.wrapper { - margin-top: 2rem; - width: 100%; - display: flex; - flex-direction: column; - align-items: center; -} - -.table { - width: 100%; -} - -.paginator { - width: 100%; -} - -.error-icon { - color: #f44336; -} - -[data-full-message] { - position: relative; - cursor: help; -} - -[data-full-message]:hover::before { - content: attr(data-full-message); - position: absolute; - bottom: -46px; - padding: 10px; - background: #3f51b5; - color: #fff; - font-size: 14px; - white-space: nowrap; - z-index: 100000; - box-shadow: 0px 3px 1px -2px rgb(0 0 0 / 20%), 0px 2px 2px 0px rgb(0 0 0 / 14%), 0px 1px 5px 0px rgb(0 0 0 / 12%); - border-radius: 5px; -} \ No newline at end of file diff --git a/client/src/app/components/rules/rules.component.spec.ts b/client/src/app/components/rules/rules.component.spec.ts deleted file mode 100644 index f5f6b9a..0000000 --- a/client/src/app/components/rules/rules.component.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { RulesComponent } from './rules.component'; - -describe('RulesComponent', () => { - let component: RulesComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [RulesComponent], - }).compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(RulesComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/client/src/app/components/rules/rules.component.ts b/client/src/app/components/rules/rules.component.ts deleted file mode 100644 index 6babfa9..0000000 --- a/client/src/app/components/rules/rules.component.ts +++ /dev/null @@ -1,155 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { HttpClient } from '@angular/common/http'; -import { AfterViewInit, Component, OnInit, ViewChild } from '@angular/core'; -import { MatPaginator } from '@angular/material/paginator'; -import { MatTableDataSource } from '@angular/material/table'; -import { - faCircleCheck, - faQuestion, - faTriangleExclamation, -} from '@fortawesome/free-solid-svg-icons'; -import { combineLatestWith } from 'rxjs'; -import { AgentsMetadata } from 'src/app/interfaces/api'; -import { Rule, RuleStatus } from 'src/app/interfaces/rule'; -import { RulesService } from 'src/app/services/rules.service'; -import { UserService } from 'src/app/services/user.service'; -import { store } from 'src/app/store'; - -interface RulesDataSourceItem { - id: string; - latestStatus?: RuleStatus; - name: string; - executionInterval: number; - source: { - agentId: string; - agentName: string; - }; - condition: { - dataPoint?: string; - comparator: string; - value: string | number | boolean; - }; -} - -@Component({ - selector: 'app-rules', - templateUrl: './rules.component.html', - styleUrls: ['./rules.component.scss'], -}) - -/** - * Rules component. - */ -export class RulesComponent implements AfterViewInit, OnInit { - dataSource = new MatTableDataSource([]); - columnHeaders = [ - 'status', - 'name', - 'source', - 'type', - 'comparator', - 'value', - 'interval', - 'lastExecution', - 'message', - 'actions', - ]; - - errorIcon = faTriangleExclamation; - successIcon = faCircleCheck; - unknownStatusIcon = faQuestion; - - @ViewChild(MatPaginator) paginator!: MatPaginator; - - /** - * Constructor. - * - * @param {HttpClient} http - */ - constructor( - private readonly http: HttpClient, - private readonly userService: UserService, - private readonly rulesService: RulesService - ) {} - - /** - * @inheritdoc - */ - ngOnInit(): void { - store.rules - .pipe(combineLatestWith(store.agents)) - .subscribe(([rules, agentsMetadata]) => { - this.dataSource.data = this.createRulesDataSource( - rules, - agentsMetadata - ); - }); - this.rulesService.fetchRulesForCurrentUser(); - } - - /** - * Transforms rules into a table data source. - * @param {Rule[]} rules the rules - * @param {AgentsMetadata} agentsMetadata the agent metadata - * @returns {RulesDataSourceItem[]} the table data source - */ - private createRulesDataSource( - rules: Rule[], - agentsMetadata: AgentsMetadata - ): RulesDataSourceItem[] { - return rules.map((rule) => { - const sourceAgentMetadata = agentsMetadata?.source.find( - (agentMetadata) => agentMetadata.id === rule.source.agentId - ); - const sourceDataPointMetadata = sourceAgentMetadata?.dataPoints.find( - (dataPointMetadata) => - (dataPointMetadata.key = rule.condition.dataPoint) - ); - return { - id: rule.id, - latestStatus: rule.latestStatus, - name: rule.name, - executionInterval: rule.executionInterval, - source: { - agentId: rule.source.agentId, - agentName: sourceAgentMetadata?.name ?? '[Unknown agent]', - }, - condition: { - dataPoint: sourceDataPointMetadata?.name, - comparator: this.rulesService.getComparatorLabel( - rule.condition.comparator - ), - value: rule.condition.compareValue, - }, - }; - }); - } - - /** - * @inheritdoc - */ - ngAfterViewInit() { - this.dataSource.paginator = this.paginator; - } - - /** - * Delete rule. - * - * @param {Rule} rule - */ - removeRule(rule: Rule) { - this.rulesService.deleteRule(rule.id); - } -} diff --git a/client/src/app/components/target-selector/target-selector.component.html b/client/src/app/components/target-selector/target-selector.component.html deleted file mode 100644 index 544d6af..0000000 --- a/client/src/app/components/target-selector/target-selector.component.html +++ /dev/null @@ -1,81 +0,0 @@ - - -
- - - - - - - {{ node.name }} - - - {{ node.name }} - - - - - - - - - - - - {{ node.name }} - - - {{ node.name }} - - - - - - -
diff --git a/client/src/app/components/target-selector/target-selector.component.scss b/client/src/app/components/target-selector/target-selector.component.scss deleted file mode 100644 index 24bd4d2..0000000 --- a/client/src/app/components/target-selector/target-selector.component.scss +++ /dev/null @@ -1,25 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -.mat-form-field { - margin-right: 4px; -} - -.example-tree-progress-bar { - margin-left: 30px; -} - -.wrapper { - display: flex; - flex-direction: column; -} diff --git a/client/src/app/components/target-selector/target-selector.component.spec.ts b/client/src/app/components/target-selector/target-selector.component.spec.ts deleted file mode 100644 index aa148f1..0000000 --- a/client/src/app/components/target-selector/target-selector.component.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { TargetSelectorComponent } from './target-selector.component'; - -describe('TargetSelectorDebugComponent', () => { - let component: TargetSelectorComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [TargetSelectorComponent], - }).compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(TargetSelectorComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/client/src/app/components/target-selector/target-selector.component.ts b/client/src/app/components/target-selector/target-selector.component.ts deleted file mode 100644 index f6b8b5d..0000000 --- a/client/src/app/components/target-selector/target-selector.component.ts +++ /dev/null @@ -1,289 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { SelectionModel } from '@angular/cdk/collections'; -import { FlatTreeControl } from '@angular/cdk/tree'; -import { Component } from '@angular/core'; -import { RuleTargetAction } from 'src/app/interfaces/rule'; - -import { DynamicDataSource } from 'src/app/models/dynamic-data-source.model'; -import { DynamicDatabase } from 'src/app/models/dynamic-database.model'; -import { TargetEntityTreeNode } from 'src/app/models/entity-node.model'; -import { store } from 'src/app/store'; - -/** - * @title Tree with dynamic data - */ -@Component({ - selector: 'app-target-selector', - templateUrl: './target-selector.component.html', - styleUrls: ['./target-selector.component.scss'], -}) - -/** - * Target Selector component. - */ -export class TargetSelectorComponent { - treeControl: FlatTreeControl; - dataSource: DynamicDataSource; - allowSelectionBubbling: boolean = false; - - // The selection for checklist - checklistSelection = new SelectionModel( - true /* multiple */ - ); - - /** - * Constructor. - * - * @param {DynamicDatabase} database - */ - constructor(private database: DynamicDatabase) { - this.treeControl = new FlatTreeControl( - this.getLevel, - this.isExpandable - ); - this.dataSource = new DynamicDataSource(this.treeControl, database); - - // Initialize data source - this.init(); - - store.ruleAdded.subscribe((added) => { - this.init(); - }); - } - - /** - * Initialize data source. - */ - init(): void { - this.dataSource.data = this.database.initialData(); - } - - /** - * Get node level. - * - * @param {TargetEntityTreeNode} node - * @returns {number} - */ - getLevel(node: TargetEntityTreeNode): number { - return node.level; - } - - /** - * Check if node is expandable. - * - * @param {TargetEntityTreeNode} node - * @returns {boolean} - */ - isExpandable(node: TargetEntityTreeNode): boolean { - return node.expandable; - } - - /** - * Check if node has children. - * - * @param {number} _ - * @param {TargetEntityTreeNode} _nodeData - * @returns {boolean} - */ - hasChild(_: number, _nodeData: TargetEntityTreeNode): boolean { - return _nodeData.expandable; - } - - /** - * Check whether all the descendants of the node are selected. - * - * @param {TargetEntityTreeNode} node - * @returns {boolean} - */ - descendantsAllSelected(node: TargetEntityTreeNode): boolean { - const descendants = this.treeControl.getDescendants(node); - - const descAllSelected = - descendants.length > 0 && - descendants.every((child) => { - return this.checklistSelection.isSelected(child); - }); - - return descAllSelected; - } - - /** - * Check whether part of the descendants are selected - * - * @param {TargetEntityTreeNode} node - * @returns {boolean} - */ - descendantsPartiallySelected(node: TargetEntityTreeNode): boolean { - if (this.allowSelectionBubbling) { - const descendants = this.treeControl.getDescendants(node); - const result = descendants.some((child) => - this.checklistSelection.isSelected(child) - ); - - return result && !this.descendantsAllSelected(node); - } - - return false; - } - - /** - * Toggle the entity selection. - * Select/deselect all the descendants node - * - * @param {TargetEntityTreeNode} node - */ - entitySelectionToggle(node: TargetEntityTreeNode): void { - this.checklistSelection.toggle(node); - - if (this.allowSelectionBubbling) { - const descendants = this.treeControl.getDescendants(node); - - this.checklistSelection.isSelected(node) - ? this.checklistSelection.select(...descendants) - : this.checklistSelection.deselect(...descendants); - - // Force update for the parent - descendants.forEach((child) => this.checklistSelection.isSelected(child)); - this.checkAllParentsSelection(node); - } - - // Publish selection change to store - this.publishSelectionChange(); - } - - /** - * Publish selection change to store. - */ - publishSelectionChange() { - store.targets.next( - this.entitiesToRuleTargetAction(this.checklistSelection.selected) - ); - - // Update save requirements - const valid = this.checkAllParentsSelection.length > 0; - store.saveRequirements.next({ - ...store.saveRequirements.value, - ...{ target: valid }, - }); - } - - /** - * Toggle a leaf entity selection. - * Check all the parents to see if they changed - * - * @param {TargetEntityTreeNode} node - */ - entityLeafItemSelectionToggle(node: TargetEntityTreeNode): void { - this.checklistSelection.toggle(node); - - if (this.allowSelectionBubbling) { - this.checkAllParentsSelection(node); - } - - // Publish selection change to all components - this.publishSelectionChange(); - } - - /** - * Check if node is selected. - * - * @param {TargetEntityTreeNode} node - * @returns {boolean} - */ - isSelected(node: TargetEntityTreeNode): boolean { - const selected = this.checklistSelection.isSelected(node); - return selected; - } - - /** - * Transform entities to Target Agent. - * - * @param {TargetEntityTreeNode[]} nodes - * @returns {TargetAgent} - */ - entitiesToRuleTargetAction( - nodes: TargetEntityTreeNode[] - ): RuleTargetAction[] { - return nodes.map((node) => ({ - agentId: 'dv360', - action: 'ACTIVATE', - parameters: node.parameters, - })); - } - - /** - * Checks all the parents when a leaf node is selected/unselected. - * - * @param {TargetEntityTreeNode} node - */ - checkAllParentsSelection(node: TargetEntityTreeNode): void { - let parent: TargetEntityTreeNode | null = this.getParentNode(node); - - while (parent) { - this.checkRootNodeSelection(parent); - parent = this.getParentNode(parent); - } - } - - /** - * Check root node checked state and change it accordingly. - * - * @param {TargetEntityTreeNode} node - */ - checkRootNodeSelection(node: TargetEntityTreeNode): void { - if (!node.selectable) { - return; - } - - const nodeSelected = this.checklistSelection.isSelected(node); - const descendants = this.treeControl.getDescendants(node); - const descAllSelected = - descendants.length > 0 && - descendants.every((child) => { - return this.checklistSelection.isSelected(child); - }); - - if (nodeSelected && !descAllSelected) { - this.checklistSelection.deselect(node); - } else if (!nodeSelected && descAllSelected) { - this.checklistSelection.select(node); - } - } - - /** - * Get the parent node of a node. - * - * @param {TargetEntityTreeNode} node - * @returns {TargetEntityTreeNode | null} - */ - getParentNode(node: TargetEntityTreeNode): TargetEntityTreeNode | null { - const currentLevel = this.getLevel(node); - - if (currentLevel < 1) { - return null; - } - - const startIndex = this.treeControl.dataNodes.indexOf(node) - 1; - - for (let i = startIndex; i >= 0; i--) { - const currentNode = this.treeControl.dataNodes[i]; - - if (this.getLevel(currentNode) < currentLevel) { - return currentNode; - } - } - return null; - } -} diff --git a/client/src/app/components/user-settings/user-settings.component.html b/client/src/app/components/user-settings/user-settings.component.html deleted file mode 100644 index e05c245..0000000 --- a/client/src/app/components/user-settings/user-settings.component.html +++ /dev/null @@ -1,54 +0,0 @@ - - - -
- -
diff --git a/client/src/app/components/user-settings/user-settings.component.scss b/client/src/app/components/user-settings/user-settings.component.scss deleted file mode 100644 index 79eeda0..0000000 --- a/client/src/app/components/user-settings/user-settings.component.scss +++ /dev/null @@ -1,34 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -.user-settings-action-buttons { - padding-bottom: 20px; -} - -.user-settings-headers-align .mat-expansion-panel-header-title, -.user-settings-headers-align .mat-expansion-panel-header-description { - flex-basis: 0; -} - -.user-settings-headers-align .mat-expansion-panel-header-description { - justify-content: space-between; - align-items: center; -} - -.user-settings-headers-align .mat-form-field + .mat-form-field { - margin-left: 8px; -} - -.mat-form-field { - width: 80% !important; -} diff --git a/client/src/app/components/user-settings/user-settings.component.spec.ts b/client/src/app/components/user-settings/user-settings.component.spec.ts deleted file mode 100644 index 27d46a3..0000000 --- a/client/src/app/components/user-settings/user-settings.component.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { UserSettingsComponent } from './user-settings.component'; - -describe('UserSettingsComponent', () => { - let component: UserSettingsComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [UserSettingsComponent], - }).compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(UserSettingsComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/client/src/app/components/user-settings/user-settings.component.ts b/client/src/app/components/user-settings/user-settings.component.ts deleted file mode 100644 index 20aefe5..0000000 --- a/client/src/app/components/user-settings/user-settings.component.ts +++ /dev/null @@ -1,193 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { Location } from '@angular/common'; -import { HttpClient } from '@angular/common/http'; -import { Component, ViewChild } from '@angular/core'; -import { FormBuilder, FormGroup } from '@angular/forms'; -import { MatAccordion } from '@angular/material/expansion'; -import { MatSnackBar } from '@angular/material/snack-bar'; -import { ActivatedRoute } from '@angular/router'; -import { environment } from 'src/environments/environment'; - -import { of } from 'rxjs'; -import { debounceTime, switchMap } from 'rxjs/operators'; -import { UserService } from 'src/app/services/user.service'; - -interface UserSettingUiInfo { - title: string; - description: string; - field: string; - settingName: string; - expanded?: boolean; - value?: string; -} - -@Component({ - selector: 'app-user-settings', - templateUrl: './user-settings.component.html', - styleUrls: ['./user-settings.component.scss'], -}) - -/** - * User Settings Component. - */ -export class UserSettingsComponent { - @ViewChild(MatAccordion) accordion: MatAccordion; - - public savingUserSettings = false; - public userSettings: FormGroup; - private requiredSettings: string[] = []; - public settings: UserSettingUiInfo[] = [ - { - title: 'OpenWeatherMap API', - description: 'Required to fetch the weather', - field: 'Api Key', - settingName: 'OPENWEATHER_API_KEY', - }, - { - title: 'Ambee API', - description: 'Required to fetch the pollen and air quality infos', - field: 'Api Key', - settingName: 'AMBEE_API_KEY', - }, - { - title: 'Google Maps API', - description: 'Required to do autocompletion of the city name', - field: 'Api Key', - settingName: 'GOOGLEMAPS_API_KEY', - }, - { - title: 'Google Ads Developer Token', - description: 'Required to access Google Ads API', - field: 'Developer Token', - settingName: 'GOOGLEADS_DEV_TOKEN', - }, - { - title: 'Google Ads Manager Account ID', - description: 'Specifies the manager account to use', - field: 'ID without dashes', - settingName: 'GOOGLEADS_MANAGER_ACCOUNT_ID', - }, - { - title: 'Google Ads Account ID', - description: 'Specifies the account to modify', - field: 'ID without dashes', - settingName: 'GOOGLEADS_ACCOUNT_ID', - }, - ]; - - /** - * Constructor. - * - * @param {ActivatedRoute} route - * @param {Location} location - * @param {HttpClient} http - * @param {UserService} userService - * @param {FormBuilder} formBuilder - * @param {MatSnackBar} message - */ - constructor( - private route: ActivatedRoute, - private location: Location, - private http: HttpClient, - private userService: UserService, - private formBuilder: FormBuilder, - private message: MatSnackBar - ) { - this.route.fragment.subscribe((f) => { - if (f) { - this.requiredSettings = (f as string).split(','); - } - }); - - this.settings = this.settings.map((v) => { - return { - ...v, - expanded: this.requiredSettings.includes(v.settingName), - }; - }); - - const group: { [key: string]: Array } = {}; - for (const setting of this.settings) { - group[setting.settingName] = []; - } - - this.userSettings = this.formBuilder.group(group); - if (this.userService.loggedInUser.settings) { - const filteredUserSettings: Record = {}; - for (const setting of this.settings) { - filteredUserSettings[setting.settingName] = - this.userService.loggedInUser?.settings[setting.settingName] || ''; - } - - this.userSettings.setValue(filteredUserSettings); - } - } - - /** - * Init. - */ - ngOnInit(): void { - this.userSettings.valueChanges - .pipe( - debounceTime(1000), - switchMap((settings) => of(settings)) - ) - .subscribe((settings: Record) => { - this.showSavedStatus('Saving...', true); - this.save(settings); - }); - } - - /** - * Move back in browser history. - */ - back() { - this.location.back(); - } - - /** - * Save user settings. - * - * @param {Record} settings - */ - save(settings: Record) { - this.http - .post( - `${environment.apiUrl}/accounts/${this.userService.loggedInUser.id}/settings`, - settings - ) - .subscribe({ - next: (_) => { - this.userService.setSettings(settings); - this.showSavedStatus('Saved'); - }, - error: (_) => { - console.log('Error saving user settings', _); - this.showSavedStatus('Error'); - }, - }); - } - - /** - * Show saved status. - * - * @param {string} message - * @param {boolean} saving - */ - showSavedStatus(message: string, saving: boolean = false) { - this.savingUserSettings = saving; - this.message.open(message, 'Dismiss', { duration: 5000 }); - } -} diff --git a/client/src/app/interceptors/auth.interceptor.spec.ts b/client/src/app/interceptors/auth.interceptor.spec.ts deleted file mode 100644 index 992a3fe..0000000 --- a/client/src/app/interceptors/auth.interceptor.spec.ts +++ /dev/null @@ -1,29 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { TestBed } from '@angular/core/testing'; - -import { AuthInterceptor } from './auth.interceptor'; - -describe('AuthInterceptor', () => { - beforeEach(() => - TestBed.configureTestingModule({ - providers: [AuthInterceptor], - }) - ); - - it('should be created', () => { - const interceptor: AuthInterceptor = TestBed.inject(AuthInterceptor); - expect(interceptor).toBeTruthy(); - }); -}); diff --git a/client/src/app/interceptors/auth.interceptor.ts b/client/src/app/interceptors/auth.interceptor.ts deleted file mode 100644 index 9b28653..0000000 --- a/client/src/app/interceptors/auth.interceptor.ts +++ /dev/null @@ -1,92 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { - HttpEvent, - HttpHandler, - HttpInterceptor, - HttpRequest, -} from '@angular/common/http'; -import { Injectable } from '@angular/core'; -import { catchError, Observable, switchMap, throwError } from 'rxjs'; -import { AuthService } from '../services/auth.service'; - -const REFRESH_ERROR_CODES = new Set([401]); - -@Injectable() -/** - * Interceptor for HTTP requests, it attaches Authorization - * Header and attempts to do a token refresh when current - * access Token expires. - * At other layers ensure user is redirected to login - * if Token expired error is thrown. - */ -export class AuthInterceptor implements HttpInterceptor { - /** - * Constructor - * @param {AuthService} authService injected - */ - constructor(private authService: AuthService) {} - - /** - * Applies an access token to the request's authorization header. - * @param {HttpRequest} request the request to be sent - * @param {string} accessToken the access token for the authorization header - * @returns {HttpRequest} the authorized request - */ - private applyToken(request: HttpRequest, accessToken: string) { - return request.clone({ - setHeaders: { Authorization: 'Bearer ' + accessToken }, - }); - } - - /** - * Handles the access token refresh. - * @param {HttpRequest} request the request to be sent - * @param {HttpHandler} next the next handler in the chain. - * @returns {Observable>} - */ - private handleRefresh(request: HttpRequest, next: HttpHandler) { - return this.authService - .refreshAccessToken() - .pipe( - switchMap((credentials) => - next.handle(this.applyToken(request, credentials.accessToken)) - ) - ); - } - - /** - * Handle HTTP request. - * @param {HttpRequest} request the request to authorize - * @param {HttpHandler} next the next handler in the chain. - * @returns {Observable>} - */ - intercept( - request: HttpRequest, - next: HttpHandler - ): Observable> { - const accessToken = this.authService.accessToken; - const authRequest = this.applyToken(request, accessToken); - - return next - .handle(authRequest) - .pipe( - catchError((err) => - REFRESH_ERROR_CODES.has(err.status) - ? this.handleRefresh(authRequest, next) - : throwError(() => err) - ) - ); - } -} diff --git a/client/src/app/interceptors/index.ts b/client/src/app/interceptors/index.ts deleted file mode 100644 index d898ff7..0000000 --- a/client/src/app/interceptors/index.ts +++ /dev/null @@ -1,23 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { HTTP_INTERCEPTORS } from '@angular/common/http'; -import { AuthInterceptor } from './auth.interceptor'; - -export const httpInterceptorProviders = [ - { - provide: HTTP_INTERCEPTORS, - useClass: AuthInterceptor, - multi: true, - }, -]; diff --git a/client/src/app/interfaces/api.ts b/client/src/app/interfaces/api.ts deleted file mode 100644 index 7812124..0000000 --- a/client/src/app/interfaces/api.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { SourceAgentMetadata } from './source'; -import { TargetAgentMetadata } from './target'; - -export interface AgentsMetadata { - source: SourceAgentMetadata[]; - target: TargetAgentMetadata[]; -} diff --git a/client/src/app/interfaces/common.ts b/client/src/app/interfaces/common.ts deleted file mode 100644 index eac0149..0000000 --- a/client/src/app/interfaces/common.ts +++ /dev/null @@ -1,65 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -/** - * Base interface of all IFTTA DB models. - */ -export interface Model { - id: string; -} - -/** - * A model's data (excluding the ID). - */ -export type ModelSpec = Omit; - -export interface OperationResult { - status: 'success' | 'failed'; - error?: string; -} - -/** - * Represents the scheduled fetching of data via a source agent. - */ -export interface Job extends Model { - ownerId: string; - executionInterval: number; - lastExecutionDate?: Date; - sourceAgentId: string; - sourceParameters: AgentParameters; - ruleIds: string[]; -} - -export type AgentParameters = Record; - -export interface Agent { - /** The unique ID of this agent. */ - readonly id: string; - - /** - * Provides descriptive metadata about this agent, including its name, id and - * additional capabilities. - */ - describe(): Promise; -} - -export interface AgentSettingMetadata { - key: string; - name: string; -} -export interface AgentMetadata { - id: string; - name: string; - type: 'source' | 'target'; - settings?: AgentSettingMetadata[]; -} diff --git a/client/src/app/interfaces/rule.ts b/client/src/app/interfaces/rule.ts deleted file mode 100644 index fcc0769..0000000 --- a/client/src/app/interfaces/rule.ts +++ /dev/null @@ -1,94 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { AgentParameters, Model, OperationResult } from './common'; -import { TargetAgentAction } from './target'; - -export type Comparator = 'eq' | 'gt' | 'lt'; - -/** - * A rule's condition definition - */ -export interface Condition { - /** The source data point to compare. */ - dataPoint: string; - /** The condition's comparator. */ - comparator: Comparator; - /** The value to compare against. */ - compareValue: string | number | boolean; -} - -/** - * A rule's source definition. - */ -export interface RuleSourceAction { - /** The source agent ID. */ - agentId: string; - /** The source agent parameters. */ - parameters: AgentParameters; -} - -/** - * A rule's target definition. - */ -export interface RuleTargetAction { - /** The target agent ID. */ - agentId: string; - /** The target agent parameters. */ - parameters: AgentParameters; - /** The action to execute if the condition evaluates to true. */ - action: TargetAgentAction; -} - -export interface RuleStatus { - /** A flag indicating that the rule evaluation succeeded. */ - success: boolean; - /** The rule's last evaluation date. */ - lastExecution: Date; - /** The reason the rule evaluation did not succeed. */ - error?: string; -} - -/** - * The rule definition. - */ -export interface Rule extends Model { - /** The rule's human-readable name */ - name: string; - /** The user ID of the rule owner. */ - ownerId: string; - /** The execution interval in minutes. */ - executionInterval: number; - /** The rule's source definition. */ - source: RuleSourceAction; - /** The rule's condition definition. */ - condition: Condition; - /** The rule's target defintion. */ - targets: RuleTargetAction[]; - - /** The status of the rule's last evaluation. */ - latestStatus?: RuleStatus; -} - -/** - * The result of evaluating a rule. - * - * During evaluation source agent data is translated to the resulting - * actions for the target agent. - */ -export interface RuleEvaluationResult extends OperationResult { - /** The rule which was evaluated */ - rule: Rule; - /** The resulting target actions after evaluation. */ - targetActions?: RuleTargetAction[]; -} diff --git a/client/src/app/interfaces/source.ts b/client/src/app/interfaces/source.ts deleted file mode 100644 index e68c1be..0000000 --- a/client/src/app/interfaces/source.ts +++ /dev/null @@ -1,151 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { - Agent, - AgentMetadata, - AgentParameters, - OperationResult, -} from './common'; - -/** - * A description of a parameter a source agent requires to make calls - * to the ultimate API. - */ -export interface SourceAgentParameterMetadata { - /** The parameter's human readable name. */ - name: string; - /** The parameter's unique key. */ - key: string; - /** The type of the parameter. */ - type: string; - /** Optional enumeration values. */ - values?: string[]; -} - -/** - * A description of a data point provided by a source agent. - * - * Source agent can provide data point values as strings, numbers or booleans. - * - * Numeric data points should also specify the unit of measurement if applicable. - * E.g. temperature data points should specify whether they are in °C, °F or K. - * - * Enumeration values may be specified via the values property. - * E.g. index data points should specify possible values like 'low', 'medium', - * 'high', etc. - */ -export interface SourceAgentDataPointMetadata { - /** The data point's unique key. */ - key: string; - /** The data point's human readable name. */ - name: string; - /** The type of the data point. */ - type: 'string' | 'number' | 'boolean'; - /** Optional enumeration values. */ - values?: string[]; -} - -/** - * A description of an agent and it's capabilities. - */ -export interface SourceAgentMetadata extends AgentMetadata { - /** - * Parameters which a source agent requires to fetch data. - */ - readonly parameters: SourceAgentParameterMetadata[]; - /** - * Data points which a source agent provides. - */ - readonly dataPoints: SourceAgentDataPointMetadata[]; -} - -/** - * A query task for the source agent to execute. - */ -export interface SourceAgentTask { - /** - * Parameters for this task. - */ - parameters: AgentParameters; - - /** - * The ID of the user who owns this task. - */ - ownerId: string; - - /** - * The task owners settings object. - */ - ownerSettings: Record; - /** - * The data points for which this task requires data. - */ - dataPoints: string[]; -} - -/** - * The source agent's response data object. When executing tasks, the - * source agent must respons with an object that contains values for each - * queried data point. - * - * If a task's data points contain ["a", "b", "c"] the source agent must provide - * a response object in the form of { "a": , "b": , "c": }, - * where values must be of the type specified by the data point description. - */ -export interface SourceAgentData { - [dataPoint: string]: number | boolean | string; -} - -/** - * The result of a data fetching job. The data object must contain values for - * each queried data point. The data can be undefined in error cases (i.e. if - * the result's status is 'failed' rather than 'success'.) - */ -export interface SourceAgentTaskResult extends OperationResult { - /** The agent's response data. */ - data?: SourceAgentData; -} - -/** - * The source agent is responsible for fetching data from a source. - * - * Source agents access an external API to request input signals and translate - * those signals into data for the rule engine. The process of fetching data - * is asynchronous and source agent implementations will be invoked via tasks. - * - * A source agent task encapsulates the query for a set of data points. Source - * agents must provide data for all queried data points. Tasks will also - * receive a set of parameters for the query and the task owner's settings. - * Source agents should inspect parameters and owner settings to draw required - * values for the ultimate API query. - * - * In addition to the process of executing tasks, source agents must also - * implement the method "describe", which provides metadata for the agent, - * including the agent's name and ID, which data points this source agent - * provides, etc. Please refer to the SourceAgentDescription interface for - * information on descriptive metadat. - */ -export interface SourceAgent extends Agent { - /** - * Executes a query task. - * @param task the task to be executed - */ - executeTask(task: SourceAgentTask): Promise; - - /** - * Provides descriptive metadata about this agent, including its name, id and - * available source data points . - */ - describe(): Promise; -} diff --git a/client/src/app/interfaces/target.ts b/client/src/app/interfaces/target.ts deleted file mode 100644 index 3020a16..0000000 --- a/client/src/app/interfaces/target.ts +++ /dev/null @@ -1,79 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { - Agent, - AgentMetadata, - AgentParameters, - OperationResult, -} from './common'; -import { User } from './user'; - -export interface TargetEntity { - type: string; - name: string; - parameters: Record; -} - -export interface TargetEntityMetadata { - key: string; - name: string; - parameters?: string[]; -} - -export interface TargetAgent extends Agent { - /** - * Executes a set of tasks that result from rule evaluations - * @param {TargetAgentTask[]} tasks the tasks to execute - */ - executeTasks(tasks: TargetAgentTask[]): Promise; - - /** - * @inheritdoc - */ - describe(): Promise; - - /** - * List a set of target entities this agent can interact with. - * @param {string} type the entity type - * @param {AgentParameters} parameters the call parameters - * @param {User} requestor the requesting user - * @param {Record} requestorSettings the requestor's user - * settings. - * @returns {Promise} the agent's response - */ - listTargetEntities( - type: string, - parameters: AgentParameters, - requestor: User, - requestorSettings: Record - ): Promise; -} - -export interface TargetAgentMetadata extends AgentMetadata { - targetEntities: TargetEntityMetadata[]; -} - -export type TargetAgentAction = 'ACTIVATE' | 'DEACTIVATE'; - -export interface TargetAgentTask { - agentId: string; - action: TargetAgentAction; - parameters: AgentParameters; - owner: User; - ownerSettings: Record; -} - -export interface TargetEntityResponse extends OperationResult { - entities?: TargetEntity[]; -} diff --git a/client/src/app/interfaces/user.ts b/client/src/app/interfaces/user.ts deleted file mode 100644 index 3477aae..0000000 --- a/client/src/app/interfaces/user.ts +++ /dev/null @@ -1,33 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { Model } from './common'; - -export interface Credentials { - accessToken: string; - expiry: Date; -} - -export interface User extends Model { - profileId: string; - displayName?: string; - givenName?: string; - familyName?: string; - gender?: string; - email: string; - verified?: boolean; - profilePhoto?: string; - locale?: string; - credentials: Credentials; - settings: Record; -} diff --git a/client/src/app/models/dynamic-data-source.model.spec.ts b/client/src/app/models/dynamic-data-source.model.spec.ts deleted file mode 100644 index da966be..0000000 --- a/client/src/app/models/dynamic-data-source.model.spec.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { DynamicDataSource } from './dynamic-data-source.model'; - -describe('DynamicDataSource', () => { - it('should create an instance', () => { - expect(new DynamicDataSource()).toBeTruthy(); - }); -}); diff --git a/client/src/app/models/dynamic-data-source.model.ts b/client/src/app/models/dynamic-data-source.model.ts deleted file mode 100644 index eb9aaf1..0000000 --- a/client/src/app/models/dynamic-data-source.model.ts +++ /dev/null @@ -1,155 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { - CollectionViewer, - DataSource, - SelectionChange, -} from '@angular/cdk/collections'; -import { FlatTreeControl } from '@angular/cdk/tree'; -import { BehaviorSubject, merge, Observable } from 'rxjs'; -import { map } from 'rxjs/operators'; -import { DynamicDatabase } from './dynamic-database.model'; -import { TargetEntityTreeNode } from './entity-node.model'; - -/** - * Dynamic data source. - */ -export class DynamicDataSource implements DataSource { - dataChange = new BehaviorSubject([]); - - /** - * Getter function for data. - * - * @returns {TargetEntityTreeNode[]} - */ - get data(): TargetEntityTreeNode[] { - return this.dataChange.value; - } - - /** - * Setter function for data. - * - * @param {TargetEntityTreeNode[]} value - */ - set data(value: TargetEntityTreeNode[]) { - this._treeControl.dataNodes = value; - this.dataChange.next(value); - } - - /** - * - * @param {FlatTreeControl} _treeControl - * @param {DynamicDatabase} _database - */ - constructor( - private _treeControl: FlatTreeControl, - private _database: DynamicDatabase - ) {} - - /** - * Connect. - * - * @param {CollectionViewer} collectionViewer - * @returns {Observable} - */ - connect( - collectionViewer: CollectionViewer - ): Observable { - this._treeControl.expansionModel.changed.subscribe((change) => { - if ( - (change as SelectionChange).added || - (change as SelectionChange).removed - ) { - this.handleTreeControl(change as SelectionChange); - } - }); - - return merge(collectionViewer.viewChange, this.dataChange).pipe( - map(() => this.data) - ); - } - - /** - * Disconnect. - * - * @param {CollectionViewer} collectionViewer - */ - disconnect(collectionViewer: CollectionViewer): void {} - - /** - * Handle expand/collapse behaviors - * - * @param {SelectionChange} change - */ - handleTreeControl(change: SelectionChange) { - if (change.added) { - change.added.forEach((node) => this.toggleNode(node, true)); - } - if (change.removed) { - change.removed - .slice() - .reverse() - .forEach((node) => this.toggleNode(node, false)); - } - } - - /** - * Toggle node expansion, remove from display list - * - * @param {TargetEntityTreeNode} node - * @param {boolean} expand - * @returns {Promise} - */ - async toggleNode(node: TargetEntityTreeNode, expand: boolean): Promise { - if (!node.expandable) { - return; - } - - // Set node to loading - node.isLoading = true; - - // Get child nodes - try { - const children = await this._database.getChildren(node); - const index = this.data.indexOf(node); - - if (!children || index < 0) { - node.expandable = false; - node.children = null; - // If no children, or cannot find the node, no op - return; - } - - if (expand) { - this.data.splice(index + 1, 0, ...children); - } else { - let count = 0; - for ( - let i = index + 1; - i < this.data.length && this.data[i].level > node.level; - i++, count++ - ) {} - this.data.splice(index + 1, count); - } - - // Notify the change - this.dataChange.next(this.data); - } catch (err) { - console.error('Error loading children', err); - return; - } finally { - node.isLoading = false; - } - } -} diff --git a/client/src/app/models/dynamic-database.model.spec.ts b/client/src/app/models/dynamic-database.model.spec.ts deleted file mode 100644 index 14fb417..0000000 --- a/client/src/app/models/dynamic-database.model.spec.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { DynamicDatabase } from './dynamic-database.model'; - -describe('DynamicDatabase', () => { - it('should create an instance', () => { - expect(new DynamicDatabase()).toBeTruthy(); - }); -}); diff --git a/client/src/app/models/dynamic-database.model.ts b/client/src/app/models/dynamic-database.model.ts deleted file mode 100644 index b8e54ed..0000000 --- a/client/src/app/models/dynamic-database.model.ts +++ /dev/null @@ -1,154 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { Injectable } from '@angular/core'; -import { map, tap } from 'rxjs'; -import { TargetEntity } from '../interfaces/target'; -import { AgentsService } from '../services/agents.service'; -import { TargetEntityTreeNode } from './entity-node.model'; - -const ENTITY_TYPES: Record< - string, - { childType?: string; expandable: boolean; selectable: boolean } -> = { - dv360: { childType: 'partner', expandable: true, selectable: false }, - partner: { childType: 'advertiser', expandable: true, selectable: false }, - advertiser: { childType: 'campaign', expandable: true, selectable: false }, - campaign: { childType: 'insertionOrder', expandable: true, selectable: true }, - insertionOrder: { childType: 'lineItem', expandable: true, selectable: true }, - lineItem: { expandable: true, selectable: true }, -}; - -@Injectable({ providedIn: 'root' }) -/** - * Database for dynamic data. When expanding a node in the tree, the data source will need to fetch - * the descendants data from the database. - */ -export class DynamicDatabase { - /** - * Constructor. - * - * @param {HttpClient} http - */ - constructor(private agents: AgentsService) {} - - /** - * Initial data from database. - * - * @returns {TargetEntityTreeNode[]} - */ - initialData(): TargetEntityTreeNode[] { - const root = new TargetEntityTreeNode('dv360', 'DV360', 0, true); - root.type = 'dv360'; - return [root]; - } - - /** - * Derive ID from entity. - * - * @param {TargetEntityTreeNode} entity - * @returns {string} - */ - getEntityId(entity: TargetEntityTreeNode): string { - switch (entity.type) { - case 'lineItem': - return entity.parameters['lineItemId']; - case 'insertionOrder': - return entity.parameters['insertionOrderId']; - case 'campaign': - return entity.parameters['campaignId']; - case 'advertiser': - return entity.parameters['advertiserId']; - case 'partner': - return entity.parameters['partnerId']; - default: - throw new Error(`Unknown entity type: ${entity.type}`); - } - } - - /** - * Get node children. - * - * @param {TargetEntityTreeNode} node - * @returns {Promise} - */ - getChildren( - node: TargetEntityTreeNode - ): Promise { - const agentId = 'dv360'; - const entityType = ENTITY_TYPES[node.type].childType; - if (!entityType) { - return Promise.resolve(undefined); - } - - const params = node.parameters; - - // Build request URL - const url = `agents/${agentId}/list/${entityType}`; - - // Build cache key - const hash = btoa(`${url}-${JSON.stringify(params)}`); - - // Fetch children from cache if available - if (localStorage.getItem(hash)) { - return new Promise((resolve) => { - const children = JSON.parse(localStorage.getItem(hash)!); - resolve(children); - }); - } - - // Fetch children from server - return new Promise((resolve, reject) => { - this.agents - .fetchTargetEntities(agentId, entityType, params) - .pipe( - map((targetEntities) => { - return targetEntities?.map((entity) => - this.parseEntity(entity, node) - ); - }), - tap((targetNodes) => { - localStorage.setItem(hash, JSON.stringify(targetNodes)); - }) - ) - .subscribe({ next: resolve, error: reject }); - }); - } - - /** - * Parse entity from JSON to proper model. - * - * @param {TargetEntity} entity - * @param {TargetEntityTreeNode} parent - * @returns {TargetEntityTreeNode} - */ - parseEntity(entity: TargetEntity, parent: TargetEntityTreeNode) { - const child = TargetEntityTreeNode.fromJSON(entity); - child.id = this.getEntityId(child); - child.level = parent.level + 1; - child.selectable = ENTITY_TYPES[child.type].selectable; - child.expandable = ENTITY_TYPES[child.type].expandable; - - return child; - } - - /** - * Check if node is expandable. - * - * @param {TargetEntityTreeNode} node - * @returns {boolean} - */ - isExpandable(node: TargetEntityTreeNode): boolean { - return node.expandable; - } -} diff --git a/client/src/app/models/entity-node.model.spec.ts b/client/src/app/models/entity-node.model.spec.ts deleted file mode 100644 index c392ed8..0000000 --- a/client/src/app/models/entity-node.model.spec.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { TargetEntityTreeNode } from './entity-node.model'; - -describe('EntityNode', () => { - it('should create an instance', () => { - expect(new TargetEntityTreeNode()).toBeTruthy(); - }); -}); diff --git a/client/src/app/models/entity-node.model.ts b/client/src/app/models/entity-node.model.ts deleted file mode 100644 index 96bf8c7..0000000 --- a/client/src/app/models/entity-node.model.ts +++ /dev/null @@ -1,53 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { AgentParameters } from '../interfaces/common'; - -/** - * Entity node. - */ -export class TargetEntityTreeNode { - /** - * - * @param {string} id - * @param {string} name - * @param {number} level - * @param {boolean} expandable - * @param {boolean} selectable - * @param {boolean} isLoading - * @param {Record} parameters - * @param {string} type - * @param {TargetEntityTreeNode} children - */ - constructor( - public id?: string, - public name?: string, - public level: number = 1, - public expandable: boolean = false, - public selectable: boolean = false, - public isLoading: boolean = false, - public type: string = '', - public parameters: AgentParameters = {}, - public children: TargetEntityTreeNode[] | null = null - ) {} - - /** - * Parse User from JSON Object. - * - * @param {any} input - * @returns {User} - */ - static fromJSON(input: any): TargetEntityTreeNode { - return Object.assign(new TargetEntityTreeNode(), input); - } -} diff --git a/client/src/app/pipes/interval-format/interval-format.pipe.spec.ts b/client/src/app/pipes/interval-format/interval-format.pipe.spec.ts deleted file mode 100644 index e51c0f7..0000000 --- a/client/src/app/pipes/interval-format/interval-format.pipe.spec.ts +++ /dev/null @@ -1,21 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { IntervalFormatPipe } from './interval-format.pipe'; - -describe('IntervalFormatPipe', () => { - it('create an instance', () => { - const pipe = new IntervalFormatPipe(); - expect(pipe).toBeTruthy(); - }); -}); diff --git a/client/src/app/pipes/interval-format/interval-format.pipe.ts b/client/src/app/pipes/interval-format/interval-format.pipe.ts deleted file mode 100644 index 9de44e5..0000000 --- a/client/src/app/pipes/interval-format/interval-format.pipe.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { Pipe, PipeTransform } from '@angular/core'; - -@Pipe({ - name: 'intervalFormat', -}) - -/** - * Pipe to format rule interval. - */ -export class IntervalFormatPipe implements PipeTransform { - /** - * Format interval to 'min' and 'hrs' respectively. - * - * @param {number} minutes - * @returns {string} - */ - transform(minutes: number, ...args: unknown[]): string { - if (minutes <= 60) { - return `${minutes} min`; - } else { - return `${minutes / 60} hrs`; - } - } -} diff --git a/client/src/app/pipes/string-replace/string-replace.pipe.spec.ts b/client/src/app/pipes/string-replace/string-replace.pipe.spec.ts deleted file mode 100644 index 79148dd..0000000 --- a/client/src/app/pipes/string-replace/string-replace.pipe.spec.ts +++ /dev/null @@ -1,21 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { StringReplacePipe } from './string-replace.pipe'; - -describe('StringReplacePipe', () => { - it('create an instance', () => { - const pipe = new StringReplacePipe(); - expect(pipe).toBeTruthy(); - }); -}); diff --git a/client/src/app/pipes/string-replace/string-replace.pipe.ts b/client/src/app/pipes/string-replace/string-replace.pipe.ts deleted file mode 100644 index b38e65f..0000000 --- a/client/src/app/pipes/string-replace/string-replace.pipe.ts +++ /dev/null @@ -1,33 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { Pipe, PipeTransform } from '@angular/core'; - -@Pipe({ - name: 'stringReplace', -}) -/** - * String replace Pipe - */ -export class StringReplacePipe implements PipeTransform { - /** - * Replaces a given character in a string - * @param { string } value Original value - * @param { string } match Characters to match - * @param { string } replacement Replacement String / char - * @returns { string } replaced string. - */ - transform(value: string, match: string, replacement: string): string { - return value.split(match).join(replacement); - } -} diff --git a/client/src/app/services/agents.service.ts b/client/src/app/services/agents.service.ts deleted file mode 100644 index 09a7d2c..0000000 --- a/client/src/app/services/agents.service.ts +++ /dev/null @@ -1,68 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; -import { map } from 'rxjs'; -import { environment } from 'src/environments/environment'; -import { AgentsMetadata } from '../interfaces/api'; -import { TargetEntityResponse } from '../interfaces/target'; -import { store } from '../store'; - -@Injectable({ providedIn: 'root' }) -/** - * Central agent management. - */ -export class AgentsService { - /** - * Constructor. - * @param {HttpClient} http injected - */ - constructor(private readonly http: HttpClient) {} - - /** - * Fetches the metadata for all available agents. - */ - fetchAgentsMetadata() { - const url = `${environment.apiUrl}/agents/metadata`; - this.http.get(url).subscribe((agentsMetadata) => { - store.agents.next(agentsMetadata); - store.agents.complete(); - }); - } - - /** - * Fetches a list of target entities. - * @param {string} agentId the agent ID - * @param {string} type entity type - * @param {Record} parameters - * @returns {Observable} a list of target entities - */ - fetchTargetEntities( - agentId: string, - type: string, - parameters: Record - ) { - const url = `${environment.apiUrl}/agents/${agentId}/list/${type}`; - return this.http - .get(url, { params: parameters }) - .pipe( - map((response) => { - if (response.status === 'failed') { - throw new Error(response.error ?? 'Unknown error'); - } - return response.entities!; - }) - ); - } -} diff --git a/client/src/app/services/auth.guard.spec.ts b/client/src/app/services/auth.guard.spec.ts deleted file mode 100644 index e972272..0000000 --- a/client/src/app/services/auth.guard.spec.ts +++ /dev/null @@ -1,29 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { TestBed } from '@angular/core/testing'; - -import { AuthGuard } from './auth.guard'; - -describe('AuthGuard', () => { - let guard: AuthGuard; - - beforeEach(() => { - TestBed.configureTestingModule({}); - guard = TestBed.inject(AuthGuard); - }); - - it('should be created', () => { - expect(guard).toBeTruthy(); - }); -}); diff --git a/client/src/app/services/auth.guard.ts b/client/src/app/services/auth.guard.ts deleted file mode 100644 index 8cb55a4..0000000 --- a/client/src/app/services/auth.guard.ts +++ /dev/null @@ -1,65 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { Injectable } from '@angular/core'; -import { - CanActivate, - ActivatedRouteSnapshot, - RouterStateSnapshot, - UrlTree, - Router, -} from '@angular/router'; -import { Observable } from 'rxjs'; -import { AuthService } from 'src/app/services/auth.service'; - -@Injectable({ - providedIn: 'root', -}) - -/** - * Auth guard to protect routes. - */ -export class AuthGuard implements CanActivate { - /** - * Constructor. - * - * @param {AuthService} authService - * @param {Router} router - */ - constructor(public authService: AuthService, public router: Router) {} - - /** - * Evaluate if can access the page. - * - * @param {ActivatedRouteSnapshot} next - * @param {RouterStateSnapshot} state - * @returns {Observable|Promise|booleanUrlTree} - */ - canActivate( - next: ActivatedRouteSnapshot, - state: RouterStateSnapshot - ): - | Observable - | Promise - | boolean - | UrlTree { - if (this.authService.isLoggedIn) { - return true; - } - - // Redirect to login page, preserving last route - this.router.navigate(['/login'], { queryParams: { returnTo: state.url } }); - - return false; - } -} diff --git a/client/src/app/services/auth.service.spec.ts b/client/src/app/services/auth.service.spec.ts deleted file mode 100644 index bbedab6..0000000 --- a/client/src/app/services/auth.service.spec.ts +++ /dev/null @@ -1,29 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { TestBed } from '@angular/core/testing'; - -import { AuthService } from './auth.service'; - -describe('AuthService', () => { - let service: AuthService; - - beforeEach(() => { - TestBed.configureTestingModule({}); - service = TestBed.inject(AuthService); - }); - - it('should be created', () => { - expect(service).toBeTruthy(); - }); -}); diff --git a/client/src/app/services/auth.service.ts b/client/src/app/services/auth.service.ts deleted file mode 100644 index e9e6df9..0000000 --- a/client/src/app/services/auth.service.ts +++ /dev/null @@ -1,103 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { Injectable } from '@angular/core'; -import { ActivatedRoute, Router } from '@angular/router'; - -import { environment } from 'src/environments/environment'; - -import { HttpClient } from '@angular/common/http'; -import { catchError, Observable, retry, tap, throwError } from 'rxjs'; -import { Credentials, User } from '../interfaces/user'; -import { UserService } from './user.service'; -@Injectable({ - providedIn: 'root', -}) - -/** - * Authentication service to handle all auth API requests. - */ -export class AuthService { - /** - * Constructor. - * - * @param {ActivatedRoute} route - * @param {Router} router - */ - constructor( - private route: ActivatedRoute, - private router: Router, - private http: HttpClient, - private userService: UserService - ) {} - - /** - * Login. - */ - login() { - this.route.queryParamMap.subscribe((params) => { - const returnTo = params.get('returnTo') || ''; - const clientUrl = - this.router['location']._platformLocation.location.origin; - - window.location.href = `${environment.apiUrl}/auth/login?returnTo=${returnTo}&clientUrl=${clientUrl}`; - }); - } - - /** - * Check if logged in. - * @returns {boolean} - */ - get isLoggedIn(): boolean { - return !!this.userService.currentUser; - } - - /** - * Logout. - */ - logout() { - this.userService.updateUser(undefined); - this.router.navigate(['/login']); - } - - /** - * Get access token. - */ - get accessToken() { - return this.userService.currentUser?.credentials?.accessToken ?? ''; - } - - /** - * Request access token refresh from the server. - * - * @param {number} maxRetries - * @returns {Observable} - */ - refreshAccessToken(maxRetries = 2): Observable { - const user: User = this.userService.loggedInUser; - const token = this.accessToken; - const userId = user.id; - const data = { userId, token }; - - return this.http - .post(`${environment.apiUrl}/auth/refresh`, data) - .pipe( - retry(maxRetries), - catchError((err) => { - this.logout(); - return throwError(() => err); - }), - tap((token) => this.userService.updateCredentials(token)) - ); - } -} diff --git a/client/src/app/services/rules.service.ts b/client/src/app/services/rules.service.ts deleted file mode 100644 index 1a0a1d5..0000000 --- a/client/src/app/services/rules.service.ts +++ /dev/null @@ -1,86 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; -import { environment } from 'src/environments/environment'; -import { ModelSpec } from '../interfaces/common'; -import { Comparator, Rule } from '../interfaces/rule'; -import { store } from '../store'; -import { UserService } from './user.service'; - -const COMPARATOR_LABELS: Record = { - eq: 'Equals', - gt: 'Greater than', - lt: 'Less than', -}; - -@Injectable({ providedIn: 'root' }) -/** - * Central rule management. - */ -export class RulesService { - /** - * Constructor. - * @param {HttpClient} http injected - * @param {UserService} userService injected - */ - constructor( - private readonly http: HttpClient, - private readonly userService: UserService - ) {} - - /** - * Fetches the rules for the current user. - */ - fetchRulesForCurrentUser() { - const user = this.userService.loggedInUser; - const url = `${environment.apiUrl}/rules/user/${user.id}`; - this.http.get(url).subscribe((rules) => { - store.rules.next(rules); - }); - } - - /** - * Inserts a new rule. - * @param {ModelSpec} ruleData the rule data to insert. - */ - addRule(ruleData: ModelSpec) { - const url = `${environment.apiUrl}/rules`; - this.http.post(url, ruleData).subscribe(() => { - this.fetchRulesForCurrentUser(); - }); - } - - /** - * Deletes a rule. - * @param {string} id the ID of the rule to delete - */ - deleteRule(id: string) { - const user = this.userService.loggedInUser; - const url = `${environment.apiUrl}/rules/${user.id}/${id}`; - this.http.delete(url).subscribe(() => { - // reload rules after delete. - this.fetchRulesForCurrentUser(); - }); - } - - /** - * Returns the human-readable comparator name. - * @param {Comparator} comparator the comparator - * @returns {string} the human-readable comparator name - */ - getComparatorLabel(comparator: Comparator) { - return COMPARATOR_LABELS[comparator]; - } -} diff --git a/client/src/app/services/user.service.spec.ts b/client/src/app/services/user.service.spec.ts deleted file mode 100644 index 6535cf0..0000000 --- a/client/src/app/services/user.service.spec.ts +++ /dev/null @@ -1,29 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { TestBed } from '@angular/core/testing'; - -import { UserService } from './user.service'; - -describe('UserService', () => { - let service: UserService; - - beforeEach(() => { - TestBed.configureTestingModule({}); - service = TestBed.inject(UserService); - }); - - it('should be created', () => { - expect(service).toBeTruthy(); - }); -}); diff --git a/client/src/app/services/user.service.ts b/client/src/app/services/user.service.ts deleted file mode 100644 index cb7cfff..0000000 --- a/client/src/app/services/user.service.ts +++ /dev/null @@ -1,116 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { Injectable } from '@angular/core'; -import { BehaviorSubject } from 'rxjs'; -import { Credentials, User } from '../interfaces/user'; - -@Injectable({ - providedIn: 'root', -}) - -/** - * User service to store and retrieve user. - */ -export class UserService { - localStorageUserKey: string = 'user'; - currentUser?: User; - userWatch: BehaviorSubject = new BehaviorSubject< - User | undefined - >(undefined); - - /** - * Constructor. - */ - constructor() { - this.loadFromLocalStorage(); - } - - /** - * Get user from local storage. - */ - private loadFromLocalStorage() { - if (localStorage.getItem(this.localStorageUserKey)) { - const userString = localStorage.getItem(this.localStorageUserKey); - const user = JSON.parse(userString!) as User; - this.updateUser(user); - } - } - - /** - * Get logged in user. - * - * @returns {User} - */ - get loggedInUser(): User { - if (this.currentUser) { - return this.currentUser; - } else { - throw new Error('No logged in user'); - } - } - - /** - * Update user. - * - * @param {User|undefined} user - */ - updateUser(user?: User) { - this.currentUser = user; - - if (user) { - // Write to LocalStorage - localStorage.setItem(this.localStorageUserKey, JSON.stringify(user)); - } else { - localStorage.removeItem(this.localStorageUserKey); - } - - // Propagate - this.userWatch.next(user); - } - - /** - * Get user setting. - * - * @param {string} setting - * @returns {string|number} - */ - getSetting(setting: string) { - return this.currentUser && - this.currentUser.settings && - setting in this.currentUser.settings - ? (this.currentUser.settings[setting] as string) - : ''; - } - - /** - * Set user settings. - * - * @param {Record} settings - */ - setSettings(settings: Record) { - if (this.currentUser) { - this.currentUser.settings = settings; - this.updateUser(this.currentUser); - } - } - - /** - * Set new user token. - * @param {Credentials} credentials the new user credentials - */ - updateCredentials(credentials: Credentials) { - this.loggedInUser.credentials = credentials; - this.updateUser(this.loggedInUser); - } -} diff --git a/client/src/app/store/index.ts b/client/src/app/store/index.ts deleted file mode 100644 index 1874c95..0000000 --- a/client/src/app/store/index.ts +++ /dev/null @@ -1,45 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { BehaviorSubject, ReplaySubject, Subject } from 'rxjs'; -import { AgentsMetadata } from '../interfaces/api'; -import { Rule, RuleTargetAction } from '../interfaces/rule'; - -interface SaveRequirements { - name: boolean; - source: boolean; - params: true; - condition: boolean; - target: boolean; - executionInterval: boolean; -} - -const saveRequirements: SaveRequirements = { - name: false, - source: false, - params: true, - condition: false, - target: false, - executionInterval: false, -}; - -export const store = { - rules: new BehaviorSubject([]), - agents: new ReplaySubject(1), - - saveRequirements: new BehaviorSubject(saveRequirements), - sourceSet: new BehaviorSubject(false), - ruleAdded: new Subject(), - targets: new Subject(), - sidenav: new Subject(), -}; diff --git a/client/src/assets/img/ads.png b/client/src/assets/img/ads.png deleted file mode 100644 index 19a9c914144e0769db8b7100e9e52b618c2f08a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11317 zcmdsd`9IXr8}Ar{K^R2}V@*UzWo%(Ag-R(|vX!L>V`r=}WRFx*SqEhaq3jHmrDPjB zGnT9~_G;`(_e|aI{oZ^3gL{AQs@Iv%=X1_^p7-;9-p_MRtkD%c4mN%^2n51mps#x! z0%2IE|G}BTNXO7*9QcRTL;t2X1i}lGS4%k6XCT23@0d2#bSzm{lU==@w~jLXw;>y_Hd#rI!l&l1Kp zzpl)h=J5Wy78H3!ceIx@ee6cz842rhf@V$$!P4!~3bb8LZ`g=m?Uz3Ekk_uVFpFfl z`sB-OYjl*gF!a5onXziEyw;ycD@4;2yw+2>I{~R6eBV~zC&=FkT4dw z4+L@!jc0^>V}K$d5H1820`U(+vp_yD!c-v;A(8)wA0cHXS<0Ka zUv`~YjA(7R5Bi06`NZ0%pgFx;QFG~5tXTWb%a!Sxk8NckC}2S-_{KH9iQJ9eNZQGgErZ~TVXHR&M7iLzYXP@~Oxz=1gYA@~D!8j^H z#PQVhQ=hiI_znGPkg9H_WFkw+hYdhs5onf!H>8GEE;h`LI-ir?Yar;BF)o1TVKAXt zGYhYeHrz(+-(;c4n8##`EU_=cEpbSF1dg-i1Jdukmf|tI;KKY$0QC3(!w)ecj3 zo1aUFHd=*rx&F2zKN7(RMLHcKFO`?|41Zp*XHnI|Gs@bTWX9a&TP_~Lp}47NcDB}C zd|G1Ln{)TU2&adzD&ktUd3A*C{fjRo+Y+08_iLA52@)VOn^Mt-+~Px|lTNr_A9?z{ z+4Uo1FE{lAvz1!vI8+E>bj2yfs-TCpfC=$P7JD1H8n7d1n|ZXJ=}%5t9SfcniZqX4 zf6VvH#%1x)-rk=OZKP8on&s`cPcwTDYNb#Em!OM~mg%FaWnbT%ioV=G=#@FBS_UQ! z(|J*J%2aBoc8tlK5yy#`Cq3*f;qgm@0Ixt+rd?`8c~@&e(0>S5f?7ku!pEIt4WfUBZ6RciIRBjN#|; z;>vF5_N1`u2w}C%=TFz*{FbZmi`nMFsJ37F=o9+P(X)t?P~=As%XgB>Fp8p^lTO)) zm!5te+U(XDpJ;(@+TwgG`=G&ZHvnvCyOmGlN#Df zP$*@WV%j}<)PA>U?pIEjMOb2)c68tlCiKrFESVvr?w;=hdALu(P{CZ_#LoA&QdTLZ zK*JhqA+#bC`6fd(Xn3ttej+#mOe!#QJ6j0HS;=2%^=GnatM!ivo`$)~dpihHv{_)0*v#BHK>IM#Wrg z1&mItI8My*ap|uO`}>aXOPL$(o^kquZP=0r9xAYy-EZ`m&vRuD?{O6n;M+&@LXoLf zRnF6B!GosLVS;BxiP_;U#^k1-G-Jo6B#ahZD=Vmlu>g(NiSM}Jy}!7O88rz{x_p{~ zv_Mc1rPn$P>jwKI*3vufm?5-3fxShbqn+LwuDszJz;=&4G1P)T#@GuSHex9gg(CZ& znUV&=4)nG$|A70%%#j9;5A9ZF$!?TvRO4P90M1^3`{=hJ2a{fD3kVz&CyHLrO?i(s z<^qN{?=}24#M^UHv{#EXBEpN~^aS=^_=-|QBZQc=jzN(*H7La@MbS|N#x*Gh9etLU zG=PT``NZhpbsk=jbzH*>9Wr7gUcQxW?kLHcgPE&PGux zYluj+-uzJ7FsIb1Yf?ijz=dF|Q*X!vskP-xR$haUlBsLlx+28KCzMJFbIs?~+j(ddUyFN(~;ffO&Oup*rmzVTL_{CxvfnF;Sh(` zOCi||x-JCDPh1S^HtcJQItgBV;9@M`v^6=|xFJ6+3#VEsS+0FKh)W!(MO7x+Y@@KU zEoKNrmco34xC~77-KnFWwQ2}TO~|W?=m!6k#LEb({xcV2wIiQDe;xNwP2^&1>8dJE zU@u_Ai4q@Ijkp!={z`Cf+sF>9QJ^3T#fgvkhw~1T8#dJf=Vx|}&||wb!@~E#aGv>E z(nRCNYh_JAM0G@@9pM%l35VelZ=7|mO`%lkef+2l*Ao!94#>;XU?Oiba`mY}u(^ob z-aUIA3%Jj#?BoIZNB6HD6h0htsL1CPAiW%53W7|aSmC3l_Y@}Y{>p?`8s`wv45X1H zW+>9&Qn2sO9*yQIwU#1cThuFVs{ZBN6oG{Ih8Xprz`@&5%Gm@A%~;oiXr& zSbM-q$#zMoRZksER_#5iHRT2a%Nh}J2}RfI1^Pn9el1m2z1U4 zWhs2}ojtd`N$4AhSUJWu7rIE7M=e?d(ld=?$)k-s55q2o>A#>Qnj@&x7!a=V_~edr zb@85MM!E7UT9>~c!X;jb4Q6&?=~^c2U>Kf39@8T>LyXvq8qPzB;FA^AM?OmSP!9_a*PyM;xyx&z6O$T1=A$PNxk|yp`M(-&3*nYSe%t|+@ zKHTT*%-orCv(pyx=@k!z55=63FL8MIsxh=4vTz|n_TZpT%%lyYiKG+Qg-M+3NwIOZ% z%t576^)GyE8j@qvk|oDSapC7=a> ztj-Zs)&Jo;5fIh94P>RZvB^KjK*D*TvR3l|{rO@V=|02jnD10M&M#UC8j~z&QB^21 zYH(+6wRS@aJm>I4W$hG96~uH1Rud$=YeJ&|x@cbXF%TMeV1Xa3()i_JE+dT_65ijc zo-^Hm>e`Vb?05zK#YF$_ggDLum*l{E_^-BYc9a zD=e_4#!@AGY9ikW01N1dPv`M0Un&ck0Qp*9T~?9Cvxz)$`#T&RI~c&eoQ@@p;J<(r z@ktlYk_VhNc8aayTe(`+VF1CS?j%Mq+)`OsjvQuIql5&1_M|%*B&EYbQ1z1_WssD{ z_D<66U=ny6EbA!Y=|tOc-`SEWY9@5T8LP<6or88IJ2YEQhU9e=)TakKQt(r&Td7xReC^(egR5 zzXqIG-UGiJz&J0Efydte2UGUl^;vMAKbO4_av>~!``mQ9I4%f@5!FF#bFxWEC~t-d zg0$cAFUcr~5r2O&4T@S_3w?q@IekjU_8_R49vJ66rsRVadRT%8eKHN^t2>eCEf%aW zyGKun9-S~)*jode!c;*4FwU4@kr=QNe$J25Pq*F7wG2tP&m2ILq$yLm_XO8}sbHQ3 zYOOh6$zDQGrL^}lIy30+i^F&-J`!9}s#EH+G z2fQ}jW<(iY-)8(@Q0ktcUcfK4o{?wr+ibY~A6K!GM%KlMyx;{1(!jdEKjkk?`6uV| z;NCuTF}AOJDhAy1Uo_<%!o9s3iBb#!(f>MuBem?JSq$3j)wK=|QvE|9{11duXM@!BSN34n!aEjU>lm$%l7uBgMZw-@>RtZwj}*_6VA7#5bdS)Q zo9DAVFXOvChL`BSoak*!QHQGQBv`m5qZErN0`+&905=1?Gr-qfK}k~wzCx^0qPzFB zmVjjyeElKdgo7Aor}?Rjzqqzfxex_kKL8{v=VSbd|2uoYV$nSp0DN>60U3EuWV1dx zct#ta4=6zxXxL;B&;N<@UA9(Lmf6#2eEuVOpNh_^a-i$tF88&iXh7A^gY~7O6f2hg zn>&Jb;p@q#N|70WD)y?Hr0F#DPnaa$Mo<@~P>MdwxJJqg8YjrB`7!9LTDd7p`Gy>x zV9Lk|6*}PlISYnEUuD5K$8`PveYFo{;TN>bgHUzbw}zOeutO*1o!85CUUEX! z1J3DaFaK|8qg|YMX!b9Dpj`jOk1P``P#eT~k@vB?dqdAVab%mrAbMl}77)?Z@b%eb zWq9#izS|DQtS zZ<4QlfuR1lZ4PazkypC2IaYBDnE#-geLO2}BKv}@(#16XS37NQZ_?$(DT?}WSRlnb zLx(Oc{-Z@eYX`)7!38`P4>FsRal{R-we)#VxY>FRh(Za5APq#Th@@cbW!AgtnTpQK zYy~>9P(sL99`g@S^Z_uzi`F?2RE!6Wbk8`#AMoU@b)nGn=o4t3s)PhaFN_$G+{`C9 zuzhjO_?BXuAOIYq6)1xhQKIDlP$S?avFN%Bhp%`{Fvj`3-*1t0>IXc|d#>rE01fPJhhwbiK1bV_w4-FZ7b5^-UU%(9~ zdrM(lBQv1I20tf-am9DU_Et)9ApX2k{lz75;&9udpv75?u}dD9Jac1o`y%w9qLu)e z1Yeh-69$cxt^c|;!ehzSpXID=Z)McKMq$(eU_O{6IlF~!*b!4{P@uJhFd5CtxM5j2 zW!5`P;NDUPx8Br&LK-N9`%KXBdjnn(o18ZEg^!>rUn*%^j}W0CERm8&p+vU`AtJe!liVIg>+FrnlUnj_X_z{_sFQa*L5tF)7&BlLIM z&egOnc`JdPNy7W3lDR)kqv?w3^Hz3>V&2alg3d#E(fTlGMCjTIS28Oc9@?v_EG7-y zx2<~d2Rn6_wz<t%_- z{klub0KPkNBXd{@YKDS5{8%rsBw4Uxn5#`A^>pI8?5L)kc% z1&DyBj(uI?1@^q;;6ilE_%pZD^HNhS$lIA=LQdd2*VuN-Xh@gky!SjK1FtReGhh@@ z9dO6GuWG8EZ_&e=#wB{1GsBXnv6s1#?$?yxxt!Z42F= z;-r0En{=K~UBhB0t6VftTy83NE|mVUG+h}*(CgPoyO5}(Tt*IhmFdsN&iA3@pS}S+ zP2%ttm^G%XqHg`3d)|e;;!e}(l---$CScuf?z>n0St<4GK7rvav0Vif`Pmwe?`*QB0wa;2c_sd-%2+RJG7;Ag0s*^FiWn?{=3IY!0LYa|)sg1g2y)_8@VXFW6h z6uc3ae(KKyb@}h)CPDLkLV1&({zLiP8#45Q(k9by%bC6#*Q}|lx%)Kvvwmr7jcM$5 zmIPy#p!>FseH+rzllDRKB`F27uj^x+H;?|Pe!dzP;+3}M+CdK8)zehM zx(Di^6>UaDgIioW*jfXNOLEZR4KDVyyZ1;SN2C#wMq=Im%tYYkN*q2l_-<}3-)i#S z`nfhW`ps=3Vcd4|)7TH^R>o4_y{e7XR{uGLDJzqk5t8L8!&u`!v<92_P@*8zu+qNGE$r#iPcRjyUP|+D(W30u1zGH% z;Z;8b8>8L34YFlQ=ZxikT;@hmz;NEs0eT^oxp!pX9L0L&;810uHJf+PsU^*<#z&|4 zzJ=Z=V(zc4+i-SRuNpbouF{!poJ5v0X`HS@RbG-jgz*@GOa;^mZuW#5H952oUwhhB z`bUY|+UoTfRy8;C$eSk-S`p!oUhPeA%wR z8-Taa$<^L?gKdd45C!)RaV-rD>lw&rbTM{mdtPKW)#R4IqFPC)lPm4c3Jy&=WhPY? z;dQCFTi#5TvXYi&PhYFDIcUxUB6yiH($qdtpgEOIo&WasO*%MHK}5!p zM|7K>paA#q@z+Ny_pZwCIqo%SH0You%F8g$-q1y2xRNGO8>HG^+`e}|ji3{sb;yYI zi9=RCd2i{Nr5N5~hBR`QDH-IIe|_k3xpLfo2Z{3M8&}HaEGWKseyvVhld30V1RuC` z90Q$$80sqT<5GN;;R=iJgvP!6c+mr!0lWRe1?t=W?_3;kqNgz)7}ttzEq0(OrSXZ1 zu?N<((lRyooBOkBZNRC~V}joA%J}Ehd(CCZ-KQwX)R+)PX*uFb!)E@~$sb{1*OPGW z@`Y()*oOft8K6d$vIpC|Pl#h*x2NnieJCS{a*ERD(r2a<2~a`Ozx@p^I6HZXI`?X7J0k2yzPt3@Ta&aG7Wm&2Q`S4*tD3HqOuA zOu2_&Q}_DNn0xfgJLWHr`JY*9Y$|orERJ6ULL?RxWD`&CFx)H!ixhuCdO2}Y^S1(N z;N3?c%bqUS=M*zqFDv>awNA98Oid|6C3L{?BY6aW{spda>k9*CbGC$LeVKavRW-x3 zQGrvf5C}V&eitAWE|?U-%y?5MvBN8}dr?q!=OYWbZ$G)yg%8MYvXaSr5Pzxd%UzN< zPQ^^k_lhf+EjEmEj>kMRze5V&iz`aVu`pDlE z*Yoy1-=stePpJMmL1TX}v2a!AHry1PIfF8ED(c<#tDD8dQ8zuk`}Z|^`&X+BF>>u! z!^}Mz8FBy%54@L)NB0DWsr#g*IzHS-V9)KjX8X<_58$gCBxL*>yF=51+p)%o0i%s*y|NYQ{Kc7NpR;fz$Cf_{xik z*-z9Lgdz+`0}ZDQ1Oy)Z*gdMMR4j@@R=w@QCY-$7YR2(yp7RShK{L3H^v<-PgD7mp zujNhikYZ+S;6EVi6!ckTzaQs3ard4vjo+Fbk!w_(pAvG@I*ZLAcChyI7`;O(a^AVV zAEr96I~ZA2HOAGOcNk{60OtgUm=hY4KP6-(RnGDgQ9D8li9YoMp5`3tWKcqZ$zW}iHxNt?hiRzQ2U4hn<&B%cmPvgCAJHVHWfkmrt~glv8}j{R#W-l3&S=Suuu{=@b;I<<11b;IfG+u3OgJ zspAcW^1h-_l)>kc20 z?4{$)dEDyV`ZHe`TR3S?^agEu=)O7#o%G{zK^N&AeX-MFCZp(tJ6Z#EO7fEd6 zWv?TL1*{*zr5MehT0ZV=i+b{Eu(opHQzSd|Yt7h%ILoq92WYJ&HI9O%BYD9Qem2nH zd;NPrc&v{WdNe~9YaX`n)_F=!sEF`oN_1aCb2pkcOL$4%bimgiU2`Qw=g;mhGyHf# z6DroZ+2eZa(Ex89$Hvjdo8ex|+d6sya;%s(@G6fd%arLM0cy9h<(gKRe9SqeXw_9C z9?P|CQ)v8-NcYjPOTdok_&Cy!0< zD&zcWSIj5yyL#*1w7~&bT~M3qSGC*j2WVr0jh;&HkRWSM|BxNdEC|n|Z$X8#Jzy$r zwddgXE1=QzYHo-fTmZ5$ktunDR?1q>4+R3psi%6(q&BRlP32fV$+a@wtlIwuA9em| zeLt&jNZwJQ2toO}qd_;ZT0tXTCCHKW$q@)*VSaMlX^fK(KK+bngm+ZqgW+pZJp^57CwimtyfFrch| zqwTb#dy@bbJH+VpH0Z5c^|vi{sn2@R;}1hhnYgL*b_HbjBlU6V2%|)L-Ce_cvc1c!cSD9;gd*TF*!g$rR8V^H57*~(hb8LD( zBI~DEJ-Q!x!aYn*ZX_f$!NRj|<;o51NsC)tIHAY&?U;dFlf4EtgmQDCFS-eAe>Hr( zdc|LjW(SCp1}|fU63)8~YAoJ&+G~4>UGs2MF6Z2CFCpn!*SHYyi+wJ<ZW9t40QA5k0 z(dk+J0%lIpd4zDGm0%d!M=&MS{7eOHpa8-}2u?1{a&)Vd)*(3}&60Gy+N9}cYQ?)F zv39+(r;87{X5`2Jy(^k^(1;NNp@KVy|DWF}rC*iBXDH17Vbp!DO?}@ohyWLAAqMBK L=)Tpy9sWN6vSS?l diff --git a/client/src/assets/img/btn_google_signin_dark_disabled_web.png b/client/src/assets/img/btn_google_signin_dark_disabled_web.png deleted file mode 100644 index 735d17eea04ff2022721523504b4a9444fff49b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2308 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 diff --git a/client/src/assets/img/btn_google_signin_dark_normal_web.png b/client/src/assets/img/btn_google_signin_dark_normal_web.png deleted file mode 100644 index b1327b4f7b47c04368da6c4b066645453398eca5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3983 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 diff --git a/client/src/assets/img/dv360.png b/client/src/assets/img/dv360.png deleted file mode 100644 index 4e2241839ddaef430f1eed61a4ee4c94520904ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4512 zcmX9?c|4Te7r!%OjD09;VI-C8MYd>=Ld6(mNq8x1ys~d$M)pKemdGB8ELq1sqo^pO z6bfThmaJnL`|^AGy?@;2e(t&Ve9v;vx%b>B-qgf^o8u4%0D#-bP~Qyd$$uLgEA%xR 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 diff --git a/client/src/assets/img/iftta-banner.png b/client/src/assets/img/iftta-banner.png deleted file mode 100644 index c3af8cb311e22b1b376ba91b2b6b4b4e93f6b2d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36435 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 WYzBtGuYp6;2sG8-sMS5UiugY~YSq2~ diff --git a/client/src/assets/style/normalize.scss b/client/src/assets/style/normalize.scss deleted file mode 100644 index 703ed40..0000000 --- a/client/src/assets/style/normalize.scss +++ /dev/null @@ -1,364 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ - -/* Document - ========================================================================== */ - -/** - * 1. Correct the line height in all browsers. - * 2. Prevent adjustments of font size after orientation changes in iOS. - */ - -html { - line-height: 1.15; /* 1 */ - -webkit-text-size-adjust: 100%; /* 2 */ -} - -/* Sections - ========================================================================== */ - -/** - * Remove the margin in all browsers. - */ - -body { - margin: 0; -} - -/** - * Render the `main` element consistently in IE. - */ - -main { - display: block; -} - -/** - * Correct the font size and margin on `h1` elements within `section` and - * `article` contexts in Chrome, Firefox, and Safari. - */ - -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -/* Grouping content - ========================================================================== */ - -/** - * 1. Add the correct box sizing in Firefox. - * 2. Show the overflow in Edge and IE. - */ - -hr { - box-sizing: content-box; /* 1 */ - height: 0; /* 1 */ - overflow: visible; /* 2 */ -} - -/** - * 1. Correct the inheritance and scaling of font size in all browsers. - * 2. Correct the odd `em` font sizing in all browsers. - */ - -pre { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ -} - -/* Text-level semantics - ========================================================================== */ - -/** - * Remove the gray background on active links in IE 10. - */ - -a { - background-color: transparent; -} - -/** - * 1. Remove the bottom border in Chrome 57- - * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. - */ - -abbr[title] { - border-bottom: none; /* 1 */ - text-decoration: underline; /* 2 */ - text-decoration: underline dotted; /* 2 */ -} - -/** - * Add the correct font weight in Chrome, Edge, and Safari. - */ - -b, -strong { - font-weight: bolder; -} - -/** - * 1. Correct the inheritance and scaling of font size in all browsers. - * 2. Correct the odd `em` font sizing in all browsers. - */ - -code, -kbd, -samp { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ -} - -/** - * Add the correct font size in all browsers. - */ - -small { - font-size: 80%; -} - -/** - * Prevent `sub` and `sup` elements from affecting the line height in - * all browsers. - */ - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sub { - bottom: -0.25em; -} - -sup { - top: -0.5em; -} - -/* Embedded content - ========================================================================== */ - -/** - * Remove the border on images inside links in IE 10. - */ - -img { - border-style: none; -} - -/* Forms - ========================================================================== */ - -/** - * 1. Change the font styles in all browsers. - * 2. Remove the margin in Firefox and Safari. - */ - -button, -input, -optgroup, -select, -textarea { - font-family: inherit; /* 1 */ - font-size: 100%; /* 1 */ - line-height: 1.15; /* 1 */ - margin: 0; /* 2 */ -} - -/** - * Show the overflow in IE. - * 1. Show the overflow in Edge. - */ - -button, -input { - /* 1 */ - overflow: visible; -} - -/** - * Remove the inheritance of text transform in Edge, Firefox, and IE. - * 1. Remove the inheritance of text transform in Firefox. - */ - -button, -select { - /* 1 */ - text-transform: none; -} - -/** - * Correct the inability to style clickable types in iOS and Safari. - */ - -button, -[type='button'], -[type='reset'], -[type='submit'] { - -webkit-appearance: button; -} - -/** - * Remove the inner border and padding in Firefox. - */ - -button::-moz-focus-inner, -[type='button']::-moz-focus-inner, -[type='reset']::-moz-focus-inner, -[type='submit']::-moz-focus-inner { - border-style: none; - padding: 0; -} - -/** - * Restore the focus styles unset by the previous rule. - */ - -button:-moz-focusring, -[type='button']:-moz-focusring, -[type='reset']:-moz-focusring, -[type='submit']:-moz-focusring { - outline: 1px dotted ButtonText; -} - -/** - * Correct the padding in Firefox. - */ - -fieldset { - padding: 0.35em 0.75em 0.625em; -} - -/** - * 1. Correct the text wrapping in Edge and IE. - * 2. Correct the color inheritance from `fieldset` elements in IE. - * 3. Remove the padding so developers are not caught out when they zero out - * `fieldset` elements in all browsers. - */ - -legend { - box-sizing: border-box; /* 1 */ - color: inherit; /* 2 */ - display: table; /* 1 */ - max-width: 100%; /* 1 */ - padding: 0; /* 3 */ - white-space: normal; /* 1 */ -} - -/** - * Add the correct vertical alignment in Chrome, Firefox, and Opera. - */ - -progress { - vertical-align: baseline; -} - -/** - * Remove the default vertical scrollbar in IE 10+. - */ - -textarea { - overflow: auto; -} - -/** - * 1. Add the correct box sizing in IE 10. - * 2. Remove the padding in IE 10. - */ - -[type='checkbox'], -[type='radio'] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ -} - -/** - * Correct the cursor style of increment and decrement buttons in Chrome. - */ - -[type='number']::-webkit-inner-spin-button, -[type='number']::-webkit-outer-spin-button { - height: auto; -} - -/** - * 1. Correct the odd appearance in Chrome and Safari. - * 2. Correct the outline style in Safari. - */ - -[type='search'] { - -webkit-appearance: textfield; /* 1 */ - outline-offset: -2px; /* 2 */ -} - -/** - * Remove the inner padding in Chrome and Safari on macOS. - */ - -[type='search']::-webkit-search-decoration { - -webkit-appearance: none; -} - -/** - * 1. Correct the inability to style clickable types in iOS and Safari. - * 2. Change font properties to `inherit` in Safari. - */ - -::-webkit-file-upload-button { - -webkit-appearance: button; /* 1 */ - font: inherit; /* 2 */ -} - -/* Interactive - ========================================================================== */ - -/* - * Add the correct display in Edge, IE 10+, and Firefox. - */ - -details { - display: block; -} - -/* - * Add the correct display in all browsers. - */ - -summary { - display: list-item; -} - -/* Misc - ========================================================================== */ - -/** - * Add the correct display in IE 10+. - */ - -template { - display: none; -} - -/** - * Add the correct display in IE 10. - */ - -[hidden] { - display: none; -} diff --git a/client/src/assets/style/reset.scss b/client/src/assets/style/reset.scss deleted file mode 100644 index 6c3b0fb..0000000 --- a/client/src/assets/style/reset.scss +++ /dev/null @@ -1,55 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -html, -body { - height: 100%; - margin: 0; - padding: 0; -} - -button { - cursor: pointer; - background-color: transparent; - background-image: none; -} - -button, -input { - border: none; - outline: none; -} - -input::placeholder, -textarea::placeholder { - color: #9ca3af; -} - -* { - box-sizing: border-box; -} - -a { - color: inherit; - text-decoration: inherit; -} - -button, -input, -optgroup, -select, -textarea { - padding: 0; - line-height: inherit; - color: inherit; -} diff --git a/client/src/assets/style/responsive.scss b/client/src/assets/style/responsive.scss deleted file mode 100644 index 14f42cc..0000000 --- a/client/src/assets/style/responsive.scss +++ /dev/null @@ -1,177 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -/* For mobile phones: */ -[class*='col-'] { - width: 100%; -} - -@media only screen and (min-width: 600px) { - /* For tablets: */ - .col-s-1 { - width: 8.33%; - } - .col-s-2 { - width: 16.66%; - } - .col-s-3 { - width: 25%; - } - .col-s-4 { - width: 33.33%; - } - .col-s-5 { - width: 41.66%; - } - .col-s-6 { - width: 50%; - } - .col-s-7 { - width: 58.33%; - } - .col-s-8 { - width: 66.66%; - } - .col-s-9 { - width: 75%; - } - .col-s-10 { - width: 83.33%; - } - .col-s-11 { - width: 91.66%; - } - .col-s-12 { - width: 100%; - } -} - -@media only screen and (min-width: 768px) { - /* For medium desktops */ - .col-m-1 { - width: 8.33%; - } - .col-m-2 { - width: 16.66%; - } - .col-m-3 { - width: 25%; - } - .col-m-4 { - width: 33.33%; - } - .col-m-5 { - width: 41.66%; - } - .col-m-6 { - width: 50%; - } - .col-m-7 { - width: 58.33%; - } - .col-m-8 { - width: 66.66%; - } - .col-m-9 { - width: 75%; - } - .col-m-10 { - width: 83.33%; - } - .col-m-11 { - width: 91.66%; - } - .col-m-12 { - width: 100%; - } -} - -@media only screen and (min-width: 992px) { - /* For large desktops */ - .col-l-1 { - width: 8.33%; - } - .col-l-2 { - width: 16.66%; - } - .col-l-3 { - width: 25%; - } - .col-l-4 { - width: 33.33%; - } - .col-l-5 { - width: 41.66%; - } - .col-l-6 { - width: 50%; - } - .col-l-7 { - width: 58.33%; - } - .col-l-8 { - width: 66.66%; - } - .col-l-9 { - width: 75%; - } - .col-l-10 { - width: 83.33%; - } - .col-l-11 { - width: 91.66%; - } - .col-l-12 { - width: 100%; - } -} - -@media only screen and (min-width: 1200px) { - /* For extra large desktops */ - .col-xl-1 { - width: 8.33%; - } - .col-xl-2 { - width: 16.66%; - } - .col-xl-3 { - width: 25%; - } - .col-xl-4 { - width: 33.33%; - } - .col-xl-5 { - width: 41.66%; - } - .col-xl-6 { - width: 50%; - } - .col-xl-7 { - width: 58.33%; - } - .col-xl-8 { - width: 66.66%; - } - .col-xl-9 { - width: 75%; - } - .col-xl-10 { - width: 83.33%; - } - .col-xl-11 { - width: 91.66%; - } - .col-xl-12 { - width: 100%; - } -} diff --git a/client/src/environments/environment.prod.ts b/client/src/environments/environment.prod.ts deleted file mode 100644 index 4e4504b..0000000 --- a/client/src/environments/environment.prod.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -export const environment = { - production: true, - apiUrl: '/api', -}; diff --git a/client/src/environments/environment.ts b/client/src/environments/environment.ts deleted file mode 100644 index ada7eea..0000000 --- a/client/src/environments/environment.ts +++ /dev/null @@ -1,30 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -// This file can be replaced during build by using the `fileReplacements` array. -// `ng build` replaces `environment.ts` with `environment.prod.ts`. -// The list of file replacements can be found in `angular.json`. - -export const environment = { - production: false, - apiUrl: '/api', -}; - -/* - * For easier debugging in development mode, you can import the following file - * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. - * - * This import should be commented out in production mode because it will have a negative impact - * on performance if an error is thrown. - */ -// import 'zone.js/plugins/zone-error'; // Included with Angular CLI. diff --git a/client/src/favicon.ico b/client/src/favicon.ico deleted file mode 100644 index 8f14793f4d444bdcd944fc6d358b736040c42f76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15406 zcmeHNX^a#_6mF0I>JR_o;(>UhQM}?2;}H|QV~mPQj1kmCR5bBKjYh>2P(vPYT~4_?I8*w3H397 zEcf%w>T@Nz<^%OHvwMxCejJ1Qk0rBfiKI4-kkp3H{QKC9o7GSHf0%eXR`ri$4jjoG z)Up*9g~JeXovFg_di=OPwU*=!J|F(OHte&o&yEQUM5kVlJw}7S&xy^t6MK?v5}kBqi}uB5-;KPj5}kN?S)TRH zqmteClbB=AFUYIU(dYR5p86cGc>p%*#BO*4&z;N5VvoZV`?`m(%jfvK2g>yLj*8dx zWR}p6(sx#3$D{J+4!tGRM%S6N9EB;SLn0d z(7#NN^{{>>Yf{FpL?$_ckSJh-a18}6HEI^-ib?O%-OnEEA^eSyqm%P>=V_s zSG+0tYzq6iWnwMpg*xx^>x_ rajZuX?9h#`a>rC;6NtmOigz;OzWX+v~=6Ng8`t zXGe|t$NglPZItD6cK2HB2N&yoblMG)X=+e??mfA`EiIGTRf~2_Et6>-dp7#}V{`0z z!gfeLufE##uS#zJW^uOHv?#~2Y`dF^!1wbcI^|j+o|xjZ?`olMH@q%c*edl&>sU7k zZKy4gcb44VAF#K6MPr9JlLxJV1I_s&G-oWBJ7J01OGV&+VUGnzeC$drPuV<$*M#C!2}oM<$3%C`3CYHDhL0N z-Mb0;dF36*<5=?__RDx>c_lZ(Gi;_rZC_u9aVyy(XOLX|o-Z#g>)n$BVj>^p#k+WU z-jy*eOyp~PP6_tSFE3U(|E&2BsU5a27yS*sCndRh0M6sT)|eVE7RRfTSM?K|1{339 zygc#_EXTz2d{18KYAtv~^~fy*c`#3(u{%sWw>QUMTvne8j)2Kp{FE=}SmtwSjroZ% zrf0)YiB;e}*jA1y6FD8vUIg=koB>D+Z9CiJ=LIliPVBCFuJvaTt1Z9zJwA(A)iz?D zFvcl9?|vOO+9!|37%6kYrFySEp%2wI+CZOL`p_A3X8`Qylt+vdvB_~JH$(r)m!vig zL!BRKn>OkAW4a7kZET6UMs^rtAxTwbk z-{U6ts*Gb(n7=Li#ItWLd|Z8W6HUU{Dawg8a$>}w){QIcWSbIPX98o8-aJ9|7`GM7 z^Pb87u|L@Fo{ZcW`^B|^A>=9F)3^v&n2$NIUF#(ONXE_PMRr zsdWHbY&S8KT>Y+&7x`7@*>x{z9bDg|z@=w1c;y)9fQ3wBf%6RJ^O<9-+#S~SU_NBBIQs-}aiF!kQaeIf>uYt`H(}p|7zi;CVj#poh=C9T zZGwT0%t0383EHIJ4q*>}2!0h}Av$vW0Ae6Ia{PuDgW|_RwCDLy#CvJ{4E+yN*aQEz G2mS$5+OXvS diff --git a/client/src/index.html b/client/src/index.html deleted file mode 100644 index c64d008..0000000 --- a/client/src/index.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - If This Then Ad - - - - - - - - - - - diff --git a/client/src/main.ts b/client/src/main.ts deleted file mode 100644 index 86f2757..0000000 --- a/client/src/main.ts +++ /dev/null @@ -1,26 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { enableProdMode } from '@angular/core'; -import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; - -import { AppModule } from './app/app.module'; -import { environment } from './environments/environment'; - -if (environment.production) { - enableProdMode(); -} - -platformBrowserDynamic() - .bootstrapModule(AppModule) - .catch((err) => console.error(err)); diff --git a/client/src/polyfills.ts b/client/src/polyfills.ts deleted file mode 100644 index 114698c..0000000 --- a/client/src/polyfills.ts +++ /dev/null @@ -1,66 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -/** - * This file includes polyfills needed by Angular and is loaded before the app. - * You can add your own extra polyfills to this file. - * - * This file is divided into 2 sections: - * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. - * 2. Application imports. Files imported after ZoneJS that should be loaded before your main - * file. - * - * The current setup is for so-called "evergreen" browsers; the last versions of browsers that - * automatically update themselves. This includes recent versions of Safari, Chrome (including - * Opera), Edge on the desktop, and iOS and Chrome on mobile. - * - * Learn more in https://angular.io/guide/browser-support - */ - -/*************************************************************************************************** - * BROWSER POLYFILLS - */ - -/** - * By default, zone.js will patch all possible macroTask and DomEvents - * user can disable parts of macroTask/DomEvents patch by setting following flags - * because those flags need to be set before `zone.js` being loaded, and webpack - * will put import in the top of bundle, so user need to create a separate file - * in this directory (for example: zone-flags.ts), and put the following flags - * into that file, and then add the following code before importing zone.js. - * import './zone-flags'; - * - * The flags allowed in zone-flags.ts are listed here. - * - * The following flags will work for all browsers. - * - * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame - * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick - * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames - * - * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js - * with the following flag, it will bypass `zone.js` patch for IE/Edge - * - * (window as any).__Zone_enable_cross_context_check = true; - * - */ - -/*************************************************************************************************** - * Zone JS is required by default for Angular itself. - */ -import 'zone.js'; // Included with Angular CLI. - - -/*************************************************************************************************** - * APPLICATION IMPORTS - */ diff --git a/client/src/proxy.conf.json b/client/src/proxy.conf.json deleted file mode 100644 index bb84d53..0000000 --- a/client/src/proxy.conf.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "/api/*": { - "target": "http://localhost:8080", - "secure": false, - "changeOrigin": true, - "logLevel": "debug" - - } - } \ No newline at end of file diff --git a/client/src/styles.scss b/client/src/styles.scss deleted file mode 100644 index 0b51f99..0000000 --- a/client/src/styles.scss +++ /dev/null @@ -1,57 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - - -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -/* You can add global styles to this file, and also import other style files */ - -@import 'assets/style/normalize.scss'; -@import 'assets/style/reset.scss'; -@import 'assets/style/responsive.scss'; -@import '~@angular/material/prebuilt-themes/indigo-pink.css'; - -html, -body { - height: 100%; - width: 100%; -} - -body { - margin: 0; - font-family: Roboto, 'Helvetica Neue', sans-serif; -} diff --git a/client/src/test.ts b/client/src/test.ts deleted file mode 100644 index c50d0d5..0000000 --- a/client/src/test.ts +++ /dev/null @@ -1,39 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -// This file is required by karma.conf.js and loads recursively all the .spec and framework files - -import 'zone.js/testing'; -import { getTestBed } from '@angular/core/testing'; -import { - BrowserDynamicTestingModule, - platformBrowserDynamicTesting -} from '@angular/platform-browser-dynamic/testing'; - -declare const require: { - context(path: string, deep?: boolean, filter?: RegExp): { - keys(): string[]; - (id: string): T; - }; -}; - -// First, initialize the Angular testing environment. -getTestBed().initTestEnvironment( - BrowserDynamicTestingModule, - platformBrowserDynamicTesting(), -); - -// Then we find all the tests. -const context = require.context('./', true, /\.spec\.ts$/); -// And load the modules. -context.keys().map(context); diff --git a/client/tsconfig.app.json b/client/tsconfig.app.json deleted file mode 100644 index 82d91dc..0000000 --- a/client/tsconfig.app.json +++ /dev/null @@ -1,15 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "./out-tsc/app", - "types": [] - }, - "files": [ - "src/main.ts", - "src/polyfills.ts" - ], - "include": [ - "src/**/*.d.ts" - ] -} diff --git a/client/tsconfig.json b/client/tsconfig.json deleted file mode 100644 index 23ddff6..0000000 --- a/client/tsconfig.json +++ /dev/null @@ -1,32 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "compileOnSave": false, - "compilerOptions": { - "baseUrl": "./", - "outDir": "./dist/out-tsc", - "forceConsistentCasingInFileNames": true, - "strict": true, - "strictPropertyInitialization": false, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true, - "sourceMap": true, - "declaration": false, - "downlevelIteration": true, - "experimentalDecorators": true, - "moduleResolution": "node", - "importHelpers": true, - "target": "es2017", - "module": "es2020", - "lib": ["es2020", "dom"] - }, - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true, - "strictPropertyInitialization": false, - "strict": true - } -} diff --git a/client/tsconfig.spec.json b/client/tsconfig.spec.json deleted file mode 100644 index 092345b..0000000 --- a/client/tsconfig.spec.json +++ /dev/null @@ -1,18 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "./out-tsc/spec", - "types": [ - "jasmine" - ] - }, - "files": [ - "src/test.ts", - "src/polyfills.ts" - ], - "include": [ - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} diff --git a/cloudbuild.yaml b/cloudbuild.yaml deleted file mode 100644 index a46f80c..0000000 --- a/cloudbuild.yaml +++ /dev/null @@ -1,67 +0,0 @@ -# Copyright 2022 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -steps: - # Build image from source - - name: gcr.io/cloud-builders/docker - id: Build image - args: - - build - - '-f' - - 'Dockerfile' - - '-t' - - '$_GCR_HOSTNAME/$PROJECT_ID/$_SERVICE_NAME/$_IMAGE_NAME:$SHORT_SHA' - - '-t' - - '$_GCR_HOSTNAME/$PROJECT_ID/$_SERVICE_NAME/$_IMAGE_NAME:latest' - - '--cache-from' - - '$_GCR_HOSTNAME/$PROJECT_ID/$_SERVICE_NAME/$_IMAGE_NAME:latest' - - '.' - - # Push image to Google Container Registry - - name: gcr.io/cloud-builders/docker - id: Push image - args: - - push - - '$_GCR_HOSTNAME/$PROJECT_ID/$_SERVICE_NAME/$_IMAGE_NAME:$SHORT_SHA' - - # Deploy to Cloud Run - - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk:slim' - id: Deploy to cloudrun - args: - - run - - deploy - - $_SERVICE_NAME - - '--image=$_GCR_HOSTNAME/$PROJECT_ID/$_SERVICE_NAME/$_IMAGE_NAME:$SHORT_SHA' - - '--platform=managed' - - '--region=$_DEPLOY_REGION' - - '--port=$_SERVICE_PORT' - - '--quiet' - entrypoint: gcloud - -# General configuration -images: - - '$_GCR_HOSTNAME/$PROJECT_ID/$_SERVICE_NAME/$_IMAGE_NAME:$SHORT_SHA' - - '$_GCR_HOSTNAME/$PROJECT_ID/$_SERVICE_NAME/$_IMAGE_NAME:latest' -options: - substitutionOption: ALLOW_LOOSE - logging: CLOUD_LOGGING_ONLY -substitutions: - _DEPLOY_REGION: europe-west3 - _GCR_HOSTNAME: eu.gcr.io - _PLATFORM: managed - _SERVICE_NAME: iftta - _SERVICE_PORT: '8080' - _IMAGE_NAME: 'iftta-service' -tags: - - iftta-service-$SHORT_SHA diff --git a/git/pre-commit b/git/pre-commit deleted file mode 100755 index 4d996c7..0000000 --- a/git/pre-commit +++ /dev/null @@ -1,67 +0,0 @@ -#!/bin/sh -# -# Copyright 2021 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# An example hook script to verify what is about to be committed. -# Called by "git commit" with no arguments. The hook should -# exit with non-zero status after issuing an appropriate message if -# it wants to stop the commit. - -PROJECT_DIR=$(pwd) -SERVER_DIR=$PROJECT_DIR/server -CLIENT_DIR=$PROJECT_DIR/client - -$PROJECT_DIR/add-licence-headers.sh - -# Test the server side -npm run pre-commit --prefix $SERVER_DIR - -# Test the client side -#npm run test-no-browser --prefix $PROJECT_DIR/client - -# Lint client -ESLINT_CLIENT_EXIT=0 -STAGED_FILES_CLIENT=($(git diff --diff-filter=d --cached --name-only ./client | grep -E '^.*src\/.*\.(js|jsx|tsx|ts)$')) - -if [[ ${#STAGED_FILES_CLIENT[@]} > 0 ]]; then - LINT_PATHS=() - - # Remove 'client/' from all paths - # eslint will be running from within client/ - for i in "${!STAGED_FILES_CLIENT[@]}" - do - DATA=${STAGED_FILES_CLIENT[$i]} - pattern="client/" - DATA=${DATA/$pattern/} - LINT_PATHS[$i]=$DATA - done - - # Actually lint - npm run lint --prefix ./client -- "${LINT_PATHS[@]}" --fix - - # Store exit code - ESLINT_CLIENT_EXIT="$?" - - # Re-add files since they may have been fixed - git add "${STAGED_FILES_CLIENT[@]}" -fi - -# Check if everything went well -if [[ "${ESLINT_CLIENT_EXIT}" == 0 ]]; then - printf "\n\e[30m\e[42mPRE-COMMIT CHECKS PASSED\e[0m\n" -else - printf "\n\e[41mPRE-COMMIT CHECKS FAILED\e[0m\n" - exit 1 -fi \ No newline at end of file diff --git a/img/api-notation-agg.png b/img/api-notation-agg.png new file mode 100644 index 0000000000000000000000000000000000000000..6496c0cdec6b6daeccce6444988c9ed824b5618e GIT binary patch literal 69369 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 BJiq_| literal 0 HcmV?d00001 diff --git a/img/dynamic-column-notation-headers-2.png b/img/dynamic-column-notation-headers-2.png new file mode 100644 index 0000000000000000000000000000000000000000..cf70816df9e25100f8764d0d0903f8acd79ff23a GIT binary patch literal 26601 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�xiL%&d3vQ0-MsRrYwPRgtFCkPYHRxzfZK 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 literal 0 HcmV?d00001 diff --git a/img/dynamic-column-notation-result-agg-json.png b/img/dynamic-column-notation-result-agg-json.png new file mode 100644 index 0000000000000000000000000000000000000000..80c51eef84561e47a1681a379c56971a9ae3b61a GIT binary patch literal 136813 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%0AoD#R+Y6JV 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 V{j7VNiHCxJloizEi)GD%{}0eOo8$lh literal 0 HcmV?d00001 diff --git a/img/dynamic-column-notation-result-agg.png b/img/dynamic-column-notation-result-agg.png new file mode 100644 index 0000000000000000000000000000000000000000..df71baa863da53cfed338496b7049419ba023d77 GIT binary patch literal 22352 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 E0Ub59P5=M^ literal 0 HcmV?d00001 diff --git a/img/dynamic-column-notation-result-json.png b/img/dynamic-column-notation-result-json.png new file mode 100644 index 0000000000000000000000000000000000000000..2dcceafed42b15c74b343528dc31ad320ca08aa8 GIT binary patch literal 135024 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 SY#Lk-4pLI#NrAY5@BaeGUB3YU literal 0 HcmV?d00001 diff --git a/img/dynamic-column-notation-result.png b/img/dynamic-column-notation-result.png new file mode 100644 index 0000000000000000000000000000000000000000..eaadb9c15e55ab08ee419ed62180538bae8ec36e GIT binary patch literal 26821 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 literal 0 HcmV?d00001 diff --git a/imgs/demo-video.png b/imgs/demo-video.png deleted file mode 100644 index 85d30d69f47ad0fea294946baa48f7d29c9e2d80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49026 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≀ad!0I8DMCcrV`QD{;;d-~LP zngkcOBeaqA9i}Pa`sQYDD1wnE6$#8o(rt91^YjJI_EHq!AYThcX-EXV7UhcfkP}89 zI6D@F@L(?r_fLQZlSBxZc0Ij)@q?ra80-Tp@jaWh@^w-;9sspfx=I3S29whm$q0g~ zU7>(GL5ht!<@u_JD`frhMPieO9h|k5`9*+M=*`6{}jEv^#2Yr2gYinx&r7vFMn*$Te%uG$O$OVbW$kJnD zRig@!K#O?Abbde}Ce?R}CkcqtzDi#*(9$NCR1$J@XFY$0jVi*gkQrB$f@7T*^mu` zwnaY!XhPoH++1D#wFW0eX-M%mrXP?Grl#55rhh`1JIy&&071h9wK}+wW785PT_$g!jl~fAHdPbvt{>|Jq(Sb0bswk*pQe zc106S6b7uEqUZ>>Dp3FchpR0HfH^-^-p7^@S#>@8G?9P|!@NDQKCjg%UXT5Sz7G#S zI{%pInxM!uvJa>d4B-oCW`oHbfRM`1!GVnsN@*WTC{gG@OeNhBc znt0~Y2N0Wrzwm<~z~E^@VzdD_FttOgOt*UjS$lDLnb3Ig zI6;RbO82YzdLpYHy?k<}&>g@EY_6^S4aWyI+QSg4GE6JwH-Jb@FW)0NDoTSnk+RH= zod_7>BwAK9WO8?Nxqiu_YLW;t5{8^ub91Ke17C|Nb#nQKAzxrzgs-V&(O?>%+PrGl zOqE$tXuOWGy;8EEH)s0i{=MDZl6-?^FAiw_J3BWq>(9a#9azPl5o1A;t-t%O{fcqlof^~G8lSA9 zKGpMRIT>V0&$cTJ*WoHUr@y@igcgi?O@s{*d3xdCK*f*ixu{x#Z{*3scY;!)`N)9D z9u>ilScUMnn|Ih#dywk$lgnETxo!*|DsBQvAM-`UjXa*YNwJ0Pb2cf>!b83)dCDciCZM9B2_YL(v{KgG%j7o^Yx$fK4IxZO8!myq8T*j8*yPTP z9|@WM(;14mPU6fGteSel2=qTvrrSD{9ubBNRBxsbjLRY}deYniHQ8;lp8Qas6NpnR zQ;>^xQA~6GUOC*~KTZ#feWZV-mM@>h8%N)b&uFD;aDujp_T%f_H3Ke3?i|2w$rO%7 z1j%V|oOBh`TY6jkRqHDK#KM~D0kFQ&*5n)wlltSU7$t3OqPPCS#TXy+TKm+u zB=e*w*A*NWfE1Qo+!iL_<~GMaeoaH{y7!do)D*7z0e{}XabT3}d<==PRs9R-44zz# z#n&-Bc+%V-4KYL$nE37fMjMG`#)heG(aQ5NccWM1>@qL6cAEv&L!V&S7(rs%j)w(y zaK^=7BLQM$2j>HzLuqizBEA}vrmzVqgdix1Wx*k|7T-lz-*E?Hx(kjcAuen_tG^!z zf;{chaVV61sgj=^8;}3E?PBG*y*WPdN@5XNky#zRObp6dg}|)5jm_ ziCF#s+@DL11g7f%f-Q*vkXlR2&C!5xKV|5)sUjRu?X6nEDGKW^G%UGrG+niUJTs%J=|*6~Q^$wB6k3Z#flD#KXswN!Q8CAdBiQ}} zu7+>!QI=;LkG;ISJUYbSvw1cTK8NFyAb0$d3H~%I?=xb2e2qg{U_ebF0&~s?W$Wcf zkh{V{HP!9Vkcf>BY9EV3q{?>x?D}o%U_7RKb6D6@o=M+pWc{`hQ?4$d_pIa35HwEZd|I};|jeuqQ3Dz?Chn-hf@m+jZ9R}Ewv=_kjeg8gLXiSE0+sNM{Ha)#8eIqyYwNMry(c4y$8?lDCRE2=iK3sR! zYL<-`g#-uB?8aqy0%BUt5XL9S5m-DQZ~aG`2Uf4SS&*p?5~RD;H{ARI7(rBy|2bD? z(k>iul{UD29l=Ab%ENYs5}$WIrdFah%sN8?F0QYkA_2lQG~(C8^zV}}_R}|W2J@9K zqomA$GmhZ|2CY)Nt(43mIx)cz*$=cWq58D}1np2n-?(i=zuO=HA-vqDPpjmqhgW-z8 z(|!lpEqPL)n6Ar@?cHZ+j}8u{a3d-14X2U*Rw$-^IftdBAwe8g9DkBXFZpISLIcGe zql~&hPYH3ATR)>tA-4L+p6OIaOoNz+s4%^);7;BpG;ie#-44rJUZ(f18!vVp)fwiB zAYkPwkI5$<$hkbStzzQ%p*FC}v{!ze1 z`rzDL+C&NX`*#TJUERH@9Hy@TA0obeuM>+ca-%H7_!eGONrjh}mr*)}ead|18hXVw z2Z+64&mKKU!xBW5gwC+?Ly3h>FN}wx9p*O8(4AaM2B}o(cz6;gSDq|mAks-;|h>tHJbWRg4J0lIk8cUvm zUl`|Pbsz#RZIreF@f1auAJf;+d2MB2x#?*+o>@E(^WVU)5cmd1K*+i!B#kfUsLw6K z#JW}FUhBvWS+=f@&yt(M%4+~2YB9r4qIk9np#G{Mw0YzW16d-7b0B_AtAl>e9nH_v zR7T*7apz;GfHb1H7%7-!e=Ln#WHT`!BcQbLDO4?ir=FNYW`+$j|<^GIcX5A0{p zX4?YVilMbRgtuMAS7apO0yoMU^y2B(sdOImn9|r zevP(^`{>^~hwOfTahgw`ULZ6qrRiq2v$ z1Xp-PAxg2udtnA#KjqWoj+Ir zbG^huhbIiCIrPX_iAjzbMD5=i?J^dSVv}V^ue8!7% zB4jP^Gco&7pgx6Lryp-=0UIYRP!kloWHJ{HoCE%PAkSLFt{Q|uS%CA6fJf<4YMgpL zu^97dLx!mGAah@FAV2CPo8AL~j-_gHV%RwOdB!;KA@cCPRW;Zq>{^!sUHuR&W1f8A zWGBAQ@gTs@-7D}Y)^!`$B%(@AX^Wby+8~bpCu7nUO_VhhN>bK5`Bluz2FeT!Vx<8e zW%{LNS(My`GqOBLhK*!YH*B|iva(nbLdjIlO((xGzzQigzieeE{n^;6buBW~(1<#F&+~25?qyTK|OAWv6E!MnrYF5{vFd*}5 z9eZVsFaN{Id;Gdoep{Iy?tvUn`+Cone$6ub|T&ge=*E2bbtx>H#hLe>^?2; z=j5;O*e{d6%scHXx*Df0Mq_cbmDeEAFo-Wnb#O5(-ZB0{j+$G3@|X+1sWCZ}BWmZg zlNj6=H@j+6n`I|m#^=Fm%&kS8 za>)9?9rDG=^OKM23Slhw`$B>xNefcMpqPD2kA91pTz|O9PB5eKG->(~N81@2cq`CJyP7&rUXYXHfT|l711_)B& zegVTFwRt=s9L%BNE@b*n&UAckaY|_72a{{UUts!tU6v{MEW50eb2@9H*rbfJCh3k= zlnf6{rs5kPL#sz7AF(66tG2?Y&^h+oMLA%?>TY7SHyY$fhKtBCSf-vV+A_>pka?q~ zvRzzMG9jvn%v-2<_u6Q;{1y;nKR{j!Hsb(f7K z8)53>f($u1IS82Z7KfoFREy&DetD^-%}_HT0Oej_#Qc@%?d!0&XjHU$iF8pRg(lon zv>$n!*dH5ElG#brBs)x*6aGZCxuS9+8rvR7J2)1K@b(q9MfwR_XO=C+bpZ8x~{ZuXA@$(`qbJ_%TVn?O=L6-FA1X8&Nwv zp(K(%(vNO9^nP2rbIL1zX9{&=w#Q-VO8b!bTe{-@hOH4~JMRu>cL(ieB?dlB=Ajh= z=rK15d|rP8|Li=?DVyp^=|+xOoWd}2>Y#dXQ&TP4bSi<7c5=o6#U@s&juV0V8Iz+M z7lX`1jZ|A(G}o>16kZBu8r>RA3}tE1YN*iwm{(fOvYwW*_tTr={@QyR9z z5pML8ef%03JJNYax!(~SQUOMMauXWV-8K7d_jizN%SnWy`OlF#?k3m2vpo!#EpE0d zDKLzb2rzF}U1)UGlt6$j!^qooK396jNKozVNfUSQ+YzgcXhxALp+E1LzhMF0VH9Kn zEurs^5Nyq5W#eYiLT9iFKjagUi=O};m=<)mkf8&z-613MUX7GwwnRHw%pU6GaQA*v+4wm zumDC!5sAcfH@%Lz7c1n>qxK_Z_RQ69T!m`2?6+L9UtjDep<|~mk{FfVY)gTZgfGp{ z1Lu0pT;0MyXvrqLEw-ibF0Es7wmY0(E1pfG8|q(GNo9$q@EXnm-2U-pXXJg@PuZLC z)h9@81>)=I)L7|>6(+phof)50zCbNu5L*}9kI6T4E zKfE|DmDXZRN6;PSCNIK6n4KE)~j-h7TLiZ zqI>z#;}I;8vf5?oAvNC9tAR}d+o9htyN8hW9hDD_(^)p*e}b*G zWJGN36sJ10*p&4Z9iLEKv_HARhJ1fiHIEAh%|BkZ+g*2=<2M@7hBdN^CzW@1k;70; z$}nq4S|&x8Cqd;{B6ZTdHT?9YkNB%CnWyGxK4{#CUg4JW})xP_>dTXiSwy)aL5iYdfd^|if)^Vkn zIHeEhGuj+wrwBk8`+_v}GaH2(Yt!ExtDf77q&0BFp3JYC{!rLwZZh#8>14Shs+T^G zJLHBLNO)K@I{o?J=ai`CnQ-3QUw!9@WuJPitu~*r#`np&>a;GNX%VQ#^fpseEoDUw zr?9hq>jm%t=jUQnqBTrdx=12|B2U3Udrw!~vPGNvVzX$wizb~PF~|*p8U-8DJKLzA z4L)T-rOcg$L!=ITkY^=GW$XFw-95p%$zgnh$6u?^d)qRZb+=NAdpJ11p&b%X8+TW= zefhm_e)4{9TQ|PhH>XmR=ZpXEPF^7d#mLy&R}dmcWwZ3sPSi-CGgO?i%b#TmVKrvCX*s3{MyU48)9;C)w z_8kf88S`SMx%vG>L|f#H6qWTXuwO;9Y-cz>EkbUl-lDr><=G<{)ORIK`I0$;3mzr> zXN8NsJe{wN_Zw9e?TlI=u%#shFE_$>`}BEW!cFJUrS4sa4*KbEUiT_F@|F~j+a;!z zj!@x~tf%SDG7;uZzs72%I)`4pZ;IDXBC_P28XAK^iVQt+r*Ped4w|^0836kb4O{{% zFKj9@plp&IeeqJkv+{l&6fmpNIu%WgeKzDp8QDf)^H$YN;>PRwrOhO(Nwdp*)!p5B zTm7cTX3~82UHMO={*k|-A~z-h%dsq8*8V_o`dReMrR5J+|NHA@Ba!)wgMG|R*hiQE zp;7NA7!N<{%FI`)aRiW8@!wwn3MD`uIdCBdpf=!)cO*k-e!2dd4E8aQh-$NVg*1-E z<4=nRQn$Rn@cKK?Q1g_XfNi;pkPhH>!+$Wj`ueRyo5xJOt2&tE?64hm8oa!BEbYg@ zH8Y1uJm`f4+}SzY^|WbkUL+WtDmpR{G!Ipc=|CsoJx&tUR#g~MK;h-FyiXCv#iKILSN{hNUs#{~c22P1; z>NG(x%PNI*{Xw33h2~`f-qpv^If|Zd<8(j2!7icOjzBgY2eb`|9OHP0Et?`r<&4`%U_g8R#3y#DCU-ii@4>`QhB=kq( zq&oQTc`o~%6S;BzKxlrs93b{NwvRrGD;oHHgf_imJCIVc5b0W4ebKSPuu#`2vj+1L zQo^%%rE~~(ohR|+jwmnF&uHok6P#*r9N<;84LvI0_!dxS5lUe6@z&*7fmLzcVY&h< z848|0VP{tA8Ao0e9?P3eTNfhxda0D_x(lDPx`a!52Gdy-sS0(z8Ua5pyI3y2RElKX zeLXTGP0I8rMdSWvQ$+8x)SmSnuvaJHE2FB{E_*t|3*kA7L5t)(;@pM?gY~m?zhv^b zv-1RTn#t%3;E8#QEJyEg3%MCq(=2imQxMeq5?>*ERlPeq^+RlW(MimD69!q38lQqi z*29!tDlTTM)T#u#PnEj(%C^r|oU}pK)w5(RE2q;ZP_RIlkR(FE)33K&&Nf{_aLP+G zie1-sf+n~trox?Hd-wMg;Od6P>64nO ztbHX8kAQmM@WcL{)Eu4SDVC^5Ew(sBodX3PO#9>~(ybWNYt&_til8=4S&h78(#;7y4XxigE5Bn-twNt{Ad;d|4+>~&WgPgYDlOsTgxPLH?|2PB^^rc+#_X_R0KVQ9;l~9eQ z&!K8MpPP2FWAvIM_v8I?TOf{Wr;fg>B!}@lhAjuJ*K_Zw?(FZB?B-eIu+2r;`R1)VmtLQVE4$i03Cf&8}R&X)rMZamRO zNl_>of-LM0O@ABe*QU(v?tw$8vo>fY_e#u^ag4S$h0hy#$iqfx^{m#^%9piGa1XL? z@;vvTPe+t;N`yz^Xb=0kv6!mg9Mlb`k=bo&f5WWlFB$yTjDismXeuP~ItvaItkDixYB7xBKbfu>Po*-PE}6BT z+GJUEEkwuF*gGeDPInFma;tu`2m{YWZYhLA*^(D-U254L_}R)|KL3FjCTi`?G-Wkr zG20Rto*eUK)AJP;f|{Pu?BOdr4;v6xr@@b(a~iz?rzJ*+>J6q?X{}S0UHcx^KiY?H zVfLkUWi#bk|6&iR5L*C!S<29+6G=yzja}Hc0x$#ip^3zQG9?dYv=7Yns_}AQKs7~c z?UwE5wr{FR!0*l%$e0cLRjpk{GB0Y-KG!v2W)?>11QfH^=`}g>aq6UZR8U)g(-K(T zC%~K@p_TkptkHp(cWhhK_~Gbbb6OE_YfI8Z+8SiR(P_%?y<4(mC}S>b#yJY=+I-97 z;=q8X82|Z|P8qL9w%wUNnUmfe#7%?okh{CwhLpBfQNUv?;u!AkR^P}m8QnH9+~F?% z(`yxJ64A}nh+PyK^7`QRxzWW3R{RJdS<++|PScSYeBwtbt1Uv3cePnk0M}b&ZAK@3O9O(pbP;|wq-kCvCA&qwc7}z z8)`=ipF(?2cj3!G=X9gf0+HJyA^PKw^&T}Pl*KE|5knxJ@QbjOZYaO|j==Jzq9<#g z<$a=4=`VR?7=KB{hMi$i3jkL0lSEmin%|M%vgr^adQxSJttqSy_j05{~?~! zBs*zyu?yG4x2fXN#iPmgQmc~fQeIPoUQKRK6s$fc4wdZ%CxM3I*bgz<&RY(;M`&9s zWVEhD5}!`tWKo-l{B3`XV@-Xx(cit0ODK{JWL0{3NR`4P@de6>TDp96P1*4?>^nBgFt)EK zYA#WB)3-T&Jl{fjE!QpSftwZ?1o6V}OzqDOhk!`?&u79N^dQH^^~7!SgiS@E+zeDZ{{cJ$0x_r$2#=J4$PI%!hvWk{7P$-=EQV&nqRwOY zJ63(t1ih;RINRH3Ke!rBZJJSB&&&dl4k~g#$TgBC?8gsp1(?v{0Ad!LOz(63Hvbkw zcE=&0QBgxfKX3(rfITs~`3;;oUM+#>?QPpYF9KKl>BUPR{%G^smLPgI+FU{{E^@tB zvncsyd=Uto{ENcT4rCt!um@mKg)?vI8GL%Ze1A8Sgz|gY?Q{nLme`I4w5CR(e+npI*~Ng;p1^0Q?@&&ypA7`>&;)tfZnu`3K|R{{wAY9bf/dist'], +}; diff --git a/license-headers/html b/license-headers/html deleted file mode 100644 index 24e4f4f..0000000 --- a/license-headers/html +++ /dev/null @@ -1,12 +0,0 @@ - \ No newline at end of file diff --git a/license-headers/js b/license-headers/js deleted file mode 100644 index 24851d7..0000000 --- a/license-headers/js +++ /dev/null @@ -1,12 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ \ No newline at end of file diff --git a/license-headers/md b/license-headers/md deleted file mode 100644 index 24e4f4f..0000000 --- a/license-headers/md +++ /dev/null @@ -1,12 +0,0 @@ - \ No newline at end of file diff --git a/license-headers/scss b/license-headers/scss deleted file mode 100644 index 24851d7..0000000 --- a/license-headers/scss +++ /dev/null @@ -1,12 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ \ No newline at end of file diff --git a/license-headers/ts b/license-headers/ts deleted file mode 100644 index 24851d7..0000000 --- a/license-headers/ts +++ /dev/null @@ -1,12 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ \ No newline at end of file diff --git a/license-headers/yaml b/license-headers/yaml deleted file mode 100644 index 6f36eec..0000000 --- a/license-headers/yaml +++ /dev/null @@ -1,13 +0,0 @@ -# Copyright 2022 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. \ No newline at end of file diff --git a/server/package-lock.json b/package-lock.json similarity index 52% rename from server/package-lock.json rename to package-lock.json index a4982a3..57e12ef 100644 --- a/server/package-lock.json +++ b/package-lock.json @@ -1,58 +1,28 @@ { - "name": "server", - "version": "1.0.0", + "name": "event-based-marketing", + "version": "0.0.1", "lockfileVersion": 2, "requires": true, "packages": { "": { - "version": "1.0.0", - "license": "Apache-2.0", - "dependencies": { - "@google-cloud/connect-firestore": "^2.0.2", - "@google-cloud/debug-agent": "^5.2.8", - "@google-cloud/firestore": "^4.15.1", - "@google-cloud/logging-winston": "^4.1.1", - "@google-cloud/pubsub": "^2.18.4", - "axios": "^0.25.0", - "body-parser": "^1.19.1", - "cors": "^2.8.5", - "dotenv": "^10.0.0", - "express": "^4.17.1", - "express-session": "^1.17.2", - "googleapis": "^91.0.0", - "module-alias": "^2.2.2", - "oauth": "^0.10.0", - "passport": "^0.5.2", - "passport-google-oauth20": "^2.0.0", - "typescript": "^4.5.4", - "winston": "^3.3.3" - }, + "name": "event-based-marketing", + "version": "0.0.1", "devDependencies": { - "@types/cors": "^2.8.12", - "@types/errorhandler": "^1.5.0", - "@types/express": "^4.17.13", - "@types/express-session": "^1.17.4", - "@types/jest": "^27.4.0", - "@types/node": "^16.11.10", - "@types/passport": "^1.0.7", - "@types/passport-google-oauth20": "^2.0.11", - "@typescript-eslint/eslint-plugin": "^5.4.0", - "@typescript-eslint/parser": "^5.4.0", - "axios-mock-adapter": "^1.21.2", - "concurrently": "^6.4.0", - "eslint": "^8.16.0", + "@google/clasp": "^2.4.2", + "@rollup/plugin-node-resolve": "^15.0.1", + "@types/google-apps-script": "^1.0.57", + "@types/google-apps-script-oauth2": "^38.0.0", + "@types/jest": "^29.4.0", + "eslint": "^8.34.0", "eslint-config-google": "^0.14.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-prettier": "^4.0.0", - "jest": "^27.5.1", - "nodemon": "^2.0.15", - "prettier": "^2.5.0", - "ts-jest": "^27.1.3", - "ts-node": "^10.4.0", - "typescript": "^4.5.4" - }, - "engines": { - "node": ">= 12.0.0" + "eslint-config-prettier": "^8.6.0", + "eslint-plugin-prettier": "^4.2.1", + "jest": "^29.4.3", + "prettier": "^2.8.4", + "rollup": "^3.17.2", + "rollup-plugin-cleanup": "^3.2.1", + "ts-jest": "^29.0.5", + "typescript": "^4.9.5" } }, "node_modules/@ampproject/remapping": { @@ -81,34 +51,34 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", - "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz", + "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.9.tgz", - "integrity": "sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.0.tgz", + "integrity": "sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA==", "dev": true, "dependencies": { - "@ampproject/remapping": "^2.1.0", + "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.9", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helpers": "^7.18.9", - "@babel/parser": "^7.18.9", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9", + "@babel/generator": "^7.21.0", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-module-transforms": "^7.21.0", + "@babel/helpers": "^7.21.0", + "@babel/parser": "^7.21.0", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", + "json5": "^2.2.2", "semver": "^6.3.0" }, "engines": { @@ -119,23 +89,21 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } + "node_modules/@babel/core/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 }, "node_modules/@babel/generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.9.tgz", - "integrity": "sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug==", + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz", + "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==", "dev": true, "dependencies": { - "@babel/types": "^7.18.9", + "@babel/types": "^7.21.0", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "engines": { @@ -157,14 +125,15 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", - "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", + "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.18.8", + "@babel/compat-data": "^7.20.5", "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", "semver": "^6.3.0" }, "engines": { @@ -174,15 +143,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/helper-environment-visitor": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", @@ -193,13 +153,13 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", - "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", "dev": true, "dependencies": { - "@babel/template": "^7.18.6", - "@babel/types": "^7.18.9" + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -230,40 +190,40 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", - "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.0.tgz", + "integrity": "sha512-eD/JQ21IG2i1FraJnTMbUarAUkA7G988ofehG5MDCRXaUU91rEBJuCeSoou2Sk1y4RbLYXzqEg1QLwEmRU4qcQ==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", - "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -281,33 +241,42 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", + "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", - "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", + "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", "dev": true, "dependencies": { - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -399,9 +368,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.9.tgz", - "integrity": "sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg==", + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.1.tgz", + "integrity": "sha512-JzhBFpkuhBNYUY7qs+wTzNmyCWUHEaAFpQQD2YfU1rPL38/L43Wvid0fFkiOCnHvsGncRZgEPyGnltABLcVDTg==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -470,6 +439,21 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", @@ -558,12 +542,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", - "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", + "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.19.0" }, "engines": { "node": ">=6.9.0" @@ -573,33 +557,33 @@ } }, "node_modules/@babel/template": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", - "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.6", - "@babel/types": "^7.18.6" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.9.tgz", - "integrity": "sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.0.tgz", + "integrity": "sha512-Xdt2P1H4LKTO8ApPfnO1KmzYMFpp7D/EinoXzLYN/cHcBNrVCAkAtGUcXnHXrl/VGktureU6fkQrHSBE2URfoA==", "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.9", + "@babel/generator": "^7.21.0", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.9", - "@babel/types": "^7.18.9", + "@babel/parser": "^7.21.0", + "@babel/types": "^7.21.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -607,22 +591,14 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/traverse/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, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/types": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz", - "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.0.tgz", + "integrity": "sha512-uR7NWq2VNFnDi7EYqiRz2Jv/VQIu38tu64Zy8TX2nQFQ6etJ9V/Rr2msW8BS132mum2rL645qpDrLtAJtVpuow==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" }, "engines": { @@ -635,56 +611,16 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "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==", - "dependencies": { - "colorspace": "1.1.x", - "enabled": "2.0.x", - "kuler": "^2.0.0" - } - }, "node_modules/@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", + "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.0", + "espree": "^9.4.0", + "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -693,336 +629,221 @@ }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@google-cloud/common": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-3.10.0.tgz", - "integrity": "sha512-XMbJYMh/ZSaZnbnrrOFfR/oQrb0SxG4qh6hDisWCoEbFcBHV0qHQo4uXfeMCzolx2Mfkh6VDaOGg+hyJsmxrlw==", - "dependencies": { - "@google-cloud/projectify": "^2.0.0", - "@google-cloud/promisify": "^2.0.0", - "arrify": "^2.0.1", - "duplexify": "^4.1.1", - "ent": "^2.2.0", - "extend": "^3.0.2", - "google-auth-library": "^7.14.0", - "retry-request": "^4.2.2", - "teeny-request": "^7.0.0" }, - "engines": { - "node": ">=10" + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@google-cloud/connect-firestore": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@google-cloud/connect-firestore/-/connect-firestore-2.0.2.tgz", - "integrity": "sha512-2sIqeEYetoGQYKjoVkJgGWrBdR83S8ru0ri1eFlgEib/nAas86oIQVVjCefH2YaNiXTng28AMf1YCspSiW8YlQ==", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@google-cloud/firestore": "^4.0.0" - } + "node_modules/@eslint/eslintrc/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==", + "dev": true }, - "node_modules/@google-cloud/debug-agent": { - "version": "5.2.9", - "resolved": "https://registry.npmjs.org/@google-cloud/debug-agent/-/debug-agent-5.2.9.tgz", - "integrity": "sha512-VnHwkQqWawSLsN1EXCmox3//jhehoV0kCI7bgsaBARF3B+/U2p1CCGbF05JNj/Z6S5g8C9ZQIbWCSLD4P1mcYQ==", + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, "dependencies": { - "@google-cloud/common": "^3.0.0", - "acorn": "^8.0.0", - "coffeescript": "^2.0.0", - "console-log-level": "^1.4.0", - "extend": "^3.0.2", - "findit2": "^2.2.3", - "gcp-metadata": "^4.0.0", - "p-limit": "^3.0.1", - "semver": "^7.0.0", - "source-map": "^0.7.3", - "split": "^1.0.0" + "type-fest": "^0.20.2" }, "engines": { - "node": ">=10" - } - }, - "node_modules/@google-cloud/firestore": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-4.15.1.tgz", - "integrity": "sha512-2PWsCkEF1W02QbghSeRsNdYKN1qavrHBP3m72gPDMHQSYrGULOaTi7fSJquQmAtc4iPVB2/x6h80rdLHTATQtA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "functional-red-black-tree": "^1.0.1", - "google-gax": "^2.24.1", - "protobufjs": "^6.8.6" + "node": ">=8" }, - "engines": { - "node": ">=10.10.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@google-cloud/logging": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/@google-cloud/logging/-/logging-9.9.0.tgz", - "integrity": "sha512-rJQ0i9COI1WbtWuGyXL8edF4OA3XHcvgAq5I2DZmjKFvmCLCcspFIWZtztxgd0UgmrrshQVZ0R76oBHjTGggkg==", + "node_modules/@eslint/eslintrc/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, "dependencies": { - "@google-cloud/common": "^3.4.1", - "@google-cloud/paginator": "^3.0.0", - "@google-cloud/projectify": "^2.0.0", - "@google-cloud/promisify": "^2.0.0", - "arrify": "^2.0.1", - "dot-prop": "^6.0.0", - "eventid": "^2.0.0", - "extend": "^3.0.2", - "gcp-metadata": "^4.0.0", - "google-auth-library": "^7.0.0", - "google-gax": "^2.24.1", - "on-finished": "^2.3.0", - "pumpify": "^2.0.1", - "stream-events": "^1.0.5", - "uuid": "^8.0.0" + "argparse": "^2.0.1" }, - "engines": { - "node": ">=10" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@google-cloud/logging-winston": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@google-cloud/logging-winston/-/logging-winston-4.2.4.tgz", - "integrity": "sha512-As2h5hH6Y+5AGeqL51tPLASrfvIbuY7awePCnHuTHIGwpikUtGCpYWe2/AuufXmDB5z5c1fjoCJDkIbrx8SBhA==", - "dependencies": { - "@google-cloud/logging": "^9.6.9", - "google-auth-library": "^7.0.0", - "lodash.mapvalues": "^4.6.0", - "winston-transport": "^4.3.0" - }, + "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, "engines": { "node": ">=10" }, - "peerDependencies": { - "winston": ">=3.2.1" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@google-cloud/paginator": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-3.0.7.tgz", - "integrity": "sha512-jJNutk0arIQhmpUUQJPJErsojqo834KcyB6X7a1mxuic8i1tKXxde8E69IZxNZawRIlZdIK2QY4WALvlK5MzYQ==", + "node_modules/@google/clasp": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@google/clasp/-/clasp-2.4.2.tgz", + "integrity": "sha512-SrHzWSotR8c7mNBVwH81sFCc4HhoDrCevicJehQlvrvgdTvLIiU0Pfb5EYCzWUPBSC4Ez/nvW6wxsgaK7RrPjQ==", + "dev": true, "dependencies": { - "arrify": "^2.0.0", - "extend": "^3.0.2" + "@sindresorhus/is": "^4.0.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.2", + "cli-truncate": "^3.0.0", + "commander": "^8.1.0", + "debounce": "^1.2.1", + "dotf": "^2.0.2", + "find-up": "^6.0.0", + "fs-extra": "^10.0.0", + "fuzzy": "^0.1.3", + "google-auth-library": "^7.6.2", + "googleapis": "^84.0.0", + "inquirer": "^8.1.2", + "inquirer-autocomplete-prompt-ipt": "^2.0.0", + "is-reachable": "^5.0.0", + "log-symbols": "^5.0.0", + "loud-rejection": "^2.2.0", + "make-dir": "^3.1.0", + "multimatch": "^5.0.0", + "normalize-newline": "^4.1.0", + "open": "^8.2.1", + "ora": "^6.0.0", + "p-map": "^5.1.0", + "read-pkg-up": "^8.0.0", + "recursive-readdir": "^2.2.2", + "server-destroy": "^1.0.1", + "split-lines": "^3.0.0", + "strip-bom": "^5.0.0", + "ts2gas": "^4.2.0", + "typescript": "^4.4.2" + }, + "bin": { + "clasp": "build/src/index.js" }, "engines": { - "node": ">=10" - } - }, - "node_modules/@google-cloud/precise-date": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@google-cloud/precise-date/-/precise-date-2.0.4.tgz", - "integrity": "sha512-nOB+mZdevI/1Si0QAfxWfzzIqFdc7wrO+DYePFvgbOoMtvX+XfFTINNt7e9Zg66AbDbWCPRnikU+6f5LTm9Wyg==", - "engines": { - "node": ">=10.4.0" - } - }, - "node_modules/@google-cloud/projectify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-2.1.1.tgz", - "integrity": "sha512-+rssMZHnlh0twl122gXY4/aCrk0G1acBqkHFfYddtsqpYXGxA29nj9V5V9SfC+GyOG00l650f6lG9KL+EpFEWQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/@google-cloud/promisify": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-2.0.4.tgz", - "integrity": "sha512-j8yRSSqswWi1QqUGKVEKOG03Q7qOoZP6/h2zN2YO+F5h2+DHU0bSrHCK9Y7lo2DI9fBd8qGAw795sf+3Jva4yA==", - "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/@google-cloud/pubsub": { - "version": "2.19.4", - "resolved": "https://registry.npmjs.org/@google-cloud/pubsub/-/pubsub-2.19.4.tgz", - "integrity": "sha512-+aZxq6N5XGarQS3xGXjKSRFy4TB+3PMpI0CBmSrcC59g3TB5nmwps3pv/KkdLa0Cd+CPHDdfrEW1uSrGBMLICw==", + "node_modules/@google/clasp/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, "dependencies": { - "@google-cloud/paginator": "^3.0.6", - "@google-cloud/precise-date": "^2.0.0", - "@google-cloud/projectify": "^2.0.0", - "@google-cloud/promisify": "^2.0.0", - "@opentelemetry/api": "^1.0.0", - "@opentelemetry/semantic-conventions": "^1.0.0", - "@types/duplexify": "^3.6.0", - "@types/long": "^4.0.0", - "arrify": "^2.0.0", - "extend": "^3.0.2", - "google-auth-library": "^7.0.0", - "google-gax": "2.30.3", - "is-stream-ended": "^0.1.4", - "lodash.snakecase": "^4.1.1", - "p-defer": "^3.0.0" + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@google-cloud/pubsub/node_modules/@grpc/proto-loader": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.9.tgz", - "integrity": "sha512-UlcCS8VbsU9d3XTXGiEVFonN7hXk+oMXZtoHHG2oSA1/GcDP1q6OUgs20PzHDGizzyi8ufGSUDlk3O2NyY7leg==", + "node_modules/@google/clasp/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, "dependencies": { - "@types/long": "^4.0.1", - "lodash.camelcase": "^4.3.0", - "long": "^4.0.0", - "protobufjs": "^6.10.0", - "yargs": "^16.2.0" - }, - "bin": { - "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + "p-locate": "^6.0.0" }, "engines": { - "node": ">=6" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@google-cloud/pubsub/node_modules/google-gax": { - "version": "2.30.3", - "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-2.30.3.tgz", - "integrity": "sha512-Zsd6hbJBMvAcJS3cYpAsmupvfsxygFR2meUZJcGeR7iUqYHCR/1Hf2aQNB9srrlXQMm91pNiUvW0Kz6Qld8QkA==", + "node_modules/@google/clasp/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, "dependencies": { - "@grpc/grpc-js": "~1.6.0", - "@grpc/proto-loader": "0.6.9", - "@types/long": "^4.0.0", - "abort-controller": "^3.0.0", - "duplexify": "^4.0.0", - "fast-text-encoding": "^1.0.3", - "google-auth-library": "^7.14.0", - "is-stream-ended": "^0.1.4", - "node-fetch": "^2.6.1", - "object-hash": "^3.0.0", - "proto3-json-serializer": "^0.1.8", - "protobufjs": "6.11.2", - "retry-request": "^4.0.0" - }, - "bin": { - "compileProtos": "build/tools/compileProtos.js" + "yocto-queue": "^1.0.0" }, "engines": { - "node": ">=10" - } - }, - "node_modules/@google-cloud/pubsub/node_modules/protobufjs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", - "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", - "hasInstallScript": true, - "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/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^4.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "bin": { - "pbjs": "bin/pbjs", - "pbts": "bin/pbts" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@grpc/grpc-js": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.6.8.tgz", - "integrity": "sha512-Nt5tufF/O5Q310kP0cDzxznWMZW58GCTZhUUiAQ9B0K0ANKNQ4Lj/K9XK0vZg+UBKq5/7z7+8mXHHfrcwoeFJQ==", + "node_modules/@google/clasp/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, "dependencies": { - "@grpc/proto-loader": "^0.7.0", - "@types/node": ">=12.12.47" + "p-limit": "^4.0.0" }, "engines": { - "node": "^8.13.0 || >=10.10.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@grpc/grpc-js/node_modules/@grpc/proto-loader": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.0.tgz", - "integrity": "sha512-SGPZtVmqOvNfPFOA/nNPn+0Weqa5wubBgQ56+JgTbeLY2VezwtMjwPPFzh0kvQccwWT3a2TXT0ZGK/pJoOTk1A==", - "dependencies": { - "@types/long": "^4.0.1", - "lodash.camelcase": "^4.3.0", - "long": "^4.0.0", - "protobufjs": "^7.0.0", - "yargs": "^16.2.0" - }, - "bin": { - "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" - }, + "node_modules/@google/clasp/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, "engines": { - "node": ">=6" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/@grpc/grpc-js/node_modules/protobufjs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.0.0.tgz", - "integrity": "sha512-ffNIEm+quOcYtQvHdW406v1NQmZSuqVklxsXk076BtuFnlYZfigLU+JOMrTD8TUOyqHYbRI/fSVNvgd25YeN3w==", - "hasInstallScript": true, - "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/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, + "node_modules/@google/clasp/node_modules/strip-bom": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-5.0.0.tgz", + "integrity": "sha512-p+byADHF7SzEcVnLvc/r3uognM1hUhObuHXxJcgLCfD194XAkaLbjq3Wzb0N5G2tgIjH0dgT708Z51QxMeu60A==", + "dev": true, "engines": { - "node": ">=12.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@grpc/grpc-js/node_modules/protobufjs/node_modules/long": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.0.tgz", - "integrity": "sha512-9RTUNjK60eJbx3uz+TEGF7fUr29ZDxR5QzXcyDpeSfeH28S9ycINflOgOlppit5U+4kNTe83KQnMEerw7GmE8w==" - }, - "node_modules/@grpc/proto-loader": { - "version": "0.6.13", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.13.tgz", - "integrity": "sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g==", - "dependencies": { - "@types/long": "^4.0.1", - "lodash.camelcase": "^4.3.0", - "long": "^4.0.0", - "protobufjs": "^6.11.3", - "yargs": "^16.2.0" - }, - "bin": { - "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" - }, + "node_modules/@google/clasp/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, "engines": { - "node": ">=6" + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, + "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, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", @@ -1045,100 +866,69 @@ "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==", + "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, - "dependencies": { - "sprintf-js": "~1.0.2" + "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==", + "node_modules/@jest/console": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.4.3.tgz", + "integrity": "sha512-W/o/34+wQuXlgqlPYTansOSiBnuxrTv61dEVkA6HNmpcgHLUjfaUbdqt6oVvOzaawwo9IdW9QOtMgQ1ScSZC4A==", "dev": true, "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@istanbuljs/load-nyc-config/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, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.4.3", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-message-util": "^29.4.3", + "jest-util": "^29.4.3", "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.4.3.tgz", + "integrity": "sha512-56QvBq60fS4SPZCuM7T+7scNrkGIe7Mr6PVIXUpu48ouvRaWOFqRPV91eifvFM0ay2HmfswXiGf97NGUN5KofQ==", "dev": true, "dependencies": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.4.3", + "@jest/reporters": "^29.4.3", + "@jest/test-result": "^29.4.3", + "@jest/transform": "^29.4.3", + "@jest/types": "^29.4.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "emittery": "^0.8.1", + "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", + "jest-changed-files": "^29.4.3", + "jest-config": "^29.4.3", + "jest-haste-map": "^29.4.3", + "jest-message-util": "^29.4.3", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.4.3", + "jest-resolve-dependencies": "^29.4.3", + "jest-runner": "^29.4.3", + "jest-runtime": "^29.4.3", + "jest-snapshot": "^29.4.3", + "jest-util": "^29.4.3", + "jest-validate": "^29.4.3", + "jest-watcher": "^29.4.3", "micromatch": "^4.0.4", - "rimraf": "^3.0.0", + "pretty-format": "^29.4.3", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -1150,85 +940,110 @@ } }, "node_modules/@jest/environment": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", - "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.4.3.tgz", + "integrity": "sha512-dq5S6408IxIa+lr54zeqce+QgI+CJT4nmmA+1yzFgtcsGK8c/EyiUb9XQOgz3BMKrRDfKseeOaxj2eO8LlD3lA==", "dev": true, "dependencies": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/fake-timers": "^29.4.3", + "@jest/types": "^29.4.3", "@types/node": "*", - "jest-mock": "^27.5.1" + "jest-mock": "^29.4.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.4.3.tgz", + "integrity": "sha512-iktRU/YsxEtumI9zsPctYUk7ptpC+AVLLk1Ax3AsA4g1C+8OOnKDkIQBDHtD5hA/+VtgMd5AWI5gNlcAlt2vxQ==", + "dev": true, + "dependencies": { + "expect": "^29.4.3", + "jest-snapshot": "^29.4.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.4.3.tgz", + "integrity": "sha512-/6JWbkxHOP8EoS8jeeTd9dTfc9Uawi+43oLKHfp6zzux3U2hqOOVnV3ai4RpDYHOccL6g+5nrxpoc8DmJxtXVQ==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.4.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/fake-timers": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", - "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.4.3.tgz", + "integrity": "sha512-4Hote2MGcCTWSD2gwl0dwbCpBRHhE6olYEuTj8FMowdg3oQWNKr2YuxenPQYZ7+PfqPY1k98wKDU4Z+Hvd4Tiw==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", + "@jest/types": "^29.4.3", + "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" + "jest-message-util": "^29.4.3", + "jest-mock": "^29.4.3", + "jest-util": "^29.4.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.4.3.tgz", + "integrity": "sha512-8BQ/5EzfOLG7AaMcDh7yFCbfRLtsc+09E1RQmRBI4D6QQk4m6NSK/MXo+3bJrBN0yU8A2/VIcqhvsOLFmziioA==", "dev": true, "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" + "@jest/environment": "^29.4.3", + "@jest/expect": "^29.4.3", + "@jest/types": "^29.4.3", + "jest-mock": "^29.4.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.4.3.tgz", + "integrity": "sha512-sr2I7BmOjJhyqj9ANC6CTLsL4emMoka7HkQpcoMRlhCbQJjz2zsRzw0BDPiPyEFDXAbxKgGFYuQZiSJ1Y6YoTg==", "dev": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.4.3", + "@jest/test-result": "^29.4.3", + "@jest/transform": "^29.4.3", + "@jest/types": "^29.4.3", + "@jridgewell/trace-mapping": "^0.3.15", "@types/node": "*", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", - "glob": "^7.1.2", + "glob": "^7.1.3", "graceful-fs": "^4.2.9", "istanbul-lib-coverage": "^3.0.0", "istanbul-lib-instrument": "^5.1.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-message-util": "^29.4.3", + "jest-util": "^29.4.3", + "jest-worker": "^29.4.3", "slash": "^3.0.0", - "source-map": "^0.6.0", "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -1239,117 +1054,103 @@ } } }, - "node_modules/@jest/reporters/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==", + "node_modules/@jest/schemas": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", + "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.25.16" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz", + "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==", "dev": true, "dependencies": { + "@jridgewell/trace-mapping": "^0.3.15", "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" + "graceful-fs": "^4.2.9" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/source-map/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.4.3.tgz", + "integrity": "sha512-Oi4u9NfBolMq9MASPwuWTlC5WvmNRwI4S8YrQg5R5Gi47DYlBe3sh7ILTqi/LGrK1XUE4XY9KZcQJTH1WJCLLA==", "dev": true, "dependencies": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.4.3", + "@jest/types": "^29.4.3", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.4.3.tgz", + "integrity": "sha512-yi/t2nES4GB4G0mjLc0RInCq/cNr9dNwJxcGg8sslajua5Kb4kmozAc+qPLzplhBgfw1vLItbjyHzUN92UXicw==", "dev": true, "dependencies": { - "@jest/test-result": "^27.5.1", + "@jest/test-result": "^29.4.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" + "jest-haste-map": "^29.4.3", + "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.4.3.tgz", + "integrity": "sha512-8u0+fBGWolDshsFgPQJESkDa72da/EVwvL+II0trN2DR66wMwiQ9/CihaGfHdlLGFzbBZwMykFtxuwFdZqlKwg==", "dev": true, "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", + "@babel/core": "^7.11.6", + "@jest/types": "^29.4.3", + "@jridgewell/trace-mapping": "^0.3.15", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^29.4.3", + "jest-regex-util": "^29.4.3", + "jest-util": "^29.4.3", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" + "write-file-atomic": "^4.0.2" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/transform/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.4.3.tgz", + "integrity": "sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA==", "dev": true, "dependencies": { + "@jest/schemas": "^29.4.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jridgewell/gen-mapping": { @@ -1390,13 +1191,13 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, "node_modules/@nodelib/fs.scandir": { @@ -1434,135 +1235,109 @@ "node": ">= 8" } }, - "node_modules/@opentelemetry/api": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.1.0.tgz", - "integrity": "sha512-hf+3bwuBwtXsugA2ULBc95qxrOqP2pOekLz34BJhcAKawt94vfeNyUKpYc0lZQ/3sCP6LqRa7UAdHA7i5UODzQ==", + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.1.tgz", + "integrity": "sha512-ReY88T7JhJjeRVbfCyNj+NXAG3IIsVMsX9b5/9jC98dRP8/yxlZdz7mHZbHk5zHr24wZZICS5AcXsFZAXYUQEg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.0", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, "engines": { - "node": ">=8.0.0" + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@opentelemetry/semantic-conventions": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.4.0.tgz", - "integrity": "sha512-Hzl8soGpmyzja9w3kiFFcYJ7n5HNETpplY6cb67KR4QPlxp4FTTresO06qXHgHDhyIInmbLJXuwARjjpsKYGuQ==", + "node_modules/@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, "engines": { - "node": ">=14" + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + "node_modules/@sinclair/typebox": { + "version": "0.25.23", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.23.tgz", + "integrity": "sha512-VEB8ygeP42CFLWyAJhN5OklpxUliqdNEUcXb4xZ/CINqtYGTjL5ukluKdKzQ0iWdUxyQ7B0539PAUhHKrCNWSQ==", + "dev": true }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" } }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" - }, "node_modules/@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", + "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", "dev": true, "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz", + "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==", "dev": true, "dependencies": { - "@sinonjs/commons": "^1.7.0" + "@sinonjs/commons": "^2.0.0" } }, - "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==", + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", "dev": true, + "dependencies": { + "defer-to-connect": "^2.0.0" + }, "engines": { - "node": ">= 6" + "node": ">=10" } }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true - }, "node_modules/@types/babel__core": { - "version": "7.1.19", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", - "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", + "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", "dev": true, "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" @@ -1588,97 +1363,62 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.17.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", - "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", + "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", "dev": true, "dependencies": { "@babel/types": "^7.3.0" } }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", "dev": true, "dependencies": { - "@types/node": "*" + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" } }, - "node_modules/@types/cors": { - "version": "2.8.12", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", - "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", + "node_modules/@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", "dev": true }, - "node_modules/@types/duplexify": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@types/duplexify/-/duplexify-3.6.1.tgz", - "integrity": "sha512-n0zoEj/fMdMOvqbHxmqnza/kXyoGgJmEpsXjpP+gEqE1Ye4yNqc7xWipKnUoMpWhMuzJQSfK2gMrwlElly7OGQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/errorhandler": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@types/errorhandler/-/errorhandler-1.5.0.tgz", - "integrity": "sha512-g5jrn2aofEn7O2OW/T+PlmGUUD/AtrX7DI87zrxz6rK5XIyvQf3FbPJrwgYaVjVOaCyvEkx9yxLd/XlEA43OcA==", - "dev": true, - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", - "dev": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.29", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz", - "integrity": "sha512-uMd++6dMKS32EOuw1Uli3e3BPgdLIXmezcfHv7N4c1s3gkhikBplORPpMq3fuWkxncZN1reb16d5n8yhQ80x7Q==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } + "node_modules/@types/google-apps-script": { + "version": "1.0.57", + "resolved": "https://registry.npmjs.org/@types/google-apps-script/-/google-apps-script-1.0.57.tgz", + "integrity": "sha512-w06Yoh+SamGpS2kGVlGy/5JkmFkLrW6u3tbglyHEu9uC9lrzqr6FyLcgVsL95Tmq9L0q//D8seqd4GZGRPPKUw==", + "dev": true }, - "node_modules/@types/express-session": { - "version": "1.17.5", - "resolved": "https://registry.npmjs.org/@types/express-session/-/express-session-1.17.5.tgz", - "integrity": "sha512-l0DhkvNVfyUPEEis8fcwbd46VptfA/jmMwHfob2TfDMf3HyPLiB9mKD71LXhz5TMUobODXPD27zXSwtFQLHm+w==", + "node_modules/@types/google-apps-script-oauth2": { + "version": "38.0.0", + "resolved": "https://registry.npmjs.org/@types/google-apps-script-oauth2/-/google-apps-script-oauth2-38.0.0.tgz", + "integrity": "sha512-TxaCxXmAb3/Qm/kSweW+PPIckNwLvZo6maGI0oKx/MBdl/WrZkPAY7Mi56qg2xPGBObqG80rmYU691SAHiUdJg==", "dev": true, "dependencies": { - "@types/express": "*" + "@types/google-apps-script": "*" } }, "node_modules/@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", + "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", "dev": true, "dependencies": { "@types/node": "*" } }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", + "dev": true + }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", @@ -1704,102 +1444,60 @@ } }, "node_modules/@types/jest": { - "version": "27.5.2", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz", - "integrity": "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==", + "version": "29.4.0", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.4.0.tgz", + "integrity": "sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ==", "dev": true, "dependencies": { - "jest-matcher-utils": "^27.0.0", - "pretty-format": "^27.0.0" + "expect": "^29.0.0", + "pretty-format": "^29.0.0" } }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "node_modules/@types/long": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" - }, - "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true - }, - "node_modules/@types/node": { - "version": "16.11.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.45.tgz", - "integrity": "sha512-3rKg/L5x0rofKuuUt5zlXzOnKyIHXmIu5R8A0TuNDMF2062/AOIDBciFIjToLEJ/9F9DzkHNot+BpNsMI1OLdQ==" - }, - "node_modules/@types/oauth": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@types/oauth/-/oauth-0.9.1.tgz", - "integrity": "sha512-a1iY62/a3yhZ7qH7cNUsxoI3U/0Fe9+RnuFrpTKr+0WVOzbKlSLojShCKe20aOD1Sppv+i8Zlq0pLDuTJnwS4A==", + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", "dev": true, "dependencies": { "@types/node": "*" } }, - "node_modules/@types/passport": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@types/passport/-/passport-1.0.9.tgz", - "integrity": "sha512-9+ilzUhmZQR4JP49GdC2O4UdDE3POPLwpmaTC/iLkW7l0TZCXOo1zsTnnlXPq6rP1UsUZPfbAV4IUdiwiXyC7g==", - "dev": true, - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/passport-google-oauth20": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/passport-google-oauth20/-/passport-google-oauth20-2.0.11.tgz", - "integrity": "sha512-9XMT1GfwhZL7UQEiCepLef55RNPHkbrCtsU7rsWPTEOsmu5qVIW8nSemtB4p+P24CuOhA+IKkv8LsPThYghGww==", - "dev": true, - "dependencies": { - "@types/express": "*", - "@types/passport": "*", - "@types/passport-oauth2": "*" - } + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true }, - "node_modules/@types/passport-oauth2": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@types/passport-oauth2/-/passport-oauth2-1.4.11.tgz", - "integrity": "sha512-KUNwmGhe/3xPbjkzkPwwcPmyFwfyiSgtV1qOrPBLaU4i4q9GSCdAOyCbkFG0gUxAyEmYwqo9OAF/rjPjJ6ImdA==", - "dev": true, - "dependencies": { - "@types/express": "*", - "@types/oauth": "*", - "@types/passport": "*" - } + "node_modules/@types/node": { + "version": "18.14.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.0.tgz", + "integrity": "sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==", + "dev": true }, - "node_modules/@types/prettier": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz", - "integrity": "sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==", + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", "dev": true }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "node_modules/@types/prettier": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", + "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", "dev": true }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", "dev": true }, - "node_modules/@types/serve-static": { - "version": "1.13.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", - "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "node_modules/@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", "dev": true, "dependencies": { - "@types/mime": "^1", "@types/node": "*" } }, @@ -1810,9 +1508,9 @@ "dev": true }, "node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.22", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz", + "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -1824,285 +1522,65 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.7.tgz", - "integrity": "sha512-l4L6Do+tfeM2OK0GJsU7TUcM/1oN/N25xHm3Jb4z3OiDU4Lj8dIuxX9LpVMS9riSXQs42D1ieX7b85/r16H9Fw==", + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.30.7", - "@typescript-eslint/type-utils": "5.30.7", - "@typescript-eslint/utils": "5.30.7", - "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.2.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "event-target-shim": "^5.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=6.5" } }, - "node_modules/@typescript-eslint/parser": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.7.tgz", - "integrity": "sha512-Rg5xwznHWWSy7v2o0cdho6n+xLhK2gntImp0rJroVVFkcYFYQ8C8UJTSuTw/3CnExBmPjycjmUJkxVmjXsld6A==", + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.30.7", - "@typescript-eslint/types": "5.30.7", - "@typescript-eslint/typescript-estree": "5.30.7", - "debug": "^4.3.4" + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, + "node": ">=0.4.0" + } + }, + "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, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.7.tgz", - "integrity": "sha512-7BM1bwvdF1UUvt+b9smhqdc/eniOnCKxQT/kj3oXtj3LqnTWCAM0qHRHfyzCzhEfWX0zrW7KqXXeE4DlchZBKw==", + "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==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.30.7", - "@typescript-eslint/visitor-keys": "5.30.7" + "debug": "4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">= 6.0.0" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.7.tgz", - "integrity": "sha512-nD5qAE2aJX/YLyKMvOU5jvJyku4QN5XBVsoTynFrjQZaDgDV6i7QHFiYCx10wvn7hFvfuqIRNBtsgaLe0DbWhw==", + "node_modules/aggregate-error": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", + "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", "dev": true, "dependencies": { - "@typescript-eslint/utils": "5.30.7", - "debug": "^4.3.4", - "tsutils": "^3.21.0" + "clean-stack": "^4.0.0", + "indent-string": "^5.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.7.tgz", - "integrity": "sha512-ocVkETUs82+U+HowkovV6uxf1AnVRKCmDRNUBUUo46/5SQv1owC/EBFkiu4MOHeZqhKz2ktZ3kvJJ1uFqQ8QPg==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.7.tgz", - "integrity": "sha512-tNslqXI1ZdmXXrHER83TJ8OTYl4epUzJC0aj2i4DMDT4iU+UqLT3EJeGQvJ17BMbm31x5scSwo3hPM0nqQ1AEA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.30.7", - "@typescript-eslint/visitor-keys": "5.30.7", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.7.tgz", - "integrity": "sha512-Z3pHdbFw+ftZiGUnm1GZhkJgVqsDL5CYW2yj+TB2mfXDFOMqtbzQi2dNJIyPqPbx9mv2kUxS1gU+r2gKlKi1rQ==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.30.7", - "@typescript-eslint/types": "5.30.7", - "@typescript-eslint/typescript-estree": "5.30.7", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.7.tgz", - "integrity": "sha512-KrRXf8nnjvcpxDFOKej4xkD7657+PClJs5cJVSG7NNoCNnjEdc46juNAQt7AyuWctuCgs6mVRc1xGctEqrjxWw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.30.7", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "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, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true, - "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==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ajv": { @@ -2136,22 +1614,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "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, "engines": { "node": ">=8" } @@ -2160,6 +1627,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -2171,9 +1639,9 @@ } }, "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "dependencies": { "normalize-path": "^3.0.0", @@ -2183,22 +1651,32 @@ "node": ">= 8" } }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, "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==", - "dev": true + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } }, - "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==" + "node_modules/array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/array-union": { "version": "2.1.0", @@ -2213,59 +1691,27 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true, "engines": { "node": ">=8" } }, - "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/axios": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", - "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", - "dependencies": { - "follow-redirects": "^1.14.7" - } - }, - "node_modules/axios-mock-adapter": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/axios-mock-adapter/-/axios-mock-adapter-1.21.2.tgz", - "integrity": "sha512-jzyNxU3JzB2XVhplZboUcF0YDs7xuExzoRSHXPHr+UQajaGmcTqvkkUADgkVI2WkGlpZ1zZlMVdcTMU0ejV8zQ==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "is-buffer": "^2.0.5" - }, - "peerDependencies": { - "axios": ">= 0.17.0" - } - }, "node_modules/babel-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", - "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.4.3.tgz", + "integrity": "sha512-o45Wyn32svZE+LnMVWv/Z4x0SwtLbh4FyGcYtR20kIWd+rdrDZ9Fzq8Ml3MYLD+mZvEdzCjZsCnYZ2jpJyQ+Nw==", "dev": true, "dependencies": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/transform": "^29.4.3", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", + "babel-preset-jest": "^29.4.3", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "@babel/core": "^7.8.0" @@ -2288,18 +1734,18 @@ } }, "node_modules/babel-plugin-jest-hoist": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", - "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.4.3.tgz", + "integrity": "sha512-mB6q2q3oahKphy5V7CpnNqZOCkxxZ9aokf1eh82Dy3jQmg4xvM1tGrh5y6BQUJh4a3Pj9+eLfwvAZ7VNKg7H8Q==", "dev": true, "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", + "@types/babel__core": "^7.1.14", "@types/babel__traverse": "^7.0.6" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/babel-preset-current-node-syntax": { @@ -2326,16 +1772,16 @@ } }, "node_modules/babel-preset-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", - "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.4.3.tgz", + "integrity": "sha512-gWx6COtSuma6n9bw+8/F+2PCXrIgxV/D1TJFnp6OyBK2cxPWg0K9p/sriNYeifKjpUkMViWQ09DSWtzJQRETsw==", "dev": true, "dependencies": { - "babel-plugin-jest-hoist": "^27.5.1", + "babel-plugin-jest-hoist": "^29.4.3", "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "@babel/core": "^7.0.0" @@ -2351,6 +1797,7 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, "funding": [ { "type": "github", @@ -2366,18 +1813,11 @@ } ] }, - "node_modules/base64url": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", - "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/bignumber.js": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", - "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz", + "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==", + "dev": true, "engines": { "node": "*" } @@ -2391,42 +1831,17 @@ "node": ">=8" } }, - "node_modules/body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", - "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.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dev": true, "dependencies": { - "ms": "2.0.0" + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -2449,16 +1864,10 @@ "node": ">=8" } }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, "node_modules/browserslist": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.2.tgz", - "integrity": "sha512-MonuOgAtUB46uP5CezYbRaYKBNt2LxP0yX+Pmj4LkcDFGkn9Cbpi83d9sCjwQDErXsIJSzY5oKGDbgOlF/LPAA==", + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", "dev": true, "funding": [ { @@ -2471,10 +1880,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001366", - "electron-to-chromium": "^1.4.188", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.4" + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" }, "bin": { "browserslist": "cli.js" @@ -2504,10 +1913,35 @@ "node-int64": "^0.4.0" } }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "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" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "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==" + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "dev": true }, "node_modules/buffer-from": { "version": "1.1.2", @@ -2515,18 +1949,65 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true, + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, "engines": { - "node": ">= 0.8" + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -2554,9 +2035,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001370", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001370.tgz", - "integrity": "sha512-3PDmaP56wz/qz7G508xzjx8C+MC2qEm4SYhSEzC9IBROo+dGXFWRuaXkWti0A9tuI00g+toiriVqxtWMgl350g==", + "version": "1.0.30001457", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001457.tgz", + "integrity": "sha512-SDIV6bgE1aVbK6XyxdURbUE89zY7+k1BBBaOwYwkNCglXlel/E7mELiHC64HQ+W0xSKlqWhV9Wh7iHxUjMs4fA==", "dev": true, "funding": [ { @@ -2585,18 +2066,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/char-regex": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", @@ -2606,6 +2075,12 @@ "node": ">=10" } }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -2646,219 +2121,240 @@ } }, "node_modules/ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", - "dev": true - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.2", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.2", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "node_modules/clean-stack": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", + "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", + "dev": true, "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "escape-string-regexp": "5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "node_modules/clean-stack/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/coffeescript": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-2.7.0.tgz", - "integrity": "sha512-hzWp6TUE2d/jCcN67LrW1eh5b/rSDKQK6oD6VMLlggYVUUFexgTH9z3dNYihzX4RMhze5FTUsUmOXViJKFQR/A==", - "bin": { - "cake": "bin/cake", - "coffee": "bin/coffee" + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "node_modules/color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "dependencies": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" + "node_modules/cli-spinners": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", + "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "dev": true, "dependencies": { - "color-name": "~1.1.4" + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" }, "engines": { - "node": ">=7.0.0" - } - }, - "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==" - }, - "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==", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/color/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==", - "dependencies": { - "color-name": "1.1.3" + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/color/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==" - }, - "node_modules/colorspace": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", - "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", - "dependencies": { - "color": "^3.1.3", - "text-hex": "1.0.x" - } + "node_modules/cli-truncate/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 }, - "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==", + "node_modules/cli-truncate/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, "dependencies": { - "delayed-stream": "~1.0.0" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">= 0.8" + "node": ">=12" + }, + "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==", - "dev": true - }, - "node_modules/concurrently": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.5.1.tgz", - "integrity": "sha512-FlSwNpGjWQfRwPLXvJ/OgysbBxPkWpiVjy1042b0U7on7S7qwwMIILRj7WTN1mTgqa582bG6NFuScOoh6Zgdag==", + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", "dev": true, "dependencies": { - "chalk": "^4.1.0", - "date-fns": "^2.16.1", - "lodash": "^4.17.21", - "rxjs": "^6.6.3", - "spawn-command": "^0.0.2-1", - "supports-color": "^8.1.0", - "tree-kill": "^1.2.2", - "yargs": "^16.2.0" - }, - "bin": { - "concurrently": "bin/concurrently.js" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=10.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/console-log-level": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/console-log-level/-/console-log-level-1.4.1.tgz", - "integrity": "sha512-VZzbIORbP+PPcN/gg3DXClTLPLg5Slwd5fL2MIc+o1qZ4BXBvWyc6QxPk6T/Mkr6IVjRpoAGf32XxP3ZWMVRcQ==" + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } }, - "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==", + "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, "dependencies": { - "safe-buffer": "5.2.1" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">= 0.6" + "node": ">=12" } }, - "node_modules/content-type": { + "node_modules/clone": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=0.8" } }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "dev": true, "dependencies": { - "safe-buffer": "~5.1.1" + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/convert-source-map/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, "engines": { - "node": ">= 0.6" + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" } }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true }, - "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==", + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { - "object-assign": "^4", - "vary": "^1" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 0.10" + "node": ">=7.0.0" } }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "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 + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "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 }, "node_modules/cross-spawn": { @@ -2875,61 +2371,29 @@ "node": ">= 8" } }, - "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "node_modules/currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", "dev": true, "dependencies": { - "cssom": "~0.3.6" + "array-find-index": "^1.0.1" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "node_modules/debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", "dev": true }, - "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/date-fns": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.1.tgz", - "integrity": "sha512-dlLD5rKaKxpFdnjrs+5azHDFOPEu4ANy/LTh04A1DTzMM7qoajmKCBc8pkKRFT41CNzw+4gQh79X5C+Jq27HAw==", - "dev": true, - "engines": { - "node": ">=0.11" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" - } - }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -2942,11 +2406,32 @@ } } }, - "node_modules/decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", - "dev": true + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/dedent": { "version": "0.7.0", @@ -2961,38 +2446,42 @@ "dev": true }, "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", + "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, - "engines": { - "node": ">=0.4.0" + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, "engines": { - "node": ">= 0.8" + "node": ">=10" } }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=8" } }, "node_modules/detect-newline": { @@ -3004,34 +2493,13 @@ "node": ">=8" } }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", + "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/doctrine": { @@ -3046,86 +2514,47 @@ "node": ">=6.0.0" } }, - "node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "node_modules/dotf": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dotf/-/dotf-2.0.2.tgz", + "integrity": "sha512-4cN2fwEqHimE11jVc8uMNiEB2A2YOL5Fdyd1p14UbAvRh/5vAxjEaiVPx45zD5IQcwc/uQIxI9Jh18skB/uYFQ==", "dev": true, "dependencies": { - "webidl-conversions": "^5.0.0" + "graceful-fs": "^4.2.8", + "jsonfile": "^6.1.0" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "engines": { - "node": ">=10" - } - }, - "node_modules/duplexify": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", - "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", - "dependencies": { - "end-of-stream": "^1.4.1", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1", - "stream-shift": "^1.0.0" - } + "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 }, "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==", + "dev": true, "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==" - }, "node_modules/electron-to-chromium": { - "version": "1.4.199", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.199.tgz", - "integrity": "sha512-WIGME0Cs7oob3mxsJwHbeWkH0tYkIE/sjkJ8ML2BYmuRcjhRl/q5kVDXG7W9LOOKwzPU5M0LBlXRq9rlSgnNlg==", + "version": "1.4.305", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.305.tgz", + "integrity": "sha512-WETy6tG0CT5gm1O+xCbyapWNsCcmIvrn4NHViIGYo2AT8FV2qUCXdaB+WqYxSv/vS5mFqhBYnfZAAkVArjBmUg==", "dev": true }, "node_modules/emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sindresorhus/emittery?sponsor=1" @@ -3134,34 +2563,18 @@ "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==" - }, - "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==" - }, - "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==", - "engines": { - "node": ">= 0.8" - } + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, "dependencies": { "once": "^1.4.0" } }, - "node_modules/ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==" - }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -3175,127 +2588,30 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, "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==" - }, "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, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escodegen": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, "node_modules/eslint": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.20.0.tgz", - "integrity": "sha512-d4ixhz5SKCa1D6SCPrivP7yYVi7nyD6A4vs6HIAul9ujBzcEmZVM3/0NN/yu5nKhmO1wjp5xQ46iRfmDGlOviA==", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.34.0.tgz", + "integrity": "sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", + "@eslint/eslintrc": "^1.4.1", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -3305,18 +2621,21 @@ "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", + "espree": "^9.4.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", @@ -3327,8 +2646,7 @@ "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" @@ -3353,9 +2671,9 @@ } }, "node_modules/eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.6.0.tgz", + "integrity": "sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" @@ -3386,16 +2704,16 @@ } }, "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=8.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/eslint-utils": { @@ -3434,40 +2752,124 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "node_modules/eslint/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==", + "dev": 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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/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, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/eslint/node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, "engines": { - "node": ">=4.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/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, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/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, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/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, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/espree": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", - "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", "dev": true, "dependencies": { - "acorn": "^8.7.1", + "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/esprima": { @@ -3484,9 +2886,9 @@ } }, "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.2.tgz", + "integrity": "sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -3495,15 +2897,6 @@ "node": ">=0.10" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -3516,7 +2909,7 @@ "node": ">=4.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { + "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", @@ -3525,14 +2918,11 @@ "node": ">=4.0" } }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true }, "node_modules/esutils": { "version": "2.0.3", @@ -3543,33 +2933,15 @@ "node": ">=0.10.0" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/event-target-shim": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true, "engines": { "node": ">=6" } }, - "node_modules/eventid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/eventid/-/eventid-2.0.1.tgz", - "integrity": "sha512-sPNTqiMokAvV048P2c9+foqVJzk49o6d4e0D/sq5jog3pw+4kBgyR0gaM1FM7Mx6Kzd9dztesh9oYz1LWWOpzw==", - "dependencies": { - "uuid": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -3603,122 +2975,46 @@ } }, "node_modules/expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.10.3", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "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" - } - }, - "node_modules/express-session": { - "version": "1.17.3", - "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz", - "integrity": "sha512-4+otWXlShYlG1Ma+2Jnn+xgKUZTMJ5QD3YvfilX3AcocOAbIkVylSWEklzALe/+Pu4qV6TYBj5GwOBFfdKqLBw==", - "dependencies": { - "cookie": "0.4.2", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-headers": "~1.0.2", - "parseurl": "~1.3.3", - "safe-buffer": "5.2.1", - "uid-safe": "~2.1.5" + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.4.3.tgz", + "integrity": "sha512-uC05+Q7eXECFpgDrHdXA4k2rpMyStAYPItEDLyQDo5Ta7fVkJnNA/4zh/OIVkVVNZ1oOK1PipQoyNjuZ6sz6Dg==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.4.3", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.4.3", + "jest-message-util": "^29.4.3", + "jest-util": "^29.4.3" }, "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/express-session/node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express-session/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express-session/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } }, "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==" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true }, "node_modules/fast-diff": { "version": "1.2.0", @@ -3726,34 +3022,6 @@ "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", "dev": true }, - "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -3767,32 +3035,52 @@ "dev": true }, "node_modules/fast-text-encoding": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.4.tgz", - "integrity": "sha512-x6lDDm/tBAzX9kmsPcZsNbvDs3Zey3+scsxaZElS8xWLgUMAg/oFLeewfUz0mu1CblHhhsu15jGkraldkFh8KQ==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", + "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==", + "dev": true }, "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, "dependencies": { "reusify": "^1.0.4" } }, "node_modules/fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, "dependencies": { "bser": "2.1.1" } }, - "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==" + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } }, "node_modules/file-entry-cache": { "version": "6.0.1", @@ -3818,36 +3106,6 @@ "node": ">=8" } }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "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/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, "node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -3861,14 +3119,6 @@ "node": ">=8" } }, - "node_modules/findit2": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/findit2/-/findit2-2.2.3.tgz", - "integrity": "sha512-lg/Moejf4qXovVutL0Lz4IsaPoNYMuxt4PA0nGqFxnJ1CTTGGlEO2wKgoDpwknhvZ8k4Q2F+eesgkLbG2Mxfog==", - "engines": { - "node": ">=0.8.22" - } - }, "node_modules/flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -3883,63 +3133,23 @@ } }, "node_modules/flatted": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", - "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, - "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==" - }, - "node_modules/follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "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==", - "engines": { - "node": ">= 0.6" + "node": ">=12" } }, "node_modules/fs.realpath": { @@ -3965,17 +3175,23 @@ "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" + "node_modules/fuzzy": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/fuzzy/-/fuzzy-0.1.3.tgz", + "integrity": "sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } }, "node_modules/gaxios": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", + "dev": true, "dependencies": { "abort-controller": "^3.0.0", "extend": "^3.0.2", @@ -3991,6 +3207,7 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz", "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==", + "dev": true, "dependencies": { "gaxios": "^4.0.0", "json-bigint": "^1.0.0" @@ -4012,14 +3229,16 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -4083,44 +3302,19 @@ } }, "node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "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, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, "node_modules/google-auth-library": { "version": "7.14.1", "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.14.1.tgz", "integrity": "sha512-5Rk7iLNDFhFeBYc3s8l1CqzbEBcdhwR193RlD4vSNFajIcINKI8W8P0JLmBpwymHqqWbX34pJDQu39cSy/6RsA==", + "dev": true, "dependencies": { "arrify": "^2.0.0", "base64-js": "^1.3.0", @@ -4136,36 +3330,29 @@ "node": ">=10" } }, - "node_modules/google-gax": { - "version": "2.30.5", - "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-2.30.5.tgz", - "integrity": "sha512-Jey13YrAN2hfpozHzbtrwEfEHdStJh1GwaQ2+Akh1k0Tv/EuNVSuBtHZoKSBm5wBMvNsxTsEIZ/152NrYyZgxQ==", + "node_modules/google-auth-library/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==", + "dev": true, "dependencies": { - "@grpc/grpc-js": "~1.6.0", - "@grpc/proto-loader": "^0.6.12", - "@types/long": "^4.0.0", - "abort-controller": "^3.0.0", - "duplexify": "^4.0.0", - "fast-text-encoding": "^1.0.3", - "google-auth-library": "^7.14.0", - "is-stream-ended": "^0.1.4", - "node-fetch": "^2.6.1", - "object-hash": "^3.0.0", - "proto3-json-serializer": "^0.1.8", - "protobufjs": "6.11.3", - "retry-request": "^4.0.0" - }, - "bin": { - "compileProtos": "build/tools/compileProtos.js" + "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, + "node_modules/google-auth-library/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/google-p12-pem": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.4.tgz", "integrity": "sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg==", + "dev": true, "dependencies": { "node-forge": "^1.3.1" }, @@ -4177,9 +3364,10 @@ } }, "node_modules/googleapis": { - "version": "91.0.0", - "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-91.0.0.tgz", - "integrity": "sha512-iHqXZwgYam0g8n0Yyi+YHx8kgwT+H5O4k3fe0LB1JhWRp1dSKYu+ShY4PQbW584zLOE4kK3LHf2B+x1THx+ZPQ==", + "version": "84.0.0", + "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-84.0.0.tgz", + "integrity": "sha512-5WWLwmraulw3p55lu0gNpLz2FME1gcuR7QxgmUdAVHMiVN4LEasYjJV9p36gxcf2TMe6bn6+PgQ/63+CvBEgoQ==", + "dev": true, "dependencies": { "google-auth-library": "^7.0.2", "googleapis-common": "^5.0.2" @@ -4192,6 +3380,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-5.1.0.tgz", "integrity": "sha512-RXrif+Gzhq1QAzfjxulbGvAY3FPj8zq/CYcvgjzDbaBNCD6bUl+86I7mUs4DKWHGruuK26ijjR/eDpWIDgNROA==", + "dev": true, "dependencies": { "extend": "^3.0.2", "gaxios": "^4.0.0", @@ -4204,16 +3393,48 @@ "node": ">=10.10.0" } }, + "node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "node_modules/gtoken": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.2.tgz", "integrity": "sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==", + "dev": true, "dependencies": { "gaxios": "^4.0.0", "google-p12-pem": "^3.1.3", @@ -4227,6 +3448,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "dependencies": { "function-bind": "^1.1.1" }, @@ -4247,6 +3469,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -4254,165 +3477,432 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "dependencies": { - "whatwg-encoding": "^1.0.5" + "lru-cache": "^6.0.0" }, "engines": { "node": ">=10" } }, + "node_modules/hosted-git-info/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==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hosted-git-info/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "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 }, - "node_modules/http-errors": { + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dev": true, + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.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==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "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" + } + ] + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "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, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "node_modules/inquirer": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", + "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/inquirer-autocomplete-prompt-ipt": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "resolved": "https://registry.npmjs.org/inquirer-autocomplete-prompt-ipt/-/inquirer-autocomplete-prompt-ipt-2.0.0.tgz", + "integrity": "sha512-2qkl1lWeXbFN/O3+xdqJUdMfnNirvWKqgsgmhOjpOiVCcnJf+XYSEjFfdTgk+MDTtVt5AZiWR9Ji+f4YsWBdUw==", + "dev": true, "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "ansi-escapes": "^4.2.1", + "chalk": "^2.4.2", + "figures": "^3.1.0", + "run-async": "^2.3.0", + "rxjs": "^6.5.3" + }, + "engines": { + "node": ">=10" }, + "peerDependencies": { + "inquirer": ">=7" + } + }, + "node_modules/inquirer-autocomplete-prompt-ipt/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-autocomplete-prompt-ipt/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-autocomplete-prompt-ipt/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==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/inquirer-autocomplete-prompt-ipt/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==", + "dev": true + }, + "node_modules/inquirer-autocomplete-prompt-ipt/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/inquirer-autocomplete-prompt-ipt/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, "engines": { - "node": ">= 0.8" + "node": ">=4" } }, - "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==", + "node_modules/inquirer-autocomplete-prompt-ipt/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" + "tslib": "^1.9.0" }, "engines": { - "node": ">= 6" + "npm": ">=2.0.0" } }, - "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==", + "node_modules/inquirer-autocomplete-prompt-ipt/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "dependencies": { - "agent-base": "6", - "debug": "4" + "has-flag": "^3.0.0" }, "engines": { - "node": ">= 6" + "node": ">=4" } }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "node_modules/inquirer-autocomplete-prompt-ipt/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/inquirer/node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, - "engines": { - "node": ">=10.17.0" + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.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==", + "node_modules/inquirer/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "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" + } + ], "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "node_modules/inquirer/node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, "engines": { - "node": ">= 4" + "node": ">=8" } }, - "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 - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/inquirer/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, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "node_modules/inquirer/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, "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "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==", + "node_modules/inquirer/node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, "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==" - }, - "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==", + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, "engines": { - "node": ">= 0.10" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-arrayish": { @@ -4433,33 +3923,25 @@ "node": ">=8" } }, - "node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", "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" - } - ], + "dependencies": { + "builtin-modules": "^3.3.0" + }, "engines": { - "node": ">=4" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -4468,6 +3950,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -4481,6 +3978,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "engines": { "node": ">=8" } @@ -4506,6 +4004,24 @@ "node": ">=0.10.0" } }, + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -4515,24 +4031,51 @@ "node": ">=0.12.0" } }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "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, "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==", - "dev": true + "node_modules/is-port-reachable": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-port-reachable/-/is-port-reachable-3.1.0.tgz", + "integrity": "sha512-vjc0SSRNZ32s9SbZBzGaiP6YVB+xglLShhgZD/FHMZUXBvQWaV9CtzgeVhjccFJrI6RAMV+LX7NYxueW/A8W5A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-reachable": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/is-reachable/-/is-reachable-5.2.1.tgz", + "integrity": "sha512-ViPrrlmt9FTTclYbz6mL/PFyF1TXSpJ9y/zw9QMVJxbhU/7DFkvk/5cTv7S0sXtqbJj32zZ+jKpNAjrYTUZBPQ==", + "dev": true, + "dependencies": { + "arrify": "^2.0.1", + "got": "^11.7.0", + "is-port-reachable": "^3.0.0", + "p-any": "^3.0.0", + "p-timeout": "^3.2.0", + "prepend-http": "^3.0.1", + "router-ips": "^1.0.0", + "url-parse": "^1.5.10" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "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==", + "dev": true, "engines": { "node": ">=8" }, @@ -4540,16 +4083,29 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-stream-ended": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz", - "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==" + "node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } }, "node_modules/isexe": { "version": "2.0.0", @@ -4567,9 +4123,9 @@ } }, "node_modules/istanbul-lib-instrument": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", - "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, "dependencies": { "@babel/core": "^7.12.3", @@ -4582,15 +4138,6 @@ "node": ">=8" } }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", @@ -4605,18 +4152,6 @@ "node": ">=8" } }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "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", @@ -4631,15 +4166,6 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/istanbul-reports": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", @@ -4654,20 +4180,21 @@ } }, "node_modules/jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", - "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.4.3.tgz", + "integrity": "sha512-XvK65feuEFGZT8OO0fB/QAQS+LGHvQpaadkH5p47/j3Ocqq3xf2pK9R+G0GzgfuhXVxEv76qCOOcMb5efLk6PA==", "dev": true, "dependencies": { - "@jest/core": "^27.5.1", + "@jest/core": "^29.4.3", + "@jest/types": "^29.4.3", "import-local": "^3.0.2", - "jest-cli": "^27.5.1" + "jest-cli": "^29.4.3" }, "bin": { "jest": "bin/jest.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -4679,73 +4206,72 @@ } }, "node_modules/jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.4.3.tgz", + "integrity": "sha512-Vn5cLuWuwmi2GNNbokPOEcvrXGSGrqVnPEZV7rC6P7ck07Dyw9RFnvWglnupSh+hGys0ajGtw/bc2ZgweljQoQ==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", "execa": "^5.0.0", - "throat": "^6.0.1" + "p-limit": "^3.1.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.4.3.tgz", + "integrity": "sha512-Vw/bVvcexmdJ7MLmgdT3ZjkJ3LKu8IlpefYokxiqoZy6OCQ2VAm6Vk3t/qHiAGUXbdbJKJWnc8gH3ypTbB/OBw==", "dev": true, "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/environment": "^29.4.3", + "@jest/expect": "^29.4.3", + "@jest/test-result": "^29.4.3", + "@jest/types": "^29.4.3", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", - "expect": "^27.5.1", "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", + "jest-each": "^29.4.3", + "jest-matcher-utils": "^29.4.3", + "jest-message-util": "^29.4.3", + "jest-runtime": "^29.4.3", + "jest-snapshot": "^29.4.3", + "jest-util": "^29.4.3", + "p-limit": "^3.1.0", + "pretty-format": "^29.4.3", "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" + "stack-utils": "^2.0.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.4.3.tgz", + "integrity": "sha512-PiiAPuFNfWWolCE6t3ZrDXQc6OsAuM3/tVW0u27UWc1KE+n/HSn5dSE6B2juqN7WP+PP0jAcnKtGmI4u8GMYCg==", "dev": true, "dependencies": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/core": "^29.4.3", + "@jest/test-result": "^29.4.3", + "@jest/types": "^29.4.3", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-config": "^29.4.3", + "jest-util": "^29.4.3", + "jest-validate": "^29.4.3", "prompts": "^2.0.1", - "yargs": "^16.2.0" + "yargs": "^17.3.1" }, "bin": { "jest": "bin/jest.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -4757,254 +4283,210 @@ } }, "node_modules/jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.4.3.tgz", + "integrity": "sha512-eCIpqhGnIjdUCXGtLhz4gdDoxKSWXKjzNcc5r+0S1GKOp2fwOipx5mRcwa9GB/ArsxJ1jlj2lmlD9bZAsBxaWQ==", "dev": true, "dependencies": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.4.3", + "@jest/types": "^29.4.3", + "babel-jest": "^29.4.3", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", - "glob": "^7.1.1", + "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-circus": "^29.4.3", + "jest-environment-node": "^29.4.3", + "jest-get-type": "^29.4.3", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.4.3", + "jest-runner": "^29.4.3", + "jest-util": "^29.4.3", + "jest-validate": "^29.4.3", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", + "pretty-format": "^29.4.3", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { + "@types/node": "*", "ts-node": ">=9.0.0" }, "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, "ts-node": { "optional": true } } }, "node_modules/jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.4.3.tgz", + "integrity": "sha512-YB+ocenx7FZ3T5O9lMVMeLYV4265socJKtkwgk/6YUz/VsEzYDkiMuMhWzZmxm3wDRQvayJu/PjkjjSkjoHsCA==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "diff-sequences": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.4.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", + "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", "dev": true, "dependencies": { "detect-newline": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.4.3.tgz", + "integrity": "sha512-1ElHNAnKcbJb/b+L+7j0/w7bDvljw4gTv1wL9fYOczeJrbTbkMGQ5iQPFJ3eFQH19VPTx1IyfePdqSpePKss7Q==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", - "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" + "@jest/types": "^29.4.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.4.3", + "jest-util": "^29.4.3", + "pretty-format": "^29.4.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.4.3.tgz", + "integrity": "sha512-gAiEnSKF104fsGDXNkwk49jD/0N0Bqu2K9+aMQXA6avzsA9H3Fiv1PW2D+gzbOSR705bWd2wJZRFEFpV0tXISg==", "dev": true, "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/environment": "^29.4.3", + "@jest/fake-timers": "^29.4.3", + "@jest/types": "^29.4.3", "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" + "jest-mock": "^29.4.3", + "jest-util": "^29.4.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", + "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", "dev": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.4.3.tgz", + "integrity": "sha512-eZIgAS8tvm5IZMtKlR8Y+feEOMfo2pSQkmNbufdbMzMSn9nitgGxF1waM/+LbryO3OkMcKS98SUb+j/cQxp/vQ==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", + "@jest/types": "^29.4.3", + "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-regex-util": "^29.4.3", + "jest-util": "^29.4.3", + "jest-worker": "^29.4.3", "micromatch": "^4.0.4", - "walker": "^1.0.7" + "walker": "^1.0.8" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "optionalDependencies": { "fsevents": "^2.3.2" } }, - "node_modules/jest-jasmine2": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", - "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, "node_modules/jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.4.3.tgz", + "integrity": "sha512-9yw4VC1v2NspMMeV3daQ1yXPNxMgCzwq9BocCwYrRgXe4uaEJPAN0ZK37nFBhcy3cUwEVstFecFLaTHpF7NiGA==", "dev": true, "dependencies": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "jest-get-type": "^29.4.3", + "pretty-format": "^29.4.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.4.3.tgz", + "integrity": "sha512-TTciiXEONycZ03h6R6pYiZlSkvYgT0l8aa49z/DLSGYjex4orMUcafuLXYyyEDWB1RKglq00jzwY00Ei7yFNVg==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "jest-diff": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.4.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.4.3.tgz", + "integrity": "sha512-1Y8Zd4ZCN7o/QnWdMmT76If8LuDv23Z1DRovBj/vcSFNlGCJGoO8D1nJDw1AdyAGUk0myDLFGN5RbNeJyCRGCw==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", + "@jest/types": "^29.4.3", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", + "pretty-format": "^29.4.3", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-mock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", - "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.4.3.tgz", + "integrity": "sha512-LjFgMg+xed9BdkPMyIJh+r3KeHt1klXPJYBULXVVAkbTaaKjPX1o1uVCAZADMEp/kOxGTwy/Ot8XbvgItOrHEg==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*" + "@jest/types": "^29.4.3", + "@types/node": "*", + "jest-util": "^29.4.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, "engines": { "node": ">=6" @@ -5019,167 +4501,187 @@ } }, "node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", + "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", "dev": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-resolve": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", - "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.4.3.tgz", + "integrity": "sha512-GPokE1tzguRyT7dkxBim4wSx6E45S3bOQ7ZdKEG+Qj0Oac9+6AwJPCk0TZh5Vu0xzeX4afpb+eDmgbmZFFwpOw==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", + "jest-haste-map": "^29.4.3", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-util": "^29.4.3", + "jest-validate": "^29.4.3", "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", + "resolve.exports": "^2.0.0", "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-resolve-dependencies": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", - "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.4.3.tgz", + "integrity": "sha512-uvKMZAQ3nmXLH7O8WAOhS5l0iWyT3WmnJBdmIHiV5tBbdaDZ1wqtNX04FONGoaFvSOSHBJxnwAVnSn1WHdGVaw==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" + "jest-regex-util": "^29.4.3", + "jest-snapshot": "^29.4.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-runner": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.4.3.tgz", + "integrity": "sha512-GWPTEiGmtHZv1KKeWlTX9SIFuK19uLXlRQU43ceOQ2hIfA5yPEJC7AMkvFKpdCHx6pNEdOD+2+8zbniEi3v3gA==", "dev": true, "dependencies": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.4.3", + "@jest/environment": "^29.4.3", + "@jest/test-result": "^29.4.3", + "@jest/transform": "^29.4.3", + "@jest/types": "^29.4.3", "@types/node": "*", "chalk": "^4.0.0", - "emittery": "^0.8.1", + "emittery": "^0.13.1", "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" + "jest-docblock": "^29.4.3", + "jest-environment-node": "^29.4.3", + "jest-haste-map": "^29.4.3", + "jest-leak-detector": "^29.4.3", + "jest-message-util": "^29.4.3", + "jest-resolve": "^29.4.3", + "jest-runtime": "^29.4.3", + "jest-util": "^29.4.3", + "jest-watcher": "^29.4.3", + "jest-worker": "^29.4.3", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.4.3.tgz", + "integrity": "sha512-F5bHvxSH+LvLV24vVB3L8K467dt3y3dio6V3W89dUz9nzvTpqd/HcT9zfYKL2aZPvD63vQFgLvaUX/UpUhrP6Q==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.4.3", + "@jest/fake-timers": "^29.4.3", + "@jest/globals": "^29.4.3", + "@jest/source-map": "^29.4.3", + "@jest/test-result": "^29.4.3", + "@jest/transform": "^29.4.3", + "@jest/types": "^29.4.3", + "@types/node": "*", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^29.4.3", + "jest-message-util": "^29.4.3", + "jest-mock": "^29.4.3", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.4.3", + "jest-snapshot": "^29.4.3", + "jest-util": "^29.4.3", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.4.3.tgz", + "integrity": "sha512-NGlsqL0jLPDW91dz304QTM/SNO99lpcSYYAjNiX0Ou+sSGgkanKBcSjCfp/pqmiiO1nQaOyLp6XQddAzRcx3Xw==", "dev": true, "dependencies": { - "@babel/core": "^7.7.2", + "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.4.3", + "@jest/transform": "^29.4.3", + "@jest/types": "^29.4.3", + "@types/babel__traverse": "^7.0.6", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.5.1", + "expect": "^29.4.3", "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-diff": "^29.4.3", + "jest-get-type": "^29.4.3", + "jest-haste-map": "^29.4.3", + "jest-matcher-utils": "^29.4.3", + "jest-message-util": "^29.4.3", + "jest-util": "^29.4.3", "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" + "pretty-format": "^29.4.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/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==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=10" } }, + "node_modules/jest-snapshot/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.4.3.tgz", + "integrity": "sha512-ToSGORAz4SSSoqxDSylWX8JzkOQR7zoBtNRsA7e+1WUX5F8jrOwaNpuh1YfJHJKDHXLHmObv5eOjejUd+/Ws+Q==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.4.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -5187,24 +4689,24 @@ "picomatch": "^2.2.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-validate": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", - "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.4.3.tgz", + "integrity": "sha512-J3u5v7aPQoXPzaar6GndAVhdQcZr/3osWSgTeKg5v574I9ybX/dTyH0AJFb5XgXIB7faVhf+rS7t4p3lL9qFaw==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.4.3", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", + "jest-get-type": "^29.4.3", "leven": "^3.1.0", - "pretty-format": "^27.5.1" + "pretty-format": "^29.4.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-validate/node_modules/camelcase": { @@ -5220,35 +4722,76 @@ } }, "node_modules/jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.4.3.tgz", + "integrity": "sha512-zwlXH3DN3iksoIZNk73etl1HzKyi5FuQdYLnkQKm5BW4n8HpoG59xSwpVdFrnh60iRRaRBGw0gcymIxjJENPcA==", "dev": true, "dependencies": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/test-result": "^29.4.3", + "@jest/types": "^29.4.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.5.1", + "emittery": "^0.13.1", + "jest-util": "^29.4.3", "string-length": "^4.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.4.3.tgz", + "integrity": "sha512-GLHN/GTAAMEy5BFdvpUfzr9Dr80zQqBrh0fz1mtRMe05hqP45+HfQltu7oTBfduD0UeZs09d+maFtFYAXFWvAA==", "dev": true, "dependencies": { "@types/node": "*", + "jest-util": "^29.4.3", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-cleanup": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/js-cleanup/-/js-cleanup-1.2.0.tgz", + "integrity": "sha512-JeDD0yiiSt80fXzAVa/crrS0JDPQljyBG/RpOtaSbyDq03VHa9szJWMaWOYU/bcTn412uMN2MxApXq8v79cUiQ==", + "dev": true, + "dependencies": { + "magic-string": "^0.25.7", + "perf-regexes": "^1.0.1", + "skip-regex": "^1.0.2" + }, + "engines": { + "node": "^10.14.2 || >=12.0.0" + } + }, + "node_modules/js-sdsl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", + "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" } }, "node_modules/js-tokens": { @@ -5258,63 +4801,18 @@ "dev": true }, "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==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "dependencies": { - "argparse": "^2.0.1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -5331,10 +4829,17 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dev": true, "dependencies": { "bignumber.js": "^9.0.0" } }, + "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 + }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -5354,9 +4859,9 @@ "dev": true }, "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, "bin": { "json5": "lib/cli.js" @@ -5365,10 +4870,23 @@ "node": ">=6" } }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/jwa": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "dev": true, "dependencies": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", @@ -5379,11 +4897,21 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "dev": true, "dependencies": { "jwa": "^2.0.0", "safe-buffer": "^5.0.1" } }, + "node_modules/keyv": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", + "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -5393,11 +4921,6 @@ "node": ">=6" } }, - "node_modules/kuler": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" - }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -5444,16 +4967,6 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" - }, - "node_modules/lodash.mapvalues": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", - "integrity": "sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==" - }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -5466,37 +4979,72 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "node_modules/lodash.snakecase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" - }, - "node_modules/logform": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.4.2.tgz", - "integrity": "sha512-W4c9himeAwXEdZ05dQNerhFz2XG80P9Oj0loPUMV23VC2it0orMHQhJm4hdnnor3rd1HsGf6a2lPwBM1zeXHGw==", + "node_modules/log-symbols": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", + "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", + "dev": true, "dependencies": { - "@colors/colors": "1.5.0", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", - "triple-beam": "^1.3.0" + "chalk": "^5.0.0", + "is-unicode-supported": "^1.1.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + "node_modules/log-symbols/node_modules/chalk": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } }, - "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==", + "node_modules/loud-rejection": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-2.2.0.tgz", + "integrity": "sha512-S0FayMXku80toa5sZ6Ro4C+s+EtFDCsyJNG/AzFMfX3AxD5Si4dZsgzm/kKnbOxHl5Cv8jBlno8+3XYIh2pNjQ==", + "dev": true, "dependencies": { - "yallist": "^4.0.0" + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">=10" + "node": ">=8" + } + }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" } }, "node_modules/make-dir": { @@ -5514,15 +5062,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -5538,42 +5077,12 @@ "tmpl": "1.0.5" } }, - "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==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -5587,36 +5096,6 @@ "node": ">=8.6" } }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "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==", - "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==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -5626,6 +5105,15 @@ "node": ">=6" } }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -5638,15 +5126,36 @@ "node": "*" } }, - "node_modules/module-alias": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.2.tgz", - "integrity": "sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q==" - }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/multimatch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", + "dev": true, + "dependencies": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true }, "node_modules/natural-compare": { "version": "1.4.0", @@ -5654,18 +5163,11 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "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==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", + "dev": true, "dependencies": { "whatwg-url": "^5.0.0" }, @@ -5681,29 +5183,11 @@ } } }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/node-forge": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, "engines": { "node": ">= 6.13.0" } @@ -5715,94 +5199,74 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", "dev": true }, - "node_modules/nodemon": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.19.tgz", - "integrity": "sha512-4pv1f2bMDj0Eeg/MhGqxrtveeQ5/G/UVe9iO6uTZzjnRluSA4PVWf8CW99LUPwGB3eNIA7zUFoP77YuI7hOc0A==", + "node_modules/normalize-newline": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/normalize-newline/-/normalize-newline-4.1.0.tgz", + "integrity": "sha512-ff4jKqMI8Xl50/4Mms/9jPobzAV/UK+kXG2XJ/7AqOmxIx8mqfqTIHYxuAnEgJ2AQeBbLnlbmZ5+38Y9A0w/YA==", "dev": true, - "hasInstallScript": true, "dependencies": { - "chokidar": "^3.5.2", - "debug": "^3.2.7", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", - "pstree.remy": "^1.1.8", - "semver": "^5.7.1", - "simple-update-notifier": "^1.0.7", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" + "replace-buffer": "^1.2.1" }, "engines": { - "node": ">=8.10.0" + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/nodemon/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "dependencies": { - "ms": "^2.1.1" - } - }, - "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, + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, "engines": { - "node": ">=4" - } - }, - "node_modules/nodemon/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" + "node": ">=10" } }, - "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==", + "node_modules/normalize-package-data/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==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "node_modules/normalize-package-data/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "dependencies": { - "abbrev": "1" + "lru-cache": "^6.0.0" }, "bin": { - "nopt": "bin/nopt.js" + "semver": "bin/semver.js" }, "engines": { - "node": "*" + "node": ">=10" } }, + "node_modules/normalize-package-data/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -5812,6 +5276,18 @@ "node": ">=0.10.0" } }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -5824,76 +5300,24 @@ "node": ">=8" } }, - "node_modules/nwsapi": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.1.tgz", - "integrity": "sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg==", - "dev": true - }, - "node_modules/oauth": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.10.0.tgz", - "integrity": "sha512-1orQ9MT1vHFGQxhuy7E/0gECD3fd2fCC+PIX+/jgmU/gI3EpRocXtmtvxCO5x3WZ443FLTLFWNDjl5MPJf9u+Q==" - }, - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "engines": { - "node": ">= 6" - } - }, "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, "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==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "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==", + "dev": true, "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==", - "dependencies": { - "fn.name": "1.x.x" - } - }, "node_modules/onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", @@ -5909,6 +5333,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -5926,18 +5367,147 @@ "node": ">= 0.8.0" } }, - "node_modules/p-defer": { + "node_modules/ora": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/ora/-/ora-6.1.2.tgz", + "integrity": "sha512-EJQ3NiP5Xo94wJXIzAyOtSb0QEIAUu7m8t6UZ9krbz0vAJqr92JpcK/lEXg91q6B9pEGqrykkd2EQplnifDSBw==", + "dev": true, + "dependencies": { + "bl": "^5.0.0", + "chalk": "^5.0.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.6.1", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^1.1.0", + "log-symbols": "^5.1.0", + "strip-ansi": "^7.0.1", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-any": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-3.0.0.tgz", - "integrity": "sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==", + "resolved": "https://registry.npmjs.org/p-any/-/p-any-3.0.0.tgz", + "integrity": "sha512-5rqbqfsRWNb0sukt0awwgJMlaep+8jV45S15SKKB34z4UuzjcofIfnriCBhWjZP2jbVtjt9yRl7buB6RlKsu9w==", + "dev": true, + "dependencies": { + "p-cancelable": "^2.0.0", + "p-some": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true, "engines": { "node": ">=8" } }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "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, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -5975,6 +5545,80 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-map": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", + "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", + "dev": true, + "dependencies": { + "aggregate-error": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-some": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-some/-/p-some-5.0.0.tgz", + "integrity": "sha512-Js5XZxo6vHjB9NOYAzWDYAIyyiPvva0DWESAIWIK7uhSpGsyg5FwUPxipU/SOQx5x9EqhOh545d1jo6cVkitig==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0", + "p-cancelable": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-some/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, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-some/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-some/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "dependencies": { + "p-finally": "^1.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", @@ -6014,74 +5658,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/passport": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/passport/-/passport-0.5.3.tgz", - "integrity": "sha512-gGc+70h4gGdBWNsR3FuV3byLDY6KBTJAIExGFXTpQaYfbbcHCBlRRKx7RBQSpqEqc5Hh2qVzRs7ssvSfOpkUEA==", - "dependencies": { - "passport-strategy": "1.x.x", - "pause": "0.0.1" - }, - "engines": { - "node": ">= 0.4.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/jaredhanson" - } - }, - "node_modules/passport-google-oauth20": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/passport-google-oauth20/-/passport-google-oauth20-2.0.0.tgz", - "integrity": "sha512-KSk6IJ15RoxuGq7D1UKK/8qKhNfzbLeLrG3gkLZ7p4A6DBCcv7xpyQwuXtWdpyR0+E0mwkpjY1VfPOhxQrKzdQ==", - "dependencies": { - "passport-oauth2": "1.x.x" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/passport-oauth2": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.6.1.tgz", - "integrity": "sha512-ZbV43Hq9d/SBSYQ22GOiglFsjsD1YY/qdiptA+8ej+9C1dL1TVB+mBE5kDH/D4AJo50+2i8f4bx0vg4/yDDZCQ==", - "dependencies": { - "base64url": "3.x.x", - "oauth": "0.10.x", - "passport-strategy": "1.x.x", - "uid2": "0.0.x", - "utils-merge": "1.x.x" - }, - "engines": { - "node": ">= 0.4.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/jaredhanson" - } - }, - "node_modules/passport-strategy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", - "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==", - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -6115,25 +5691,15 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "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": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "node_modules/perf-regexes": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/perf-regexes/-/perf-regexes-1.0.1.tgz", + "integrity": "sha512-L7MXxUDtqr4PUaLFCDCXBfGV/6KLIuSEccizDI7JxT+c9x1G1v04BQ4+4oag84SHaCdrBgQAIs/Cqn+flwFPng==", "dev": true, "engines": { - "node": ">=8" + "node": ">=6.14" } }, - "node_modules/pause": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", - "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==" - }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -6182,10 +5748,19 @@ "node": ">= 0.8.0" } }, + "node_modules/prepend-http": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-3.0.1.tgz", + "integrity": "sha512-BLxfZh+m6UiAiCPZFJ4+vYoL7NrRs5XgCTRrjseATAggXhdZKKxn+JUNmuVYWY23bDHgaEHodxw8mnmtVEDtHw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", + "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", "dev": true, "bin": { "prettier": "bin-prettier.js" @@ -6210,17 +5785,17 @@ } }, "node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", + "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.1", + "@jest/schemas": "^29.4.3", "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" + "react-is": "^18.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/pretty-format/node_modules/ansi-styles": { @@ -6248,95 +5823,30 @@ "node": ">= 6" } }, - "node_modules/proto3-json-serializer": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-0.1.9.tgz", - "integrity": "sha512-A60IisqvnuI45qNRygJjrnNjX2TMdQGMY+57tR3nul3ZgO2zXkR9OGR8AXxJhkqx84g0FTnrfi3D5fWMSdANdQ==", - "dependencies": { - "protobufjs": "^6.11.2" - } - }, - "node_modules/protobufjs": { - "version": "6.11.3", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", - "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", - "hasInstallScript": true, - "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/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^4.0.0" - }, - "bin": { - "pbjs": "bin/pbjs", - "pbts": "bin/pbts" - } - }, - "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==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "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 - }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, - "node_modules/pumpify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz", - "integrity": "sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==", - "dependencies": { - "duplexify": "^4.1.1", - "inherits": "^2.0.3", - "pump": "^3.0.0" - } - }, "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, "dependencies": { "side-channel": "^1.0.4" }, @@ -6347,6 +5857,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -6367,46 +5883,134 @@ } ] }, - "node_modules/random-bytes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", - "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==", + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, "engines": { - "node": ">= 0.8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/read-pkg": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", + "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^3.0.2", + "parse-json": "^5.2.0", + "type-fest": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", + "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", + "dev": true, + "dependencies": { + "find-up": "^5.0.0", + "read-pkg": "^6.0.0", + "type-fest": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/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, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "node_modules/read-pkg-up/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, "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "p-locate": "^5.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true + "node_modules/read-pkg-up/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, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -6428,6 +6032,18 @@ "node": ">=8.10.0" } }, + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", @@ -6440,14 +6056,30 @@ "url": "https://github.com/sponsors/mysticatea" } }, + "node_modules/replace-buffer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/replace-buffer/-/replace-buffer-1.2.1.tgz", + "integrity": "sha512-ly3OKwKu+3T55DjP5PjIMzxgz9lFx6dQnBmAIxryZyRKl8f22juy12ShOyuq8WrQE5UlFOseZgQZDua0iF9DHw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "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, "engines": { "node": ">=0.10.0" } }, + "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==", + "dev": true + }, "node_modules/resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", @@ -6465,6 +6097,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true + }, "node_modules/resolve-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", @@ -6477,7 +6115,7 @@ "node": ">=8" } }, - "node_modules/resolve-cwd/node_modules/resolve-from": { + "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==", @@ -6486,34 +6124,38 @@ "node": ">=8" } }, - "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==", + "node_modules/resolve.exports": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.0.tgz", + "integrity": "sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg==", "dev": true, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/retry-request": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-4.2.2.tgz", - "integrity": "sha512-xA93uxUD/rogV7BV59agW/JHPGXeREMWiZc9jhcwY4YdZ7QOtC7qbomYg0n4wyk2lJhggjvKvhNX8wln/Aldhg==", + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, "dependencies": { - "debug": "^4.1.1", - "extend": "^3.0.2" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">=8.10.0" + "node": ">=8" } }, "node_modules/reusify": { @@ -6541,6 +6183,71 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rollup": { + "version": "3.17.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.17.2.tgz", + "integrity": "sha512-qMNZdlQPCkWodrAZ3qnJtvCAl4vpQ8q77uEujVCCbC/6CLB7Lcmvjq7HyiOSnf4fxTT9XgsE36oLHJBH49xjqA==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-cleanup": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-cleanup/-/rollup-plugin-cleanup-3.2.1.tgz", + "integrity": "sha512-zuv8EhoO3TpnrU8MX8W7YxSbO4gmOR0ny06Lm3nkFfq0IVKdBUtHwhVzY1OAJyNCIAdLiyPnOrU0KnO0Fri1GQ==", + "dev": true, + "dependencies": { + "js-cleanup": "^1.2.0", + "rollup-pluginutils": "^2.8.2" + }, + "engines": { + "node": "^10.14.2 || >=12.0.0" + }, + "peerDependencies": { + "rollup": ">=2.0" + } + }, + "node_modules/rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "dependencies": { + "estree-walker": "^0.6.1" + } + }, + "node_modules/rollup-pluginutils/node_modules/estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, + "node_modules/router-ips": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/router-ips/-/router-ips-1.0.0.tgz", + "integrity": "sha512-yBo6F52Un/WYioXbedBGvrKIiofbwt+4cUhdqDb9fNMJBI4D4jOy7jlxxaRVEvICPKU7xMmJDtDFR6YswX/sFQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -6565,21 +6272,19 @@ } }, "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", "dev": true, "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" + "tslib": "^2.1.0" } }, "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==", + "dev": true, "funding": [ { "type": "github", @@ -6595,104 +6300,26 @@ } ] }, - "node_modules/safe-stable-stringify": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.3.1.tgz", - "integrity": "sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg==", - "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==" - }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, "bin": { "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "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/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" } }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "node_modules/server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==", + "dev": true }, "node_modules/shebang-command": { "version": "2.0.0", @@ -6719,6 +6346,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -6734,97 +6362,138 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "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==", - "dependencies": { - "is-arrayish": "^0.3.1" + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/skip-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/skip-regex/-/skip-regex-1.0.2.tgz", + "integrity": "sha512-pEjMUbwJ5Pl/6Vn6FsamXHXItJXSRftcibixDmNCWbWhic0hzHrwkMZo0IZ7fMRH9KxcWDFSkzhccB4285PutA==", + "dev": true, + "engines": { + "node": ">=4.2" } }, - "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==" + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "node_modules/simple-update-notifier": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", - "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, "dependencies": { - "semver": "~7.0.0" + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" }, "engines": { - "node": ">=8.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/simple-update-notifier/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "node_modules/slice-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, - "bin": { - "semver": "bin/semver.js" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "engines": { - "node": ">= 8" + "node": ">=0.10.0" } }, "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, - "node_modules/source-map-support/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==", + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "dev": true + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/spawn-command": { - "version": "0.0.2-1", - "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", - "integrity": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==", + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, - "node_modules/split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, "dependencies": { - "through": "2" - }, + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", + "dev": true + }, + "node_modules/split-lines": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/split-lines/-/split-lines-3.0.0.tgz", + "integrity": "sha512-d0TpRBL/VfKDXsk8JxPF7zgF5pCUDdBMSlEL36xBgVeaX448t+yGXcJaikUyzkoKOJ0l6KpMfygzJU9naIuivw==", + "dev": true, "engines": { - "node": "*" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/sprintf-js": { @@ -6833,18 +6502,10 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, - "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==", - "engines": { - "node": "*" - } - }, "node_modules/stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, "dependencies": { "escape-string-regexp": "^2.0.0" @@ -6853,40 +6514,11 @@ "node": ">=10" } }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/stream-events": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", - "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", - "dependencies": { - "stubs": "^3.0.0" - } - }, - "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" - }, "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==", + "dev": true, "dependencies": { "safe-buffer": "~5.2.0" } @@ -6908,6 +6540,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -6921,6 +6554,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -6958,40 +6592,7 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stubs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", - "integrity": "sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==" - }, "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, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -7015,64 +6616,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "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==", - "dev": true - }, - "node_modules/teeny-request": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-7.2.0.tgz", - "integrity": "sha512-SyY0pek1zWsi0LRVAALem+avzMLc33MKW/JLLakdP4s9+D7+jHcy5x6P+h94g2QNZsAqQNfX5lsbd3WSeJXrrw==", - "dependencies": { - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "node-fetch": "^2.6.1", - "stream-events": "^1.0.5", - "uuid": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/teeny-request/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==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/teeny-request/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==", - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -7087,27 +6630,29 @@ "node": ">=8" } }, - "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==" - }, "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 }, - "node_modules/throat": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", - "dev": true - }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } }, "node_modules/tmpl": { "version": "1.0.5", @@ -7136,99 +6681,45 @@ "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==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "dependencies": { - "nopt": "~1.0.10" - }, - "bin": { - "nodetouch": "bin/nodetouch.js" - } - }, - "node_modules/tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", - "dev": true, - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true }, "node_modules/ts-jest": { - "version": "27.1.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.5.tgz", - "integrity": "sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==", + "version": "29.0.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.0.5.tgz", + "integrity": "sha512-PL3UciSgIpQ7f6XjVOmbi96vmDHUqAyqDr8YxzopDqX3kfgYtX1cuNeBjP+L9sFXi6nzsGGA6R3fP3DDDJyrxA==", "dev": true, "dependencies": { "bs-logger": "0.x", "fast-json-stable-stringify": "2.x", - "jest-util": "^27.0.0", - "json5": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", "lodash.memoize": "4.x", "make-error": "1.x", "semver": "7.x", - "yargs-parser": "20.x" + "yargs-parser": "^21.0.1" }, "bin": { "ts-jest": "cli.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", - "@types/jest": "^27.0.0", - "babel-jest": ">=27.0.0 <28", - "jest": "^27.0.0", - "typescript": ">=3.8 <5.0" + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3" }, "peerDependenciesMeta": { "@babel/core": { "optional": true }, - "@types/jest": { + "@jest/types": { "optional": true }, "babel-jest": { @@ -7239,79 +6730,70 @@ } } }, - "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "node_modules/ts-jest/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==", "dev": true, "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" + "yallist": "^4.0.0" }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } + "engines": { + "node": ">=10" } }, - "node_modules/ts-node/node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "node_modules/ts-jest/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">=0.4.0" + "node": ">=10" } }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "node_modules/ts-jest/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "node_modules/ts2gas": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ts2gas/-/ts2gas-4.2.0.tgz", + "integrity": "sha512-5xZugaeM3wKQPj/vrWnrtYjNh4xnIz6cGSW/smCe9OTmkh1+KvHpm7M7HLq/OnBaljf4+yKctC4AYimBi4T1/Q==", + "dev": true, + "dependencies": { + "type-fest": "^2.1.0", + "typescript": "^4.4.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/ts2gas/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, "engines": { - "node": ">= 6" + "node": ">=12.20" }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", + "dev": true + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -7334,9 +6816,9 @@ } }, "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==", + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, "engines": { "node": ">=10" @@ -7345,31 +6827,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "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, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, "node_modules/typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -7379,49 +6840,19 @@ "node": ">=4.2.0" } }, - "node_modules/uid-safe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", - "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", - "dependencies": { - "random-bytes": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/uid2": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz", - "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA==" - }, - "node_modules/undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "dev": true - }, "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, "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==", - "engines": { - "node": ">= 0.8" + "node": ">= 10.0.0" } }, "node_modules/update-browserslist-db": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", - "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", "dev": true, "funding": [ { @@ -7453,85 +6884,65 @@ "punycode": "^2.1.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==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "node_modules/url-template": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", - "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==" + "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==", + "dev": true }, "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==" - }, - "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==", - "engines": { - "node": ">= 0.4.0" - } + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true }, "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, "bin": { "uuid": "dist/bin/uuid" } }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, "node_modules/v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", + "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", "dev": true, "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" + "convert-source-map": "^1.6.0" }, "engines": { "node": ">=10.12.0" } }, - "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==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } + "node_modules/v8-to-istanbul/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 }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "node_modules/walker": { @@ -7543,42 +6954,29 @@ "makeerror": "1.0.12" } }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true, - "engines": { - "node": ">=10.4" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, "dependencies": { - "iconv-lite": "0.4.24" + "defaults": "^1.0.3" } }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "dev": true }, "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, "node_modules/which": { @@ -7596,39 +6994,6 @@ "node": ">= 8" } }, - "node_modules/winston": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.8.1.tgz", - "integrity": "sha512-r+6YAiCR4uI3N8eQNOg8k3P3PqwAm20cLKlzVD9E66Ch39+LZC+VH1UKf9JemQj2B3QoUHfKD7Poewn0Pr3Y1w==", - "dependencies": { - "@dabh/diagnostics": "^2.0.2", - "async": "^3.2.3", - "is-stream": "^2.0.0", - "logform": "^2.4.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" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/winston-transport": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz", - "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==", - "dependencies": { - "logform": "^2.3.2", - "readable-stream": "^3.6.0", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 6.4.0" - } - }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -7642,6 +7007,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -7657,104 +7023,69 @@ "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==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, "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==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, "dependencies": { "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "signal-exit": "^3.0.7" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, "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, "engines": { "node": ">=10" } }, "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true }, "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "dev": true, "dependencies": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.1.1" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, "engines": { - "node": ">=6" + "node": ">=12" } }, "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, "engines": { "node": ">=10" }, @@ -7784,50 +7115,51 @@ } }, "@babel/compat-data": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", - "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz", + "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==", "dev": true }, "@babel/core": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.9.tgz", - "integrity": "sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.0.tgz", + "integrity": "sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA==", "dev": true, "requires": { - "@ampproject/remapping": "^2.1.0", + "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.9", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helpers": "^7.18.9", - "@babel/parser": "^7.18.9", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9", + "@babel/generator": "^7.21.0", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-module-transforms": "^7.21.0", + "@babel/helpers": "^7.21.0", + "@babel/parser": "^7.21.0", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", + "json5": "^2.2.2", "semver": "^6.3.0" }, "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "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 } } }, "@babel/generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.9.tgz", - "integrity": "sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug==", + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz", + "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==", "dev": true, "requires": { - "@babel/types": "^7.18.9", + "@babel/types": "^7.21.0", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "dependencies": { @@ -7845,23 +7177,16 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", - "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", + "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.18.8", + "@babel/compat-data": "^7.20.5", "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } } }, "@babel/helper-environment-visitor": { @@ -7871,13 +7196,13 @@ "dev": true }, "@babel/helper-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", - "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", "dev": true, "requires": { - "@babel/template": "^7.18.6", - "@babel/types": "^7.18.9" + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" } }, "@babel/helper-hoist-variables": { @@ -7899,34 +7224,34 @@ } }, "@babel/helper-module-transforms": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", - "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.0.tgz", + "integrity": "sha512-eD/JQ21IG2i1FraJnTMbUarAUkA7G988ofehG5MDCRXaUU91rEBJuCeSoou2Sk1y4RbLYXzqEg1QLwEmRU4qcQ==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0" } }, "@babel/helper-plugin-utils": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", - "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", "dev": true }, "@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", "dev": true, "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.20.2" } }, "@babel/helper-split-export-declaration": { @@ -7938,27 +7263,33 @@ "@babel/types": "^7.18.6" } }, + "@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "dev": true + }, "@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", "dev": true }, "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", + "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", "dev": true }, "@babel/helpers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", - "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", + "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", "dev": true, "requires": { - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0" } }, "@babel/highlight": { @@ -8031,9 +7362,9 @@ } }, "@babel/parser": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.9.tgz", - "integrity": "sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg==", + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.1.tgz", + "integrity": "sha512-JzhBFpkuhBNYUY7qs+wTzNmyCWUHEaAFpQQD2YfU1rPL38/L43Wvid0fFkiOCnHvsGncRZgEPyGnltABLcVDTg==", "dev": true }, "@babel/plugin-syntax-async-generators": { @@ -8081,6 +7412,15 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, "@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", @@ -8145,58 +7485,51 @@ } }, "@babel/plugin-syntax-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", - "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", + "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.19.0" } }, "@babel/template": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", - "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", "dev": true, "requires": { "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.6", - "@babel/types": "^7.18.6" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" } }, "@babel/traverse": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.9.tgz", - "integrity": "sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.0.tgz", + "integrity": "sha512-Xdt2P1H4LKTO8ApPfnO1KmzYMFpp7D/EinoXzLYN/cHcBNrVCAkAtGUcXnHXrl/VGktureU6fkQrHSBE2URfoA==", "dev": true, "requires": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.9", + "@babel/generator": "^7.21.0", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.9", - "@babel/types": "^7.18.9", + "@babel/parser": "^7.21.0", + "@babel/types": "^7.21.0", "debug": "^4.1.0", "globals": "^11.1.0" - }, - "dependencies": { - "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 - } } }, "@babel/types": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz", - "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.0.tgz", + "integrity": "sha512-uR7NWq2VNFnDi7EYqiRz2Jv/VQIu38tu64Zy8TX2nQFQ6etJ9V/Rr2msW8BS132mum2rL645qpDrLtAJtVpuow==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.18.6", + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" } }, @@ -8205,317 +7538,168 @@ "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true - }, - "@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==" - }, - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - } - } - }, - "@dabh/diagnostics": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", - "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", - "requires": { - "colorspace": "1.1.x", - "enabled": "2.0.x", - "kuler": "^2.0.0" - } - }, - "@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.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" - } - }, - "@google-cloud/common": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-3.10.0.tgz", - "integrity": "sha512-XMbJYMh/ZSaZnbnrrOFfR/oQrb0SxG4qh6hDisWCoEbFcBHV0qHQo4uXfeMCzolx2Mfkh6VDaOGg+hyJsmxrlw==", - "requires": { - "@google-cloud/projectify": "^2.0.0", - "@google-cloud/promisify": "^2.0.0", - "arrify": "^2.0.1", - "duplexify": "^4.1.1", - "ent": "^2.2.0", - "extend": "^3.0.2", - "google-auth-library": "^7.14.0", - "retry-request": "^4.2.2", - "teeny-request": "^7.0.0" - } - }, - "@google-cloud/connect-firestore": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@google-cloud/connect-firestore/-/connect-firestore-2.0.2.tgz", - "integrity": "sha512-2sIqeEYetoGQYKjoVkJgGWrBdR83S8ru0ri1eFlgEib/nAas86oIQVVjCefH2YaNiXTng28AMf1YCspSiW8YlQ==", - "requires": {} - }, - "@google-cloud/debug-agent": { - "version": "5.2.9", - "resolved": "https://registry.npmjs.org/@google-cloud/debug-agent/-/debug-agent-5.2.9.tgz", - "integrity": "sha512-VnHwkQqWawSLsN1EXCmox3//jhehoV0kCI7bgsaBARF3B+/U2p1CCGbF05JNj/Z6S5g8C9ZQIbWCSLD4P1mcYQ==", - "requires": { - "@google-cloud/common": "^3.0.0", - "acorn": "^8.0.0", - "coffeescript": "^2.0.0", - "console-log-level": "^1.4.0", - "extend": "^3.0.2", - "findit2": "^2.2.3", - "gcp-metadata": "^4.0.0", - "p-limit": "^3.0.1", - "semver": "^7.0.0", - "source-map": "^0.7.3", - "split": "^1.0.0" - } - }, - "@google-cloud/firestore": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-4.15.1.tgz", - "integrity": "sha512-2PWsCkEF1W02QbghSeRsNdYKN1qavrHBP3m72gPDMHQSYrGULOaTi7fSJquQmAtc4iPVB2/x6h80rdLHTATQtA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "functional-red-black-tree": "^1.0.1", - "google-gax": "^2.24.1", - "protobufjs": "^6.8.6" - } - }, - "@google-cloud/logging": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/@google-cloud/logging/-/logging-9.9.0.tgz", - "integrity": "sha512-rJQ0i9COI1WbtWuGyXL8edF4OA3XHcvgAq5I2DZmjKFvmCLCcspFIWZtztxgd0UgmrrshQVZ0R76oBHjTGggkg==", - "requires": { - "@google-cloud/common": "^3.4.1", - "@google-cloud/paginator": "^3.0.0", - "@google-cloud/projectify": "^2.0.0", - "@google-cloud/promisify": "^2.0.0", - "arrify": "^2.0.1", - "dot-prop": "^6.0.0", - "eventid": "^2.0.0", - "extend": "^3.0.2", - "gcp-metadata": "^4.0.0", - "google-auth-library": "^7.0.0", - "google-gax": "^2.24.1", - "on-finished": "^2.3.0", - "pumpify": "^2.0.1", - "stream-events": "^1.0.5", - "uuid": "^8.0.0" - } - }, - "@google-cloud/logging-winston": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@google-cloud/logging-winston/-/logging-winston-4.2.4.tgz", - "integrity": "sha512-As2h5hH6Y+5AGeqL51tPLASrfvIbuY7awePCnHuTHIGwpikUtGCpYWe2/AuufXmDB5z5c1fjoCJDkIbrx8SBhA==", - "requires": { - "@google-cloud/logging": "^9.6.9", - "google-auth-library": "^7.0.0", - "lodash.mapvalues": "^4.6.0", - "winston-transport": "^4.3.0" - } - }, - "@google-cloud/paginator": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-3.0.7.tgz", - "integrity": "sha512-jJNutk0arIQhmpUUQJPJErsojqo834KcyB6X7a1mxuic8i1tKXxde8E69IZxNZawRIlZdIK2QY4WALvlK5MzYQ==", - "requires": { - "arrify": "^2.0.0", - "extend": "^3.0.2" - } - }, - "@google-cloud/precise-date": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@google-cloud/precise-date/-/precise-date-2.0.4.tgz", - "integrity": "sha512-nOB+mZdevI/1Si0QAfxWfzzIqFdc7wrO+DYePFvgbOoMtvX+XfFTINNt7e9Zg66AbDbWCPRnikU+6f5LTm9Wyg==" - }, - "@google-cloud/projectify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-2.1.1.tgz", - "integrity": "sha512-+rssMZHnlh0twl122gXY4/aCrk0G1acBqkHFfYddtsqpYXGxA29nj9V5V9SfC+GyOG00l650f6lG9KL+EpFEWQ==" - }, - "@google-cloud/promisify": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-2.0.4.tgz", - "integrity": "sha512-j8yRSSqswWi1QqUGKVEKOG03Q7qOoZP6/h2zN2YO+F5h2+DHU0bSrHCK9Y7lo2DI9fBd8qGAw795sf+3Jva4yA==" - }, - "@google-cloud/pubsub": { - "version": "2.19.4", - "resolved": "https://registry.npmjs.org/@google-cloud/pubsub/-/pubsub-2.19.4.tgz", - "integrity": "sha512-+aZxq6N5XGarQS3xGXjKSRFy4TB+3PMpI0CBmSrcC59g3TB5nmwps3pv/KkdLa0Cd+CPHDdfrEW1uSrGBMLICw==", - "requires": { - "@google-cloud/paginator": "^3.0.6", - "@google-cloud/precise-date": "^2.0.0", - "@google-cloud/projectify": "^2.0.0", - "@google-cloud/promisify": "^2.0.0", - "@opentelemetry/api": "^1.0.0", - "@opentelemetry/semantic-conventions": "^1.0.0", - "@types/duplexify": "^3.6.0", - "@types/long": "^4.0.0", - "arrify": "^2.0.0", - "extend": "^3.0.2", - "google-auth-library": "^7.0.0", - "google-gax": "2.30.3", - "is-stream-ended": "^0.1.4", - "lodash.snakecase": "^4.1.1", - "p-defer": "^3.0.0" + }, + "@eslint/eslintrc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", + "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.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" }, "dependencies": { - "@grpc/proto-loader": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.9.tgz", - "integrity": "sha512-UlcCS8VbsU9d3XTXGiEVFonN7hXk+oMXZtoHHG2oSA1/GcDP1q6OUgs20PzHDGizzyi8ufGSUDlk3O2NyY7leg==", - "requires": { - "@types/long": "^4.0.1", - "lodash.camelcase": "^4.3.0", - "long": "^4.0.0", - "protobufjs": "^6.10.0", - "yargs": "^16.2.0" - } + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, - "google-gax": { - "version": "2.30.3", - "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-2.30.3.tgz", - "integrity": "sha512-Zsd6hbJBMvAcJS3cYpAsmupvfsxygFR2meUZJcGeR7iUqYHCR/1Hf2aQNB9srrlXQMm91pNiUvW0Kz6Qld8QkA==", + "globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, "requires": { - "@grpc/grpc-js": "~1.6.0", - "@grpc/proto-loader": "0.6.9", - "@types/long": "^4.0.0", - "abort-controller": "^3.0.0", - "duplexify": "^4.0.0", - "fast-text-encoding": "^1.0.3", - "google-auth-library": "^7.14.0", - "is-stream-ended": "^0.1.4", - "node-fetch": "^2.6.1", - "object-hash": "^3.0.0", - "proto3-json-serializer": "^0.1.8", - "protobufjs": "6.11.2", - "retry-request": "^4.0.0" + "type-fest": "^0.20.2" } }, - "protobufjs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", - "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", + "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, "requires": { - "@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/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^4.0.0" + "argparse": "^2.0.1" } + }, + "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 } } }, - "@grpc/grpc-js": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.6.8.tgz", - "integrity": "sha512-Nt5tufF/O5Q310kP0cDzxznWMZW58GCTZhUUiAQ9B0K0ANKNQ4Lj/K9XK0vZg+UBKq5/7z7+8mXHHfrcwoeFJQ==", + "@google/clasp": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@google/clasp/-/clasp-2.4.2.tgz", + "integrity": "sha512-SrHzWSotR8c7mNBVwH81sFCc4HhoDrCevicJehQlvrvgdTvLIiU0Pfb5EYCzWUPBSC4Ez/nvW6wxsgaK7RrPjQ==", + "dev": true, "requires": { - "@grpc/proto-loader": "^0.7.0", - "@types/node": ">=12.12.47" - }, - "dependencies": { - "@grpc/proto-loader": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.0.tgz", - "integrity": "sha512-SGPZtVmqOvNfPFOA/nNPn+0Weqa5wubBgQ56+JgTbeLY2VezwtMjwPPFzh0kvQccwWT3a2TXT0ZGK/pJoOTk1A==", + "@sindresorhus/is": "^4.0.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.2", + "cli-truncate": "^3.0.0", + "commander": "^8.1.0", + "debounce": "^1.2.1", + "dotf": "^2.0.2", + "find-up": "^6.0.0", + "fs-extra": "^10.0.0", + "fuzzy": "^0.1.3", + "google-auth-library": "^7.6.2", + "googleapis": "^84.0.0", + "inquirer": "^8.1.2", + "inquirer-autocomplete-prompt-ipt": "^2.0.0", + "is-reachable": "^5.0.0", + "log-symbols": "^5.0.0", + "loud-rejection": "^2.2.0", + "make-dir": "^3.1.0", + "multimatch": "^5.0.0", + "normalize-newline": "^4.1.0", + "open": "^8.2.1", + "ora": "^6.0.0", + "p-map": "^5.1.0", + "read-pkg-up": "^8.0.0", + "recursive-readdir": "^2.2.2", + "server-destroy": "^1.0.1", + "split-lines": "^3.0.0", + "strip-bom": "^5.0.0", + "ts2gas": "^4.2.0", + "typescript": "^4.4.2" + }, + "dependencies": { + "find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "requires": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + } + }, + "locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "requires": { + "p-locate": "^6.0.0" + } + }, + "p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, "requires": { - "@types/long": "^4.0.1", - "lodash.camelcase": "^4.3.0", - "long": "^4.0.0", - "protobufjs": "^7.0.0", - "yargs": "^16.2.0" + "yocto-queue": "^1.0.0" } }, - "protobufjs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.0.0.tgz", - "integrity": "sha512-ffNIEm+quOcYtQvHdW406v1NQmZSuqVklxsXk076BtuFnlYZfigLU+JOMrTD8TUOyqHYbRI/fSVNvgd25YeN3w==", + "p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, "requires": { - "@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/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "dependencies": { - "long": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.0.tgz", - "integrity": "sha512-9RTUNjK60eJbx3uz+TEGF7fUr29ZDxR5QzXcyDpeSfeH28S9ycINflOgOlppit5U+4kNTe83KQnMEerw7GmE8w==" - } + "p-limit": "^4.0.0" } + }, + "path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true + }, + "strip-bom": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-5.0.0.tgz", + "integrity": "sha512-p+byADHF7SzEcVnLvc/r3uognM1hUhObuHXxJcgLCfD194XAkaLbjq3Wzb0N5G2tgIjH0dgT708Z51QxMeu60A==", + "dev": true + }, + "yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true } } }, - "@grpc/proto-loader": { - "version": "0.6.13", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.13.tgz", - "integrity": "sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g==", - "requires": { - "@types/long": "^4.0.1", - "lodash.camelcase": "^4.3.0", - "long": "^4.0.0", - "protobufjs": "^6.11.3", - "yargs": "^16.2.0" - } - }, "@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" } }, + "@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 + }, "@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", @@ -8533,33 +7717,6 @@ "get-package-type": "^0.1.0", "js-yaml": "^3.13.1", "resolve-from": "^5.0.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "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, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "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 - } } }, "@istanbuljs/schema": { @@ -8569,217 +7726,222 @@ "dev": true }, "@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.4.3.tgz", + "integrity": "sha512-W/o/34+wQuXlgqlPYTansOSiBnuxrTv61dEVkA6HNmpcgHLUjfaUbdqt6oVvOzaawwo9IdW9QOtMgQ1ScSZC4A==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.4.3", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-message-util": "^29.4.3", + "jest-util": "^29.4.3", "slash": "^3.0.0" } }, "@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.4.3.tgz", + "integrity": "sha512-56QvBq60fS4SPZCuM7T+7scNrkGIe7Mr6PVIXUpu48ouvRaWOFqRPV91eifvFM0ay2HmfswXiGf97NGUN5KofQ==", "dev": true, "requires": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.4.3", + "@jest/reporters": "^29.4.3", + "@jest/test-result": "^29.4.3", + "@jest/transform": "^29.4.3", + "@jest/types": "^29.4.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "emittery": "^0.8.1", + "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", + "jest-changed-files": "^29.4.3", + "jest-config": "^29.4.3", + "jest-haste-map": "^29.4.3", + "jest-message-util": "^29.4.3", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.4.3", + "jest-resolve-dependencies": "^29.4.3", + "jest-runner": "^29.4.3", + "jest-runtime": "^29.4.3", + "jest-snapshot": "^29.4.3", + "jest-util": "^29.4.3", + "jest-validate": "^29.4.3", + "jest-watcher": "^29.4.3", "micromatch": "^4.0.4", - "rimraf": "^3.0.0", + "pretty-format": "^29.4.3", "slash": "^3.0.0", "strip-ansi": "^6.0.0" } }, "@jest/environment": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", - "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.4.3.tgz", + "integrity": "sha512-dq5S6408IxIa+lr54zeqce+QgI+CJT4nmmA+1yzFgtcsGK8c/EyiUb9XQOgz3BMKrRDfKseeOaxj2eO8LlD3lA==", "dev": true, "requires": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/fake-timers": "^29.4.3", + "@jest/types": "^29.4.3", "@types/node": "*", - "jest-mock": "^27.5.1" + "jest-mock": "^29.4.3" + } + }, + "@jest/expect": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.4.3.tgz", + "integrity": "sha512-iktRU/YsxEtumI9zsPctYUk7ptpC+AVLLk1Ax3AsA4g1C+8OOnKDkIQBDHtD5hA/+VtgMd5AWI5gNlcAlt2vxQ==", + "dev": true, + "requires": { + "expect": "^29.4.3", + "jest-snapshot": "^29.4.3" + } + }, + "@jest/expect-utils": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.4.3.tgz", + "integrity": "sha512-/6JWbkxHOP8EoS8jeeTd9dTfc9Uawi+43oLKHfp6zzux3U2hqOOVnV3ai4RpDYHOccL6g+5nrxpoc8DmJxtXVQ==", + "dev": true, + "requires": { + "jest-get-type": "^29.4.3" } }, "@jest/fake-timers": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", - "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.4.3.tgz", + "integrity": "sha512-4Hote2MGcCTWSD2gwl0dwbCpBRHhE6olYEuTj8FMowdg3oQWNKr2YuxenPQYZ7+PfqPY1k98wKDU4Z+Hvd4Tiw==", "dev": true, "requires": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", + "@jest/types": "^29.4.3", + "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" + "jest-message-util": "^29.4.3", + "jest-mock": "^29.4.3", + "jest-util": "^29.4.3" } }, "@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.4.3.tgz", + "integrity": "sha512-8BQ/5EzfOLG7AaMcDh7yFCbfRLtsc+09E1RQmRBI4D6QQk4m6NSK/MXo+3bJrBN0yU8A2/VIcqhvsOLFmziioA==", "dev": true, "requires": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" + "@jest/environment": "^29.4.3", + "@jest/expect": "^29.4.3", + "@jest/types": "^29.4.3", + "jest-mock": "^29.4.3" } }, "@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.4.3.tgz", + "integrity": "sha512-sr2I7BmOjJhyqj9ANC6CTLsL4emMoka7HkQpcoMRlhCbQJjz2zsRzw0BDPiPyEFDXAbxKgGFYuQZiSJ1Y6YoTg==", "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.4.3", + "@jest/test-result": "^29.4.3", + "@jest/transform": "^29.4.3", + "@jest/types": "^29.4.3", + "@jridgewell/trace-mapping": "^0.3.15", "@types/node": "*", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", - "glob": "^7.1.2", + "glob": "^7.1.3", "graceful-fs": "^4.2.9", "istanbul-lib-coverage": "^3.0.0", "istanbul-lib-instrument": "^5.1.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-message-util": "^29.4.3", + "jest-util": "^29.4.3", + "jest-worker": "^29.4.3", "slash": "^3.0.0", - "source-map": "^0.6.0", "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + } + }, + "@jest/schemas": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", + "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.25.16" } }, "@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz", + "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==", "dev": true, "requires": { + "@jridgewell/trace-mapping": "^0.3.15", "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "graceful-fs": "^4.2.9" } }, "@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.4.3.tgz", + "integrity": "sha512-Oi4u9NfBolMq9MASPwuWTlC5WvmNRwI4S8YrQg5R5Gi47DYlBe3sh7ILTqi/LGrK1XUE4XY9KZcQJTH1WJCLLA==", "dev": true, "requires": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.4.3", + "@jest/types": "^29.4.3", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.4.3.tgz", + "integrity": "sha512-yi/t2nES4GB4G0mjLc0RInCq/cNr9dNwJxcGg8sslajua5Kb4kmozAc+qPLzplhBgfw1vLItbjyHzUN92UXicw==", "dev": true, "requires": { - "@jest/test-result": "^27.5.1", + "@jest/test-result": "^29.4.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" + "jest-haste-map": "^29.4.3", + "slash": "^3.0.0" } }, "@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.4.3.tgz", + "integrity": "sha512-8u0+fBGWolDshsFgPQJESkDa72da/EVwvL+II0trN2DR66wMwiQ9/CihaGfHdlLGFzbBZwMykFtxuwFdZqlKwg==", "dev": true, "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", + "@babel/core": "^7.11.6", + "@jest/types": "^29.4.3", + "@jridgewell/trace-mapping": "^0.3.15", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^29.4.3", + "jest-regex-util": "^29.4.3", + "jest-util": "^29.4.3", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "write-file-atomic": "^4.0.2" } }, "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.4.3.tgz", + "integrity": "sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA==", "dev": true, "requires": { + "@jest/schemas": "^29.4.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, @@ -8812,13 +7974,13 @@ "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", "dev": true, "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, "@nodelib/fs.scandir": { @@ -8847,126 +8009,78 @@ "fastq": "^1.6.0" } }, - "@opentelemetry/api": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.1.0.tgz", - "integrity": "sha512-hf+3bwuBwtXsugA2ULBc95qxrOqP2pOekLz34BJhcAKawt94vfeNyUKpYc0lZQ/3sCP6LqRa7UAdHA7i5UODzQ==" - }, - "@opentelemetry/semantic-conventions": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.4.0.tgz", - "integrity": "sha512-Hzl8soGpmyzja9w3kiFFcYJ7n5HNETpplY6cb67KR4QPlxp4FTTresO06qXHgHDhyIInmbLJXuwARjjpsKYGuQ==" - }, - "@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - }, - "@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" - }, - "@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "@rollup/plugin-node-resolve": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.1.tgz", + "integrity": "sha512-ReY88T7JhJjeRVbfCyNj+NXAG3IIsVMsX9b5/9jC98dRP8/yxlZdz7mHZbHk5zHr24wZZICS5AcXsFZAXYUQEg==", + "dev": true, "requires": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.0", + "is-module": "^1.0.0", + "resolve": "^1.22.1" } }, - "@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" - }, - "@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" - }, - "@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + "@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "requires": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + } }, - "@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + "@sinclair/typebox": { + "version": "0.25.23", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.23.tgz", + "integrity": "sha512-VEB8ygeP42CFLWyAJhN5OklpxUliqdNEUcXb4xZ/CINqtYGTjL5ukluKdKzQ0iWdUxyQ7B0539PAUhHKrCNWSQ==", + "dev": true }, - "@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + "@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true }, "@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", + "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", "dev": true, "requires": { "type-detect": "4.0.8" } }, "@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz", + "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==", "dev": true, "requires": { - "@sinonjs/commons": "^1.7.0" + "@sinonjs/commons": "^2.0.0" } }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, - "@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true + "@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, + "requires": { + "defer-to-connect": "^2.0.0" + } }, "@types/babel__core": { - "version": "7.1.19", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", - "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", + "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", "dev": true, "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" @@ -8992,97 +8106,62 @@ } }, "@types/babel__traverse": { - "version": "7.17.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", - "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", + "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", "dev": true, "requires": { "@babel/types": "^7.3.0" } }, - "@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dev": true, - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", "dev": true, "requires": { - "@types/node": "*" + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" } }, - "@types/cors": { - "version": "2.8.12", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", - "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", + "@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", "dev": true }, - "@types/duplexify": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@types/duplexify/-/duplexify-3.6.1.tgz", - "integrity": "sha512-n0zoEj/fMdMOvqbHxmqnza/kXyoGgJmEpsXjpP+gEqE1Ye4yNqc7xWipKnUoMpWhMuzJQSfK2gMrwlElly7OGQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/errorhandler": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@types/errorhandler/-/errorhandler-1.5.0.tgz", - "integrity": "sha512-g5jrn2aofEn7O2OW/T+PlmGUUD/AtrX7DI87zrxz6rK5XIyvQf3FbPJrwgYaVjVOaCyvEkx9yxLd/XlEA43OcA==", - "dev": true, - "requires": { - "@types/express": "*" - } - }, - "@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", - "dev": true, - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.29", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz", - "integrity": "sha512-uMd++6dMKS32EOuw1Uli3e3BPgdLIXmezcfHv7N4c1s3gkhikBplORPpMq3fuWkxncZN1reb16d5n8yhQ80x7Q==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } + "@types/google-apps-script": { + "version": "1.0.57", + "resolved": "https://registry.npmjs.org/@types/google-apps-script/-/google-apps-script-1.0.57.tgz", + "integrity": "sha512-w06Yoh+SamGpS2kGVlGy/5JkmFkLrW6u3tbglyHEu9uC9lrzqr6FyLcgVsL95Tmq9L0q//D8seqd4GZGRPPKUw==", + "dev": true }, - "@types/express-session": { - "version": "1.17.5", - "resolved": "https://registry.npmjs.org/@types/express-session/-/express-session-1.17.5.tgz", - "integrity": "sha512-l0DhkvNVfyUPEEis8fcwbd46VptfA/jmMwHfob2TfDMf3HyPLiB9mKD71LXhz5TMUobODXPD27zXSwtFQLHm+w==", + "@types/google-apps-script-oauth2": { + "version": "38.0.0", + "resolved": "https://registry.npmjs.org/@types/google-apps-script-oauth2/-/google-apps-script-oauth2-38.0.0.tgz", + "integrity": "sha512-TxaCxXmAb3/Qm/kSweW+PPIckNwLvZo6maGI0oKx/MBdl/WrZkPAY7Mi56qg2xPGBObqG80rmYU691SAHiUdJg==", "dev": true, "requires": { - "@types/express": "*" + "@types/google-apps-script": "*" } }, "@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", + "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", "dev": true, "requires": { "@types/node": "*" } }, + "@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", + "dev": true + }, "@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", @@ -9108,272 +8187,98 @@ } }, "@types/jest": { - "version": "27.5.2", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz", - "integrity": "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==", + "version": "29.4.0", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.4.0.tgz", + "integrity": "sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ==", "dev": true, "requires": { - "jest-matcher-utils": "^27.0.0", - "pretty-format": "^27.0.0" + "expect": "^29.0.0", + "pretty-format": "^29.0.0" } }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "@types/long": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" - }, - "@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true - }, - "@types/node": { - "version": "16.11.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.45.tgz", - "integrity": "sha512-3rKg/L5x0rofKuuUt5zlXzOnKyIHXmIu5R8A0TuNDMF2062/AOIDBciFIjToLEJ/9F9DzkHNot+BpNsMI1OLdQ==" - }, - "@types/oauth": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@types/oauth/-/oauth-0.9.1.tgz", - "integrity": "sha512-a1iY62/a3yhZ7qH7cNUsxoI3U/0Fe9+RnuFrpTKr+0WVOzbKlSLojShCKe20aOD1Sppv+i8Zlq0pLDuTJnwS4A==", + "@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", "dev": true, "requires": { "@types/node": "*" } }, - "@types/passport": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@types/passport/-/passport-1.0.9.tgz", - "integrity": "sha512-9+ilzUhmZQR4JP49GdC2O4UdDE3POPLwpmaTC/iLkW7l0TZCXOo1zsTnnlXPq6rP1UsUZPfbAV4IUdiwiXyC7g==", - "dev": true, - "requires": { - "@types/express": "*" - } - }, - "@types/passport-google-oauth20": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/passport-google-oauth20/-/passport-google-oauth20-2.0.11.tgz", - "integrity": "sha512-9XMT1GfwhZL7UQEiCepLef55RNPHkbrCtsU7rsWPTEOsmu5qVIW8nSemtB4p+P24CuOhA+IKkv8LsPThYghGww==", - "dev": true, - "requires": { - "@types/express": "*", - "@types/passport": "*", - "@types/passport-oauth2": "*" - } - }, - "@types/passport-oauth2": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@types/passport-oauth2/-/passport-oauth2-1.4.11.tgz", - "integrity": "sha512-KUNwmGhe/3xPbjkzkPwwcPmyFwfyiSgtV1qOrPBLaU4i4q9GSCdAOyCbkFG0gUxAyEmYwqo9OAF/rjPjJ6ImdA==", - "dev": true, - "requires": { - "@types/express": "*", - "@types/oauth": "*", - "@types/passport": "*" - } - }, - "@types/prettier": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz", - "integrity": "sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==", - "dev": true - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", "dev": true }, - "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "@types/node": { + "version": "18.14.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.0.tgz", + "integrity": "sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==", "dev": true }, - "@types/serve-static": { - "version": "1.13.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", - "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", - "dev": true, - "requires": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", "dev": true }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "@types/prettier": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", + "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", "dev": true }, - "@typescript-eslint/eslint-plugin": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.7.tgz", - "integrity": "sha512-l4L6Do+tfeM2OK0GJsU7TUcM/1oN/N25xHm3Jb4z3OiDU4Lj8dIuxX9LpVMS9riSXQs42D1ieX7b85/r16H9Fw==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.30.7", - "@typescript-eslint/type-utils": "5.30.7", - "@typescript-eslint/utils": "5.30.7", - "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.2.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/parser": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.7.tgz", - "integrity": "sha512-Rg5xwznHWWSy7v2o0cdho6n+xLhK2gntImp0rJroVVFkcYFYQ8C8UJTSuTw/3CnExBmPjycjmUJkxVmjXsld6A==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.30.7", - "@typescript-eslint/types": "5.30.7", - "@typescript-eslint/typescript-estree": "5.30.7", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.7.tgz", - "integrity": "sha512-7BM1bwvdF1UUvt+b9smhqdc/eniOnCKxQT/kj3oXtj3LqnTWCAM0qHRHfyzCzhEfWX0zrW7KqXXeE4DlchZBKw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.30.7", - "@typescript-eslint/visitor-keys": "5.30.7" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.7.tgz", - "integrity": "sha512-nD5qAE2aJX/YLyKMvOU5jvJyku4QN5XBVsoTynFrjQZaDgDV6i7QHFiYCx10wvn7hFvfuqIRNBtsgaLe0DbWhw==", - "dev": true, - "requires": { - "@typescript-eslint/utils": "5.30.7", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/types": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.7.tgz", - "integrity": "sha512-ocVkETUs82+U+HowkovV6uxf1AnVRKCmDRNUBUUo46/5SQv1owC/EBFkiu4MOHeZqhKz2ktZ3kvJJ1uFqQ8QPg==", + "@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", "dev": true }, - "@typescript-eslint/typescript-estree": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.7.tgz", - "integrity": "sha512-tNslqXI1ZdmXXrHER83TJ8OTYl4epUzJC0aj2i4DMDT4iU+UqLT3EJeGQvJ17BMbm31x5scSwo3hPM0nqQ1AEA==", + "@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.30.7", - "@typescript-eslint/visitor-keys": "5.30.7", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "@types/node": "*" } }, - "@typescript-eslint/utils": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.7.tgz", - "integrity": "sha512-Z3pHdbFw+ftZiGUnm1GZhkJgVqsDL5CYW2yj+TB2mfXDFOMqtbzQi2dNJIyPqPbx9mv2kUxS1gU+r2gKlKi1rQ==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.30.7", - "@typescript-eslint/types": "5.30.7", - "@typescript-eslint/typescript-estree": "5.30.7", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true }, - "@typescript-eslint/visitor-keys": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.7.tgz", - "integrity": "sha512-KrRXf8nnjvcpxDFOKej4xkD7657+PClJs5cJVSG7NNoCNnjEdc46juNAQt7AyuWctuCgs6mVRc1xGctEqrjxWw==", + "@types/yargs": { + "version": "17.0.22", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz", + "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==", "dev": true, "requires": { - "@typescript-eslint/types": "5.30.7", - "eslint-visitor-keys": "^3.3.0" + "@types/yargs-parser": "*" } }, - "abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, "abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, "requires": { "event-target-shim": "^5.0.0" } }, - "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==", - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, "acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==" - }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - } - } + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true }, "acorn-jsx": { "version": "5.3.2", @@ -9382,20 +8287,25 @@ "dev": true, "requires": {} }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true - }, "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==", + "dev": true, "requires": { "debug": "4" } }, + "aggregate-error": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", + "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", + "dev": true, + "requires": { + "clean-stack": "^4.0.0", + "indent-string": "^5.0.0" + } + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -9415,55 +8325,53 @@ "dev": true, "requires": { "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - } } }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } }, "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", "dev": true }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", + "dev": true }, "array-union": { "version": "2.1.0", @@ -9474,48 +8382,19 @@ "arrify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" - }, - "async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", "dev": true }, - "axios": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", - "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", - "requires": { - "follow-redirects": "^1.14.7" - } - }, - "axios-mock-adapter": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/axios-mock-adapter/-/axios-mock-adapter-1.21.2.tgz", - "integrity": "sha512-jzyNxU3JzB2XVhplZboUcF0YDs7xuExzoRSHXPHr+UQajaGmcTqvkkUADgkVI2WkGlpZ1zZlMVdcTMU0ejV8zQ==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3", - "is-buffer": "^2.0.5" - } - }, "babel-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", - "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.4.3.tgz", + "integrity": "sha512-o45Wyn32svZE+LnMVWv/Z4x0SwtLbh4FyGcYtR20kIWd+rdrDZ9Fzq8Ml3MYLD+mZvEdzCjZsCnYZ2jpJyQ+Nw==", "dev": true, "requires": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/transform": "^29.4.3", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", + "babel-preset-jest": "^29.4.3", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" @@ -9535,14 +8414,14 @@ } }, "babel-plugin-jest-hoist": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", - "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.4.3.tgz", + "integrity": "sha512-mB6q2q3oahKphy5V7CpnNqZOCkxxZ9aokf1eh82Dy3jQmg4xvM1tGrh5y6BQUJh4a3Pj9+eLfwvAZ7VNKg7H8Q==", "dev": true, "requires": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", + "@types/babel__core": "^7.1.14", "@types/babel__traverse": "^7.0.6" } }, @@ -9567,12 +8446,12 @@ } }, "babel-preset-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", - "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.4.3.tgz", + "integrity": "sha512-gWx6COtSuma6n9bw+8/F+2PCXrIgxV/D1TJFnp6OyBK2cxPWg0K9p/sriNYeifKjpUkMViWQ09DSWtzJQRETsw==", "dev": true, "requires": { - "babel-plugin-jest-hoist": "^27.5.1", + "babel-plugin-jest-hoist": "^29.4.3", "babel-preset-current-node-syntax": "^1.0.0" } }, @@ -9585,17 +8464,14 @@ "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "base64url": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", - "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true }, "bignumber.js": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", - "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==" + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz", + "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==", + "dev": true }, "binary-extensions": { "version": "2.2.0", @@ -9603,38 +8479,15 @@ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, - "body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", - "requires": { - "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.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } + "bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dev": true, + "requires": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, "brace-expansion": { @@ -9656,22 +8509,16 @@ "fill-range": "^7.0.1" } }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, "browserslist": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.2.tgz", - "integrity": "sha512-MonuOgAtUB46uP5CezYbRaYKBNt2LxP0yX+Pmj4LkcDFGkn9Cbpi83d9sCjwQDErXsIJSzY5oKGDbgOlF/LPAA==", + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001366", - "electron-to-chromium": "^1.4.188", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.4" + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" } }, "bs-logger": { @@ -9692,10 +8539,21 @@ "node-int64": "^0.4.0" } }, + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "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==" + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "dev": true }, "buffer-from": { "version": "1.1.2", @@ -9703,15 +8561,49 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + "builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true + }, + "cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true + }, + "cacheable-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + } + } }, "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -9730,9 +8622,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001370", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001370.tgz", - "integrity": "sha512-3PDmaP56wz/qz7G508xzjx8C+MC2qEm4SYhSEzC9IBROo+dGXFWRuaXkWti0A9tuI00g+toiriVqxtWMgl350g==", + "version": "1.0.30001457", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001457.tgz", + "integrity": "sha512-SDIV6bgE1aVbK6XyxdURbUE89zY7+k1BBBaOwYwkNCglXlel/E7mELiHC64HQ+W0xSKlqWhV9Wh7iHxUjMs4fA==", "dev": true }, "chalk": { @@ -9743,17 +8635,6 @@ "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" - }, - "dependencies": { - "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, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "char-regex": { @@ -9762,6 +8643,12 @@ "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, "chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -9790,9 +8677,9 @@ } }, "ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", "dev": true }, "cjs-module-lexer": { @@ -9801,61 +8688,131 @@ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, + "clean-stack": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", + "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", + "dev": true, + "requires": { + "escape-string-regexp": "5.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true + } + } + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", + "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", + "dev": true + }, + "cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "dev": true, + "requires": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "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 + }, + "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, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true + }, "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, "requires": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", + "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true + }, + "clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true }, - "coffeescript": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-2.7.0.tgz", - "integrity": "sha512-hzWp6TUE2d/jCcN67LrW1eh5b/rSDKQK6oD6VMLlggYVUUFexgTH9z3dNYihzX4RMhze5FTUsUmOXViJKFQR/A==" - }, "collect-v8-coverage": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", "dev": true }, - "color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "requires": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - }, - "dependencies": { - "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==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - } - } - }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -9863,34 +8820,14 @@ "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==" - }, - "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==", - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "colorspace": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", - "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", - "requires": { - "color": "^3.1.3", - "text-hex": "1.0.x" - } + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true }, "concat-map": { "version": "0.0.1", @@ -9898,80 +8835,10 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, - "concurrently": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.5.1.tgz", - "integrity": "sha512-FlSwNpGjWQfRwPLXvJ/OgysbBxPkWpiVjy1042b0U7on7S7qwwMIILRj7WTN1mTgqa582bG6NFuScOoh6Zgdag==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "date-fns": "^2.16.1", - "lodash": "^4.17.21", - "rxjs": "^6.6.3", - "spawn-command": "^0.0.2-1", - "supports-color": "^8.1.0", - "tree-kill": "^1.2.2", - "yargs": "^16.2.0" - } - }, - "console-log-level": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/console-log-level/-/console-log-level-1.4.1.tgz", - "integrity": "sha512-VZzbIORbP+PPcN/gg3DXClTLPLg5Slwd5fL2MIc+o1qZ4BXBvWyc6QxPk6T/Mkr6IVjRpoAGf32XxP3ZWMVRcQ==" - }, - "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==", - "requires": { - "safe-buffer": "5.2.1" - } - }, - "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==" - }, "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "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": { - "object-assign": "^4", - "vary": "^1" - } - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "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 }, "cross-spawn": { @@ -9982,62 +8849,49 @@ "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - } + "which": "^2.0.1" } }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", "dev": true, "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" + "array-find-index": "^1.0.1" } }, - "date-fns": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.1.tgz", - "integrity": "sha512-dlLD5rKaKxpFdnjrs+5azHDFOPEu4ANy/LTh04A1DTzMM7qoajmKCBc8pkKRFT41CNzw+4gQh79X5C+Jq27HAw==", + "debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", "dev": true }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "requires": { "ms": "2.1.2" } }, - "decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", - "dev": true + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "requires": { + "mimic-response": "^3.1.0" + }, + "dependencies": { + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true + } + } }, "dedent": { "version": "0.7.0", @@ -10052,26 +8906,31 @@ "dev": true }, "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", + "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==", "dev": true }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true }, - "depd": { + "define-lazy-prop": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true }, "detect-newline": { "version": "3.1.0", @@ -10079,27 +8938,12 @@ "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, "diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", + "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", "dev": true }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -10109,100 +8953,58 @@ "esutils": "^2.0.2" } }, - "domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dotf": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dotf/-/dotf-2.0.2.tgz", + "integrity": "sha512-4cN2fwEqHimE11jVc8uMNiEB2A2YOL5Fdyd1p14UbAvRh/5vAxjEaiVPx45zD5IQcwc/uQIxI9Jh18skB/uYFQ==", "dev": true, "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true - } - } - }, - "dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "requires": { - "is-obj": "^2.0.0" + "graceful-fs": "^4.2.8", + "jsonfile": "^6.1.0" } }, - "dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==" - }, - "duplexify": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", - "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", - "requires": { - "end-of-stream": "^1.4.1", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1", - "stream-shift": "^1.0.0" - } + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true }, "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==", + "dev": true, "requires": { "safe-buffer": "^5.0.1" } }, - "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==" - }, "electron-to-chromium": { - "version": "1.4.199", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.199.tgz", - "integrity": "sha512-WIGME0Cs7oob3mxsJwHbeWkH0tYkIE/sjkJ8ML2BYmuRcjhRl/q5kVDXG7W9LOOKwzPU5M0LBlXRq9rlSgnNlg==", + "version": "1.4.305", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.305.tgz", + "integrity": "sha512-WETy6tG0CT5gm1O+xCbyapWNsCcmIvrn4NHViIGYo2AT8FV2qUCXdaB+WqYxSv/vS5mFqhBYnfZAAkVArjBmUg==", "dev": true }, "emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "enabled": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, "requires": { "once": "^1.4.0" } }, - "ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==" - }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -10215,94 +9017,25 @@ "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "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==" - }, - "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==", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true }, - "escodegen": { + "escape-string-regexp": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - } - } + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true }, "eslint": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.20.0.tgz", - "integrity": "sha512-d4ixhz5SKCa1D6SCPrivP7yYVi7nyD6A4vs6HIAul9ujBzcEmZVM3/0NN/yu5nKhmO1wjp5xQ46iRfmDGlOviA==", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.34.0.tgz", + "integrity": "sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", + "@eslint/eslintrc": "^1.4.1", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -10312,18 +9045,21 @@ "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", + "espree": "^9.4.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", @@ -10334,24 +9070,71 @@ "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "dependencies": { - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "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 + }, + "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, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "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, + "requires": { + "argparse": "^2.0.1" + } + }, + "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, + "requires": { + "p-locate": "^5.0.0" + } + }, + "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, "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "p-limit": "^3.0.2" } }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "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 } } @@ -10364,9 +9147,9 @@ "requires": {} }, "eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.6.0.tgz", + "integrity": "sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==", "dev": true, "requires": {} }, @@ -10380,13 +9163,13 @@ } }, "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "requires": { "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "estraverse": "^5.2.0" } }, "eslint-utils": { @@ -10413,12 +9196,12 @@ "dev": true }, "espree": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", - "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", "dev": true, "requires": { - "acorn": "^8.7.1", + "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.3.0" } @@ -10430,20 +9213,12 @@ "dev": true }, "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.2.tgz", + "integrity": "sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==", "dev": true, "requires": { "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } } }, "esrecurse": { @@ -10453,20 +9228,18 @@ "dev": true, "requires": { "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } } }, "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true }, "esutils": { @@ -10475,23 +9248,11 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" - }, "event-target-shim": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" - }, - "eventid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/eventid/-/eventid-2.0.1.tgz", - "integrity": "sha512-sPNTqiMokAvV048P2c9+foqVJzk49o6d4e0D/sq5jog3pw+4kBgyR0gaM1FM7Mx6Kzd9dztesh9oYz1LWWOpzw==", - "requires": { - "uuid": "^8.0.0" - } + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true }, "execa": { "version": "5.1.1", @@ -10517,114 +9278,40 @@ "dev": true }, "expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - } - }, - "express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.10.3", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "express-session": { - "version": "1.17.3", - "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz", - "integrity": "sha512-4+otWXlShYlG1Ma+2Jnn+xgKUZTMJ5QD3YvfilX3AcocOAbIkVylSWEklzALe/+Pu4qV6TYBj5GwOBFfdKqLBw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.4.3.tgz", + "integrity": "sha512-uC05+Q7eXECFpgDrHdXA4k2rpMyStAYPItEDLyQDo5Ta7fVkJnNA/4zh/OIVkVVNZ1oOK1PipQoyNjuZ6sz6Dg==", + "dev": true, "requires": { - "cookie": "0.4.2", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-headers": "~1.0.2", - "parseurl": "~1.3.3", - "safe-buffer": "5.2.1", - "uid-safe": "~2.1.5" - }, - "dependencies": { - "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } + "@jest/expect-utils": "^29.4.3", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.4.3", + "jest-message-util": "^29.4.3", + "jest-util": "^29.4.3" } }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true }, "fast-diff": { "version": "1.2.0", @@ -10632,30 +9319,6 @@ "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", "dev": true }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -10669,32 +9332,45 @@ "dev": true }, "fast-text-encoding": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.4.tgz", - "integrity": "sha512-x6lDDm/tBAzX9kmsPcZsNbvDs3Zey3+scsxaZElS8xWLgUMAg/oFLeewfUz0mu1CblHhhsu15jGkraldkFh8KQ==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", + "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==", + "dev": true }, "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, "requires": { "reusify": "^1.0.4" } }, "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, "requires": { "bser": "2.1.1" } }, - "fecha": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", - "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + } + } }, "file-entry-cache": { "version": "6.0.1", @@ -10714,35 +9390,6 @@ "to-regex-range": "^5.0.1" } }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -10753,11 +9400,6 @@ "path-exists": "^4.0.0" } }, - "findit2": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/findit2/-/findit2-2.2.3.tgz", - "integrity": "sha512-lg/Moejf4qXovVutL0Lz4IsaPoNYMuxt4PA0nGqFxnJ1CTTGGlEO2wKgoDpwknhvZ8k4Q2F+eesgkLbG2Mxfog==" - }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -10769,42 +9411,22 @@ } }, "flatted": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", - "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, - "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==" - }, - "follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" - }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -10821,17 +9443,20 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" + "fuzzy": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/fuzzy/-/fuzzy-0.1.3.tgz", + "integrity": "sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w==", + "dev": true }, "gaxios": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", + "dev": true, "requires": { "abort-controller": "^3.0.0", "extend": "^3.0.2", @@ -10844,6 +9469,7 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz", "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==", + "dev": true, "requires": { "gaxios": "^4.0.0", "json-bigint": "^1.0.0" @@ -10858,12 +9484,14 @@ "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true }, "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -10900,38 +9528,22 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "dev": true, + "requires": { + "is-glob": "^4.0.3" } }, + "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 + }, "google-auth-library": { "version": "7.14.1", "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.14.1.tgz", "integrity": "sha512-5Rk7iLNDFhFeBYc3s8l1CqzbEBcdhwR193RlD4vSNFajIcINKI8W8P0JLmBpwymHqqWbX34pJDQu39cSy/6RsA==", + "dev": true, "requires": { "arrify": "^2.0.0", "base64-js": "^1.3.0", @@ -10942,40 +9554,39 @@ "gtoken": "^5.0.4", "jws": "^4.0.0", "lru-cache": "^6.0.0" - } - }, - "google-gax": { - "version": "2.30.5", - "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-2.30.5.tgz", - "integrity": "sha512-Jey13YrAN2hfpozHzbtrwEfEHdStJh1GwaQ2+Akh1k0Tv/EuNVSuBtHZoKSBm5wBMvNsxTsEIZ/152NrYyZgxQ==", - "requires": { - "@grpc/grpc-js": "~1.6.0", - "@grpc/proto-loader": "^0.6.12", - "@types/long": "^4.0.0", - "abort-controller": "^3.0.0", - "duplexify": "^4.0.0", - "fast-text-encoding": "^1.0.3", - "google-auth-library": "^7.14.0", - "is-stream-ended": "^0.1.4", - "node-fetch": "^2.6.1", - "object-hash": "^3.0.0", - "proto3-json-serializer": "^0.1.8", - "protobufjs": "6.11.3", - "retry-request": "^4.0.0" + }, + "dependencies": { + "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==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } } }, "google-p12-pem": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.4.tgz", "integrity": "sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg==", + "dev": true, "requires": { "node-forge": "^1.3.1" } }, "googleapis": { - "version": "91.0.0", - "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-91.0.0.tgz", - "integrity": "sha512-iHqXZwgYam0g8n0Yyi+YHx8kgwT+H5O4k3fe0LB1JhWRp1dSKYu+ShY4PQbW584zLOE4kK3LHf2B+x1THx+ZPQ==", + "version": "84.0.0", + "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-84.0.0.tgz", + "integrity": "sha512-5WWLwmraulw3p55lu0gNpLz2FME1gcuR7QxgmUdAVHMiVN4LEasYjJV9p36gxcf2TMe6bn6+PgQ/63+CvBEgoQ==", + "dev": true, "requires": { "google-auth-library": "^7.0.2", "googleapis-common": "^5.0.2" @@ -10985,6 +9596,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-5.1.0.tgz", "integrity": "sha512-RXrif+Gzhq1QAzfjxulbGvAY3FPj8zq/CYcvgjzDbaBNCD6bUl+86I7mUs4DKWHGruuK26ijjR/eDpWIDgNROA==", + "dev": true, "requires": { "extend": "^3.0.2", "gaxios": "^4.0.0", @@ -10994,16 +9606,42 @@ "uuid": "^8.0.0" } }, + "got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dev": true, + "requires": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + } + }, "graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "gtoken": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.2.tgz", "integrity": "sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==", + "dev": true, "requires": { "gaxios": "^4.0.0", "google-p12-pem": "^3.1.3", @@ -11014,6 +9652,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -11027,15 +9666,33 @@ "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true }, - "html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "requires": { - "whatwg-encoding": "^1.0.5" + "lru-cache": "^6.0.0" + }, + "dependencies": { + "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==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } } }, "html-escaper": { @@ -11044,33 +9701,27 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "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==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } + "http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true }, - "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==", + "http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", "dev": true, "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" } }, "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==", + "dev": true, "requires": { "agent-base": "6", "debug": "4" @@ -11086,20 +9737,21 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true }, - "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==", + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true }, "import-fresh": { @@ -11110,6 +9762,14 @@ "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" + }, + "dependencies": { + "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 + } } }, "import-local": { @@ -11128,6 +9788,12 @@ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true }, + "indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -11141,12 +9807,179 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "inquirer": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", + "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true + }, + "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 + }, + "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, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + } + } + } }, - "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==" + "inquirer-autocomplete-prompt-ipt": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/inquirer-autocomplete-prompt-ipt/-/inquirer-autocomplete-prompt-ipt-2.0.0.tgz", + "integrity": "sha512-2qkl1lWeXbFN/O3+xdqJUdMfnNirvWKqgsgmhOjpOiVCcnJf+XYSEjFfdTgk+MDTtVt5AZiWR9Ji+f4YsWBdUw==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^2.4.2", + "figures": "^3.1.0", + "run-async": "^2.3.0", + "rxjs": "^6.5.3" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "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==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } }, "is-arrayish": { "version": "0.2.1", @@ -11163,21 +9996,30 @@ "binary-extensions": "^2.0.0" } }, - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true + "is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "requires": { + "builtin-modules": "^3.3.0" + } }, "is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "dev": true, "requires": { "has": "^1.0.3" } }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -11187,7 +10029,8 @@ "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true }, "is-generator-fn": { "version": "2.1.0", @@ -11204,39 +10047,73 @@ "is-extglob": "^2.1.1" } }, + "is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, "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 }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + "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 }, - "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==", + "is-port-reachable": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-port-reachable/-/is-port-reachable-3.1.0.tgz", + "integrity": "sha512-vjc0SSRNZ32s9SbZBzGaiP6YVB+xglLShhgZD/FHMZUXBvQWaV9CtzgeVhjccFJrI6RAMV+LX7NYxueW/A8W5A==", "dev": true }, + "is-reachable": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/is-reachable/-/is-reachable-5.2.1.tgz", + "integrity": "sha512-ViPrrlmt9FTTclYbz6mL/PFyF1TXSpJ9y/zw9QMVJxbhU/7DFkvk/5cTv7S0sXtqbJj32zZ+jKpNAjrYTUZBPQ==", + "dev": true, + "requires": { + "arrify": "^2.0.1", + "got": "^11.7.0", + "is-port-reachable": "^3.0.0", + "p-any": "^3.0.0", + "p-timeout": "^3.2.0", + "prepend-http": "^3.0.1", + "router-ips": "^1.0.0", + "url-parse": "^1.5.10" + } + }, "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" - }, - "is-stream-ended": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz", - "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==" + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", "dev": true }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -11250,9 +10127,9 @@ "dev": true }, "istanbul-lib-instrument": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", - "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, "requires": { "@babel/core": "^7.12.3", @@ -11260,14 +10137,6 @@ "@istanbuljs/schema": "^0.1.2", "istanbul-lib-coverage": "^3.2.0", "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } } }, "istanbul-lib-report": { @@ -11279,17 +10148,6 @@ "istanbul-lib-coverage": "^3.0.0", "make-dir": "^3.0.0", "supports-color": "^7.1.0" - }, - "dependencies": { - "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, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "istanbul-lib-source-maps": { @@ -11301,14 +10159,6 @@ "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } } }, "istanbul-reports": { @@ -11322,418 +10172,392 @@ } }, "jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", - "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.4.3.tgz", + "integrity": "sha512-XvK65feuEFGZT8OO0fB/QAQS+LGHvQpaadkH5p47/j3Ocqq3xf2pK9R+G0GzgfuhXVxEv76qCOOcMb5efLk6PA==", "dev": true, "requires": { - "@jest/core": "^27.5.1", + "@jest/core": "^29.4.3", + "@jest/types": "^29.4.3", "import-local": "^3.0.2", - "jest-cli": "^27.5.1" + "jest-cli": "^29.4.3" } }, "jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.4.3.tgz", + "integrity": "sha512-Vn5cLuWuwmi2GNNbokPOEcvrXGSGrqVnPEZV7rC6P7ck07Dyw9RFnvWglnupSh+hGys0ajGtw/bc2ZgweljQoQ==", "dev": true, "requires": { - "@jest/types": "^27.5.1", "execa": "^5.0.0", - "throat": "^6.0.1" + "p-limit": "^3.1.0" } }, "jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.4.3.tgz", + "integrity": "sha512-Vw/bVvcexmdJ7MLmgdT3ZjkJ3LKu8IlpefYokxiqoZy6OCQ2VAm6Vk3t/qHiAGUXbdbJKJWnc8gH3ypTbB/OBw==", "dev": true, "requires": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/environment": "^29.4.3", + "@jest/expect": "^29.4.3", + "@jest/test-result": "^29.4.3", + "@jest/types": "^29.4.3", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", - "expect": "^27.5.1", "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", + "jest-each": "^29.4.3", + "jest-matcher-utils": "^29.4.3", + "jest-message-util": "^29.4.3", + "jest-runtime": "^29.4.3", + "jest-snapshot": "^29.4.3", + "jest-util": "^29.4.3", + "p-limit": "^3.1.0", + "pretty-format": "^29.4.3", "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" + "stack-utils": "^2.0.3" } }, "jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.4.3.tgz", + "integrity": "sha512-PiiAPuFNfWWolCE6t3ZrDXQc6OsAuM3/tVW0u27UWc1KE+n/HSn5dSE6B2juqN7WP+PP0jAcnKtGmI4u8GMYCg==", "dev": true, "requires": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/core": "^29.4.3", + "@jest/test-result": "^29.4.3", + "@jest/types": "^29.4.3", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-config": "^29.4.3", + "jest-util": "^29.4.3", + "jest-validate": "^29.4.3", "prompts": "^2.0.1", - "yargs": "^16.2.0" + "yargs": "^17.3.1" } }, "jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.4.3.tgz", + "integrity": "sha512-eCIpqhGnIjdUCXGtLhz4gdDoxKSWXKjzNcc5r+0S1GKOp2fwOipx5mRcwa9GB/ArsxJ1jlj2lmlD9bZAsBxaWQ==", "dev": true, "requires": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.4.3", + "@jest/types": "^29.4.3", + "babel-jest": "^29.4.3", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", - "glob": "^7.1.1", + "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-circus": "^29.4.3", + "jest-environment-node": "^29.4.3", + "jest-get-type": "^29.4.3", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.4.3", + "jest-runner": "^29.4.3", + "jest-util": "^29.4.3", + "jest-validate": "^29.4.3", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", + "pretty-format": "^29.4.3", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" } }, "jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.4.3.tgz", + "integrity": "sha512-YB+ocenx7FZ3T5O9lMVMeLYV4265socJKtkwgk/6YUz/VsEzYDkiMuMhWzZmxm3wDRQvayJu/PjkjjSkjoHsCA==", "dev": true, "requires": { "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "diff-sequences": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.4.3" } }, "jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", + "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", "dev": true, "requires": { "detect-newline": "^3.0.0" } }, "jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.4.3.tgz", + "integrity": "sha512-1ElHNAnKcbJb/b+L+7j0/w7bDvljw4gTv1wL9fYOczeJrbTbkMGQ5iQPFJ3eFQH19VPTx1IyfePdqSpePKss7Q==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.4.3", "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-environment-jsdom": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", - "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" + "jest-get-type": "^29.4.3", + "jest-util": "^29.4.3", + "pretty-format": "^29.4.3" } }, "jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.4.3.tgz", + "integrity": "sha512-gAiEnSKF104fsGDXNkwk49jD/0N0Bqu2K9+aMQXA6avzsA9H3Fiv1PW2D+gzbOSR705bWd2wJZRFEFpV0tXISg==", "dev": true, "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/environment": "^29.4.3", + "@jest/fake-timers": "^29.4.3", + "@jest/types": "^29.4.3", "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" + "jest-mock": "^29.4.3", + "jest-util": "^29.4.3" } }, "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", + "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", "dev": true }, "jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - } - }, - "jest-jasmine2": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", - "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.4.3.tgz", + "integrity": "sha512-eZIgAS8tvm5IZMtKlR8Y+feEOMfo2pSQkmNbufdbMzMSn9nitgGxF1waM/+LbryO3OkMcKS98SUb+j/cQxp/vQ==", "dev": true, "requires": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" + "@jest/types": "^29.4.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.4.3", + "jest-util": "^29.4.3", + "jest-worker": "^29.4.3", + "micromatch": "^4.0.4", + "walker": "^1.0.8" } }, "jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.4.3.tgz", + "integrity": "sha512-9yw4VC1v2NspMMeV3daQ1yXPNxMgCzwq9BocCwYrRgXe4uaEJPAN0ZK37nFBhcy3cUwEVstFecFLaTHpF7NiGA==", "dev": true, "requires": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "jest-get-type": "^29.4.3", + "pretty-format": "^29.4.3" } }, "jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.4.3.tgz", + "integrity": "sha512-TTciiXEONycZ03h6R6pYiZlSkvYgT0l8aa49z/DLSGYjex4orMUcafuLXYyyEDWB1RKglq00jzwY00Ei7yFNVg==", "dev": true, "requires": { "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "jest-diff": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.4.3" } }, "jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.4.3.tgz", + "integrity": "sha512-1Y8Zd4ZCN7o/QnWdMmT76If8LuDv23Z1DRovBj/vcSFNlGCJGoO8D1nJDw1AdyAGUk0myDLFGN5RbNeJyCRGCw==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", + "@jest/types": "^29.4.3", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", + "pretty-format": "^29.4.3", "slash": "^3.0.0", "stack-utils": "^2.0.3" } }, "jest-mock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", - "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.4.3.tgz", + "integrity": "sha512-LjFgMg+xed9BdkPMyIJh+r3KeHt1klXPJYBULXVVAkbTaaKjPX1o1uVCAZADMEp/kOxGTwy/Ot8XbvgItOrHEg==", "dev": true, "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*" + "@jest/types": "^29.4.3", + "@types/node": "*", + "jest-util": "^29.4.3" } }, "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, "requires": {} }, "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", + "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", "dev": true }, "jest-resolve": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", - "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.4.3.tgz", + "integrity": "sha512-GPokE1tzguRyT7dkxBim4wSx6E45S3bOQ7ZdKEG+Qj0Oac9+6AwJPCk0TZh5Vu0xzeX4afpb+eDmgbmZFFwpOw==", "dev": true, "requires": { - "@jest/types": "^27.5.1", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", + "jest-haste-map": "^29.4.3", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-util": "^29.4.3", + "jest-validate": "^29.4.3", "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", + "resolve.exports": "^2.0.0", "slash": "^3.0.0" } }, "jest-resolve-dependencies": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", - "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.4.3.tgz", + "integrity": "sha512-uvKMZAQ3nmXLH7O8WAOhS5l0iWyT3WmnJBdmIHiV5tBbdaDZ1wqtNX04FONGoaFvSOSHBJxnwAVnSn1WHdGVaw==", "dev": true, "requires": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" + "jest-regex-util": "^29.4.3", + "jest-snapshot": "^29.4.3" } }, "jest-runner": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.4.3.tgz", + "integrity": "sha512-GWPTEiGmtHZv1KKeWlTX9SIFuK19uLXlRQU43ceOQ2hIfA5yPEJC7AMkvFKpdCHx6pNEdOD+2+8zbniEi3v3gA==", "dev": true, "requires": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.4.3", + "@jest/environment": "^29.4.3", + "@jest/test-result": "^29.4.3", + "@jest/transform": "^29.4.3", + "@jest/types": "^29.4.3", "@types/node": "*", "chalk": "^4.0.0", - "emittery": "^0.8.1", + "emittery": "^0.13.1", "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" + "jest-docblock": "^29.4.3", + "jest-environment-node": "^29.4.3", + "jest-haste-map": "^29.4.3", + "jest-leak-detector": "^29.4.3", + "jest-message-util": "^29.4.3", + "jest-resolve": "^29.4.3", + "jest-runtime": "^29.4.3", + "jest-util": "^29.4.3", + "jest-watcher": "^29.4.3", + "jest-worker": "^29.4.3", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" } }, "jest-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.4.3.tgz", + "integrity": "sha512-F5bHvxSH+LvLV24vVB3L8K467dt3y3dio6V3W89dUz9nzvTpqd/HcT9zfYKL2aZPvD63vQFgLvaUX/UpUhrP6Q==", + "dev": true, + "requires": { + "@jest/environment": "^29.4.3", + "@jest/fake-timers": "^29.4.3", + "@jest/globals": "^29.4.3", + "@jest/source-map": "^29.4.3", + "@jest/test-result": "^29.4.3", + "@jest/transform": "^29.4.3", + "@jest/types": "^29.4.3", + "@types/node": "*", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^29.4.3", + "jest-message-util": "^29.4.3", + "jest-mock": "^29.4.3", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.4.3", + "jest-snapshot": "^29.4.3", + "jest-util": "^29.4.3", "slash": "^3.0.0", "strip-bom": "^4.0.0" } }, - "jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - } - }, "jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.4.3.tgz", + "integrity": "sha512-NGlsqL0jLPDW91dz304QTM/SNO99lpcSYYAjNiX0Ou+sSGgkanKBcSjCfp/pqmiiO1nQaOyLp6XQddAzRcx3Xw==", "dev": true, "requires": { - "@babel/core": "^7.7.2", + "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.4.3", + "@jest/transform": "^29.4.3", + "@jest/types": "^29.4.3", + "@types/babel__traverse": "^7.0.6", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.5.1", + "expect": "^29.4.3", "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-diff": "^29.4.3", + "jest-get-type": "^29.4.3", + "jest-haste-map": "^29.4.3", + "jest-matcher-utils": "^29.4.3", + "jest-message-util": "^29.4.3", + "jest-util": "^29.4.3", "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" + "pretty-format": "^29.4.3", + "semver": "^7.3.5" + }, + "dependencies": { + "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==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } } }, "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.4.3.tgz", + "integrity": "sha512-ToSGORAz4SSSoqxDSylWX8JzkOQR7zoBtNRsA7e+1WUX5F8jrOwaNpuh1YfJHJKDHXLHmObv5eOjejUd+/Ws+Q==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.4.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -11742,17 +10566,17 @@ } }, "jest-validate": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", - "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.4.3.tgz", + "integrity": "sha512-J3u5v7aPQoXPzaar6GndAVhdQcZr/3osWSgTeKg5v574I9ybX/dTyH0AJFb5XgXIB7faVhf+rS7t4p3lL9qFaw==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.4.3", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", + "jest-get-type": "^29.4.3", "leven": "^3.1.0", - "pretty-format": "^27.5.1" + "pretty-format": "^29.4.3" }, "dependencies": { "camelcase": { @@ -11764,31 +10588,61 @@ } }, "jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.4.3.tgz", + "integrity": "sha512-zwlXH3DN3iksoIZNk73etl1HzKyi5FuQdYLnkQKm5BW4n8HpoG59xSwpVdFrnh60iRRaRBGw0gcymIxjJENPcA==", "dev": true, "requires": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/test-result": "^29.4.3", + "@jest/types": "^29.4.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.5.1", + "emittery": "^0.13.1", + "jest-util": "^29.4.3", "string-length": "^4.0.1" } }, "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.4.3.tgz", + "integrity": "sha512-GLHN/GTAAMEy5BFdvpUfzr9Dr80zQqBrh0fz1mtRMe05hqP45+HfQltu7oTBfduD0UeZs09d+maFtFYAXFWvAA==", "dev": true, "requires": { "@types/node": "*", + "jest-util": "^29.4.3", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" + }, + "dependencies": { + "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, + "requires": { + "has-flag": "^4.0.0" + } + } } }, + "js-cleanup": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/js-cleanup/-/js-cleanup-1.2.0.tgz", + "integrity": "sha512-JeDD0yiiSt80fXzAVa/crrS0JDPQljyBG/RpOtaSbyDq03VHa9szJWMaWOYU/bcTn412uMN2MxApXq8v79cUiQ==", + "dev": true, + "requires": { + "magic-string": "^0.25.7", + "perf-regexes": "^1.0.1", + "skip-regex": "^1.0.2" + } + }, + "js-sdsl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", + "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", + "dev": true + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -11796,47 +10650,13 @@ "dev": true }, "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { - "argparse": "^2.0.1" - } - }, - "jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "requires": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, "jsesc": { @@ -11849,10 +10669,17 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dev": true, "requires": { "bignumber.js": "^9.0.0" } }, + "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 + }, "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -11872,15 +10699,26 @@ "dev": true }, "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, "jwa": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "dev": true, "requires": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", @@ -11891,22 +10729,27 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "dev": true, "requires": { "jwa": "^2.0.0", "safe-buffer": "^5.0.1" } }, + "keyv": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", + "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, "kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true }, - "kuler": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" - }, "leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -11944,16 +10787,6 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" - }, - "lodash.mapvalues": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", - "integrity": "sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==" - }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -11966,34 +10799,56 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "lodash.snakecase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" + "log-symbols": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", + "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", + "dev": true, + "requires": { + "chalk": "^5.0.0", + "is-unicode-supported": "^1.1.0" + }, + "dependencies": { + "chalk": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "dev": true + } + } }, - "logform": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.4.2.tgz", - "integrity": "sha512-W4c9himeAwXEdZ05dQNerhFz2XG80P9Oj0loPUMV23VC2it0orMHQhJm4hdnnor3rd1HsGf6a2lPwBM1zeXHGw==", + "loud-rejection": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-2.2.0.tgz", + "integrity": "sha512-S0FayMXku80toa5sZ6Ro4C+s+EtFDCsyJNG/AzFMfX3AxD5Si4dZsgzm/kKnbOxHl5Cv8jBlno8+3XYIh2pNjQ==", + "dev": true, "requires": { - "@colors/colors": "1.5.0", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", - "triple-beam": "^1.3.0" + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.2" } }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true }, "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==", + "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, "requires": { - "yallist": "^4.0.0" + "yallist": "^3.0.2" + } + }, + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.8" } }, "make-dir": { @@ -12003,14 +10858,6 @@ "dev": true, "requires": { "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } } }, "make-error": { @@ -12028,33 +10875,12 @@ "tmpl": "1.0.5" } }, - "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==" - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" - }, "micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -12065,30 +10891,18 @@ "picomatch": "^2.3.1" } }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "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==", - "requires": { - "mime-db": "1.52.0" - } - }, "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -12098,15 +10912,30 @@ "brace-expansion": "^1.1.7" } }, - "module-alias": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.2.tgz", - "integrity": "sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q==" - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "multimatch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", + "dev": true, + "requires": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + } + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true }, "natural-compare": { "version": "1.4.0", @@ -12114,44 +10943,20 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - }, "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", + "dev": true, "requires": { "whatwg-url": "^5.0.0" - }, - "dependencies": { - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - } } }, "node-forge": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true }, "node-int64": { "version": "0.4.0", @@ -12160,76 +10965,70 @@ "dev": true }, "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", "dev": true }, - "nodemon": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.19.tgz", - "integrity": "sha512-4pv1f2bMDj0Eeg/MhGqxrtveeQ5/G/UVe9iO6uTZzjnRluSA4PVWf8CW99LUPwGB3eNIA7zUFoP77YuI7hOc0A==", + "normalize-newline": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/normalize-newline/-/normalize-newline-4.1.0.tgz", + "integrity": "sha512-ff4jKqMI8Xl50/4Mms/9jPobzAV/UK+kXG2XJ/7AqOmxIx8mqfqTIHYxuAnEgJ2AQeBbLnlbmZ5+38Y9A0w/YA==", "dev": true, "requires": { - "chokidar": "^3.5.2", - "debug": "^3.2.7", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", - "pstree.remy": "^1.1.8", - "semver": "^5.7.1", - "simple-update-notifier": "^1.0.7", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "replace-buffer": "^1.2.1" + } + }, + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "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==", "dev": true, "requires": { - "ms": "^2.1.1" + "yallist": "^4.0.0" } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "lru-cache": "^6.0.0" } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true } } }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", - "dev": true, - "requires": { - "abbrev": "1" - } - }, "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 }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true + }, "npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -12239,61 +11038,21 @@ "path-key": "^3.0.0" } }, - "nwsapi": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.1.tgz", - "integrity": "sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg==", - "dev": true - }, - "oauth": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.10.0.tgz", - "integrity": "sha512-1orQ9MT1vHFGQxhuy7E/0gECD3fd2fCC+PIX+/jgmU/gI3EpRocXtmtvxCO5x3WZ443FLTLFWNDjl5MPJf9u+Q==" - }, - "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==" - }, - "object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==" - }, "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" - }, - "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==", - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, "requires": { "wrappy": "1" } }, - "one-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", - "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", - "requires": { - "fn.name": "1.x.x" - } - }, "onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", @@ -12303,29 +11062,123 @@ "mimic-fn": "^2.1.0" } }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "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.3" + } + }, + "ora": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/ora/-/ora-6.1.2.tgz", + "integrity": "sha512-EJQ3NiP5Xo94wJXIzAyOtSb0QEIAUu7m8t6UZ9krbz0vAJqr92JpcK/lEXg91q6B9pEGqrykkd2EQplnifDSBw==", + "dev": true, + "requires": { + "bl": "^5.0.0", + "chalk": "^5.0.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.6.1", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^1.1.0", + "log-symbols": "^5.1.0", + "strip-ansi": "^7.0.1", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "chalk": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "dev": true + }, + "cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, + "requires": { + "restore-cursor": "^4.0.0" + } + }, + "restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true + }, + "p-any": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-any/-/p-any-3.0.0.tgz", + "integrity": "sha512-5rqbqfsRWNb0sukt0awwgJMlaep+8jV45S15SKKB34z4UuzjcofIfnriCBhWjZP2jbVtjt9yRl7buB6RlKsu9w==", "dev": true, "requires": { - "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.3" + "p-cancelable": "^2.0.0", + "p-some": "^5.0.0" } }, - "p-defer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-3.0.0.tgz", - "integrity": "sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==" + "p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true }, "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, "requires": { "yocto-queue": "^0.1.0" } @@ -12350,6 +11203,58 @@ } } }, + "p-map": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", + "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", + "dev": true, + "requires": { + "aggregate-error": "^4.0.0" + } + }, + "p-some": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-some/-/p-some-5.0.0.tgz", + "integrity": "sha512-Js5XZxo6vHjB9NOYAzWDYAIyyiPvva0DWESAIWIK7uhSpGsyg5FwUPxipU/SOQx5x9EqhOh545d1jo6cVkitig==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0", + "p-cancelable": "^2.0.0" + }, + "dependencies": { + "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, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "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 + }, + "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 + } + } + }, + "p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } + }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -12377,51 +11282,6 @@ "lines-and-columns": "^1.1.6" } }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "passport": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/passport/-/passport-0.5.3.tgz", - "integrity": "sha512-gGc+70h4gGdBWNsR3FuV3byLDY6KBTJAIExGFXTpQaYfbbcHCBlRRKx7RBQSpqEqc5Hh2qVzRs7ssvSfOpkUEA==", - "requires": { - "passport-strategy": "1.x.x", - "pause": "0.0.1" - } - }, - "passport-google-oauth20": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/passport-google-oauth20/-/passport-google-oauth20-2.0.0.tgz", - "integrity": "sha512-KSk6IJ15RoxuGq7D1UKK/8qKhNfzbLeLrG3gkLZ7p4A6DBCcv7xpyQwuXtWdpyR0+E0mwkpjY1VfPOhxQrKzdQ==", - "requires": { - "passport-oauth2": "1.x.x" - } - }, - "passport-oauth2": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.6.1.tgz", - "integrity": "sha512-ZbV43Hq9d/SBSYQ22GOiglFsjsD1YY/qdiptA+8ej+9C1dL1TVB+mBE5kDH/D4AJo50+2i8f4bx0vg4/yDDZCQ==", - "requires": { - "base64url": "3.x.x", - "oauth": "^0.10.0", - "passport-strategy": "1.x.x", - "uid2": "0.0.x", - "utils-merge": "1.x.x" - } - }, - "passport-strategy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", - "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==" - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -12446,22 +11306,12 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "perf-regexes": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/perf-regexes/-/perf-regexes-1.0.1.tgz", + "integrity": "sha512-L7MXxUDtqr4PUaLFCDCXBfGV/6KLIuSEccizDI7JxT+c9x1G1v04BQ4+4oag84SHaCdrBgQAIs/Cqn+flwFPng==", "dev": true }, - "pause": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", - "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==" - }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -12495,10 +11345,16 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, + "prepend-http": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-3.0.1.tgz", + "integrity": "sha512-BLxfZh+m6UiAiCPZFJ4+vYoL7NrRs5XgCTRrjseATAggXhdZKKxn+JUNmuVYWY23bDHgaEHodxw8mnmtVEDtHw==", + "dev": true + }, "prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", + "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", "dev": true }, "prettier-linter-helpers": { @@ -12511,14 +11367,14 @@ } }, "pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", + "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==", "dev": true, "requires": { - "ansi-regex": "^5.0.1", + "@jest/schemas": "^29.4.3", "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" + "react-is": "^18.0.0" }, "dependencies": { "ansi-styles": { @@ -12539,125 +11395,127 @@ "sisteransi": "^1.0.5" } }, - "proto3-json-serializer": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-0.1.9.tgz", - "integrity": "sha512-A60IisqvnuI45qNRygJjrnNjX2TMdQGMY+57tR3nul3ZgO2zXkR9OGR8AXxJhkqx84g0FTnrfi3D5fWMSdANdQ==", - "requires": { - "protobufjs": "^6.11.2" - } - }, - "protobufjs": { - "version": "6.11.3", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", - "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", - "requires": { - "@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/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^4.0.0" - } - }, - "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==", - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - } - }, - "psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "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 - }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, - "pumpify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz", - "integrity": "sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==", - "requires": { - "duplexify": "^4.1.1", - "inherits": "^2.0.3", - "pump": "^3.0.0" - } - }, "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true }, "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, "requires": { "side-channel": "^1.0.4" } }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, "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 }, - "random-bytes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", - "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==" + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true }, - "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==" + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "read-pkg": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", + "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", + "dev": true, "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^3.0.2", + "parse-json": "^5.2.0", + "type-fest": "^1.0.1" + }, + "dependencies": { + "type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true + } } }, - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true + "read-pkg-up": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", + "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", + "dev": true, + "requires": { + "find-up": "^5.0.0", + "read-pkg": "^6.0.0", + "type-fest": "^1.0.1" + }, + "dependencies": { + "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, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "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, + "requires": { + "p-locate": "^5.0.0" + } + }, + "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, + "requires": { + "p-limit": "^3.0.2" + } + }, + "type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true + } + } }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -12673,16 +11531,38 @@ "picomatch": "^2.2.1" } }, + "recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "dev": true, + "requires": { + "minimatch": "^3.0.5" + } + }, "regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, + "replace-buffer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/replace-buffer/-/replace-buffer-1.2.1.tgz", + "integrity": "sha512-ly3OKwKu+3T55DjP5PjIMzxgz9lFx6dQnBmAIxryZyRKl8f22juy12ShOyuq8WrQE5UlFOseZgQZDua0iF9DHw==", + "dev": true + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true }, "resolve": { "version": "1.22.1", @@ -12695,6 +11575,12 @@ "supports-preserve-symlinks-flag": "^1.0.0" } }, + "resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true + }, "resolve-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", @@ -12702,35 +11588,37 @@ "dev": true, "requires": { "resolve-from": "^5.0.0" - }, - "dependencies": { - "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 - } } }, "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==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true }, "resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.0.tgz", + "integrity": "sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg==", "dev": true }, - "retry-request": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-4.2.2.tgz", - "integrity": "sha512-xA93uxUD/rogV7BV59agW/JHPGXeREMWiZc9jhcwY4YdZ7QOtC7qbomYg0n4wyk2lJhggjvKvhNX8wln/Aldhg==", + "responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "dev": true, "requires": { - "debug": "^4.1.1", - "extend": "^3.0.2" + "lowercase-keys": "^2.0.0" + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" } }, "reusify": { @@ -12748,6 +11636,54 @@ "glob": "^7.1.3" } }, + "rollup": { + "version": "3.17.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.17.2.tgz", + "integrity": "sha512-qMNZdlQPCkWodrAZ3qnJtvCAl4vpQ8q77uEujVCCbC/6CLB7Lcmvjq7HyiOSnf4fxTT9XgsE36oLHJBH49xjqA==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "rollup-plugin-cleanup": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-cleanup/-/rollup-plugin-cleanup-3.2.1.tgz", + "integrity": "sha512-zuv8EhoO3TpnrU8MX8W7YxSbO4gmOR0ny06Lm3nkFfq0IVKdBUtHwhVzY1OAJyNCIAdLiyPnOrU0KnO0Fri1GQ==", + "dev": true, + "requires": { + "js-cleanup": "^1.2.0", + "rollup-pluginutils": "^2.8.2" + } + }, + "rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + } + } + }, + "router-ips": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/router-ips/-/router-ips-1.0.0.tgz", + "integrity": "sha512-yBo6F52Un/WYioXbedBGvrKIiofbwt+4cUhdqDb9fNMJBI4D4jOy7jlxxaRVEvICPKU7xMmJDtDFR6YswX/sFQ==", + "dev": true + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true + }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -12758,103 +11694,37 @@ } }, "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", "dev": true, "requires": { - "tslib": "^1.9.0" + "tslib": "^2.1.0" } }, "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==" - }, - "safe-stable-stringify": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.3.1.tgz", - "integrity": "sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg==" + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "requires": { - "xmlchars": "^2.2.0" - } + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "requires": { - "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" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } - } - }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==", + "dev": true }, "shebang-command": { "version": "2.0.0", @@ -12875,6 +11745,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -12887,137 +11758,128 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "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==", - "requires": { - "is-arrayish": "^0.3.1" - }, - "dependencies": { - "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==" - } - } - }, - "simple-update-notifier": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", - "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", - "dev": true, - "requires": { - "semver": "~7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } - } - }, "sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true }, + "skip-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/skip-regex/-/skip-regex-1.0.2.tgz", + "integrity": "sha512-pEjMUbwJ5Pl/6Vn6FsamXHXItJXSRftcibixDmNCWbWhic0hzHrwkMZo0IZ7fMRH9KxcWDFSkzhccB4285PutA==", + "dev": true + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, + "slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "dependencies": { + "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 + }, + "is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true + } + } + }, "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==" + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true }, "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } } }, - "spawn-command": { - "version": "0.0.2-1", - "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", - "integrity": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==", + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", "dev": true }, - "split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, "requires": { - "through": "2" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, + "spdx-license-ids": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", + "dev": true + }, + "split-lines": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/split-lines/-/split-lines-3.0.0.tgz", + "integrity": "sha512-d0TpRBL/VfKDXsk8JxPF7zgF5pCUDdBMSlEL36xBgVeaX448t+yGXcJaikUyzkoKOJ0l6KpMfygzJU9naIuivw==", + "dev": true + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, - "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==" - }, "stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, "requires": { "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - }, - "stream-events": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", - "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", - "requires": { - "stubs": "^3.0.0" } }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" - }, "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==", + "dev": true, "requires": { "safe-buffer": "~5.2.0" } @@ -13036,6 +11898,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -13046,6 +11909,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -13068,92 +11932,21 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, - "stubs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", - "integrity": "sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==" - }, "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" } }, - "supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "dependencies": { - "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, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, - "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==", - "dev": true - }, - "teeny-request": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-7.2.0.tgz", - "integrity": "sha512-SyY0pek1zWsi0LRVAALem+avzMLc33MKW/JLLakdP4s9+D7+jHcy5x6P+h94g2QNZsAqQNfX5lsbd3WSeJXrrw==", - "requires": { - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "node-fetch": "^2.6.1", - "stream-events": "^1.0.5", - "uuid": "^8.0.0" - }, - "dependencies": { - "@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==" - }, - "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==", - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - } - } - }, - "terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - } - }, "test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -13165,27 +11958,26 @@ "minimatch": "^3.0.4" } }, - "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==" - }, "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 }, - "throat": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", - "dev": true - }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } }, "tmpl": { "version": "1.0.5", @@ -13208,111 +12000,78 @@ "is-number": "^7.0.0" } }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - }, - "touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "requires": { - "nopt": "~1.0.10" - } - }, - "tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", - "dev": true, - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - } - }, "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true }, - "triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" - }, "ts-jest": { - "version": "27.1.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.5.tgz", - "integrity": "sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==", + "version": "29.0.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.0.5.tgz", + "integrity": "sha512-PL3UciSgIpQ7f6XjVOmbi96vmDHUqAyqDr8YxzopDqX3kfgYtX1cuNeBjP+L9sFXi6nzsGGA6R3fP3DDDJyrxA==", "dev": true, "requires": { "bs-logger": "0.x", "fast-json-stable-stringify": "2.x", - "jest-util": "^27.0.0", - "json5": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", "lodash.memoize": "4.x", "make-error": "1.x", "semver": "7.x", - "yargs-parser": "20.x" - } - }, - "ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, - "requires": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "dependencies": { - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "yargs-parser": "^21.0.1" + }, + "dependencies": { + "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==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "ts2gas": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ts2gas/-/ts2gas-4.2.0.tgz", + "integrity": "sha512-5xZugaeM3wKQPj/vrWnrtYjNh4xnIz6cGSW/smCe9OTmkh1+KvHpm7M7HLq/OnBaljf4+yKctC4AYimBi4T1/Q==", "dev": true, "requires": { - "tslib": "^1.8.1" + "type-fest": "^2.1.0", + "typescript": "^4.4.2" + }, + "dependencies": { + "type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true + } } }, + "tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", + "dev": true + }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -13329,69 +12088,27 @@ "dev": true }, "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==", + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true }, - "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": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "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, - "requires": { - "is-typedarray": "^1.0.0" - } - }, "typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "dev": true - }, - "uid-safe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", - "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", - "requires": { - "random-bytes": "~1.0.0" - } - }, - "uid2": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz", - "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA==" - }, - "undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true }, "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" - }, "update-browserslist-db": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", - "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", "dev": true, "requires": { "escalade": "^3.1.1", @@ -13407,70 +12124,61 @@ "punycode": "^2.1.0" } }, + "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==", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "url-template": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", - "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==" + "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==", + "dev": true }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "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==" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true }, "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true }, "v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", + "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", "dev": true, "requires": { + "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" - }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" + "convert-source-map": "^1.6.0" + }, + "dependencies": { + "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 + } } }, - "w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { - "xml-name-validator": "^3.0.0" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "walker": { @@ -13482,36 +12190,29 @@ "makeerror": "1.0.12" } }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, "requires": { - "iconv-lite": "0.4.24" + "defaults": "^1.0.3" } }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "dev": true }, "whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, "which": { @@ -13523,33 +12224,6 @@ "isexe": "^2.0.0" } }, - "winston": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.8.1.tgz", - "integrity": "sha512-r+6YAiCR4uI3N8eQNOg8k3P3PqwAm20cLKlzVD9E66Ch39+LZC+VH1UKf9JemQj2B3QoUHfKD7Poewn0Pr3Y1w==", - "requires": { - "@dabh/diagnostics": "^2.0.2", - "async": "^3.2.3", - "is-stream": "^2.0.0", - "logform": "^2.4.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": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz", - "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==", - "requires": { - "logform": "^2.3.2", - "readable-stream": "^3.6.0", - "triple-beam": "^1.3.0" - } - }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -13560,6 +12234,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -13569,78 +12244,57 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, "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==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, "requires": { "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" + "signal-exit": "^3.0.7" } }, - "ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, - "requires": {} - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true }, "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true }, "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "dev": true, "requires": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.1.1" } }, "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "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 }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } } diff --git a/package.json b/package.json new file mode 100644 index 0000000..7d6a91e --- /dev/null +++ b/package.json @@ -0,0 +1,32 @@ +{ + "name": "event-based-marketing", + "version": "0.0.1", + "description": "", + "main": "src/index.ts", + "scripts": { + "clean": "rm -rf build dist", + "build:compile": "npx tsc", + "build:bundle": "npx rollup -c rollup.config.mjs", + "build": "npm run clean && npm run build:compile && npm run build:bundle", + "test": "npx jest src/ --passWithNoTests", + "deploy": "npm run test && npm run build && cp appsscript.json dist && cp .clasp-dev.json .clasp.json && clasp push", + "deploy-prod": "npm run test && npm run build && cp appsscript.json dist && cp .clasp-prod.json .clasp.json && clasp push" + }, + "devDependencies": { + "@google/clasp": "^2.4.2", + "@rollup/plugin-node-resolve": "^15.0.1", + "@types/google-apps-script": "^1.0.57", + "@types/google-apps-script-oauth2": "^38.0.0", + "@types/jest": "^29.4.0", + "eslint": "^8.34.0", + "eslint-config-google": "^0.14.0", + "eslint-config-prettier": "^8.6.0", + "eslint-plugin-prettier": "^4.2.1", + "jest": "^29.4.3", + "prettier": "^2.8.4", + "rollup": "^3.17.2", + "rollup-plugin-cleanup": "^3.2.1", + "ts-jest": "^29.0.5", + "typescript": "^4.9.5" + } +} diff --git a/rollup.config.mjs b/rollup.config.mjs new file mode 100644 index 0000000..01737df --- /dev/null +++ b/rollup.config.mjs @@ -0,0 +1,32 @@ +import { nodeResolve } from '@rollup/plugin-node-resolve'; +import cleanup from 'rollup-plugin-cleanup'; + +const extensions = ['.js']; + +const preventTreeShakingPlugin = () => { + return { + name: 'no-treeshaking', + resolveId(id, importer) { + if (!importer) { + // no treeshaking entry points, as we're not exporting anything + // in Apps Script files + return { id, moduleSideEffects: 'no-treeshake' }; + } + return null; + }, + }; +}; + +export default { + input: './build/index.js', + output: { + dir: 'dist', + format: 'esm', + }, + plugins: [ + preventTreeShakingPlugin(), + nodeResolve({ extensions }), + cleanup({ comments: 'all' }), + ], + context: 'this', +}; diff --git a/server/.eslintignore b/server/.eslintignore deleted file mode 100644 index 7d22296..0000000 --- a/server/.eslintignore +++ /dev/null @@ -1,6 +0,0 @@ -# build artefacts -dist/* -# 3rd party libs -/src/public/ -# custom definition files -/src/types/ \ No newline at end of file diff --git a/server/.eslintrc.js b/server/.eslintrc.js deleted file mode 100644 index 1fee254..0000000 --- a/server/.eslintrc.js +++ /dev/null @@ -1,42 +0,0 @@ -module.exports = { - env: { - browser: true, - commonjs: true, - es2021: true, - node: true, - }, - extends: [ - 'google', - 'prettier', - 'plugin:@typescript-eslint/eslint-recommended', - ], - parser: '@typescript-eslint/parser', - parserOptions: { - ecmaVersion: 13, - }, - plugins: ['@typescript-eslint', 'prettier'], - rules: { - 'valid-jsdoc': [ - 2, - { - prefer: { - return: 'returns', - }, - requireReturnDescription: false, - requireParamDescription: false, - requireReturn: false, - }, - ], - 'new-cap': 'off', - 'prettier/prettier': [ - 'warn', - { - singleQuote: true, - semi: true, - trailingComma: 'es5', - }, - ], - 'no-unused-vars': 'off', - '@typescript-eslint/no-unused-vars': 'error', - }, -}; diff --git a/server/.example_env b/server/.example_env deleted file mode 100644 index 574293c..0000000 --- a/server/.example_env +++ /dev/null @@ -1,11 +0,0 @@ -PROJECT_ID=project-id -GOOGLE_CLIENT_ID=enter-your-client-id -GOOGLE_CLIENT_SECRET=secret -OAUTH_CALLBACK_URL=set-callback-url -SESSION_SECRET=secret-for-sessions -LOG_LEVEL=DEBUG -NODE_ENV=development -PORT=8080 -AGENTS_TOPIC_ID=agent-results -WEATHER_API_KEY=open-weather-api -DEMO_ENV_NAME=test \ No newline at end of file diff --git a/server/.prettierignore b/server/.prettierignore deleted file mode 100644 index d2e742c..0000000 --- a/server/.prettierignore +++ /dev/null @@ -1,11 +0,0 @@ -node_modules -build -dist/* -../client/dist/* -res -coverage -docs -package.json -package-lock.json -../client/.angular/* - diff --git a/server/.prettierrc b/server/.prettierrc deleted file mode 100644 index 937375d..0000000 --- a/server/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "semi": true, - "singleQuote": true -} diff --git a/server/agents/source-agents/ambee/ambee-agent.test.ts b/server/agents/source-agents/ambee/ambee-agent.test.ts deleted file mode 100644 index d3dedb5..0000000 --- a/server/agents/source-agents/ambee/ambee-agent.test.ts +++ /dev/null @@ -1,175 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import axios from 'axios'; -import MockAdapter from 'axios-mock-adapter'; -import 'jest'; -import { SourceAgentTask } from '../../../common/source'; -import { AmbeeAgent } from './ambee-agent'; - -const mockPollenData = { - data: [ - { - Count: { - grass_pollen: 147, - tree_pollen: 0, - weed_pollen: 361, - }, - Risk: { - grass_pollen: 'High', - tree_pollen: 'Low', - weed_pollen: 'Very High', - }, - updatedAt: '2022-07-25T05:09:30.000Z', - }, - ], -}; -const mockAirQualityData = { - message: 'success', - stations: [ - { - CO: 1.453, - NO2: 25.291, - OZONE: 8.032, - PM10: 52.24, - PM25: 21.943, - SO2: 1.898, - city: 'Bangalore', - countryCode: 'IN', - division: 'Bangalore', - lat: 11.98625, - lng: 77.550478, - placeName: 'Race course road', - postalCode: '560020', - state: 'Karnataka', - updatedAt: '2021-05-29T13:00:00.000Z', - AQI: 72, - aqiInfo: { - pollutant: 'PM2.5', - concentration: 21.943, - category: 'Moderate', - }, - }, - ], -}; - -describe('AmbeeAgent', () => { - let agent: AmbeeAgent; - beforeEach(() => { - agent = new AmbeeAgent(); - }); - describe('#id', () => { - it('exposes the correct ID', () => { - expect(agent.id).toEqual('ambee'); - }); - }); - - describe('#describe', () => { - it('provides a description of the agent', async () => { - const description = await agent.describe(); - expect(description.id).toEqual('ambee'); - expect(description.dataPoints).toContainEqual({ - key: 'pollen-level', - name: 'Pollen Level', - type: 'string', - values: ['Low', 'Moderate', 'High', 'Very High'], - }); - expect(description.dataPoints).toContainEqual({ - key: 'air-quality', - name: 'Air Quality', - type: 'string', - values: [ - 'Good', - 'Moderate', - 'Unhealthy for Sensitive Groups', - 'Unhealthy', - 'Very Unhelathy', - 'Hazardous', - ], - }); - expect(description.parameters).toContainEqual({ - key: 'location', - type: 'location', - name: 'Location', - }); - expect(description.settings).toContainEqual({ - key: 'AMBEE_API_KEY', - name: 'Ambee API Key', - }); - }); - }); - - describe('#executeTask', () => { - let axiosMock: MockAdapter; - beforeEach(() => { - axiosMock = new MockAdapter(axios); - axiosMock - .onGet('https://api.ambeedata.com/latest/pollen/by-place') - .replyOnce(200, mockPollenData); - axiosMock - .onGet('https://api.ambeedata.com/latest/by-city') - .replyOnce(200, mockAirQualityData); - }); - - it('succeeds with a task result', async () => { - const testTask: SourceAgentTask = { - dataPoints: ['pollen-level'], - ownerId: '1234', - ownerSettings: { AMBEE_API_KEY: 'test-key' }, - parameters: { location: 'test' }, - }; - - const result = await agent.executeTask(testTask); - expect(result.status).toEqual('success'); - expect(result.data).toEqual({ 'pollen-level': 'Very High' }); - }); - it('succeeds with multiple data points', async () => { - const testTask: SourceAgentTask = { - dataPoints: ['pollen-level', 'air-quality'], - ownerId: '1234', - ownerSettings: { AMBEE_API_KEY: 'test-key' }, - parameters: { location: 'test' }, - }; - - const result = await agent.executeTask(testTask); - expect(result.status).toEqual('success'); - expect(result.data).toEqual({ - 'pollen-level': 'Very High', - 'air-quality': 'Moderate', - }); - }); - - it('fails if no API key is provided', async () => { - const testTask: SourceAgentTask = { - dataPoints: ['pollen-level'], - ownerId: '1234', - ownerSettings: {}, - parameters: { location: 'test' }, - }; - const result = await agent.executeTask(testTask); - expect(result.status).toEqual('failed'); - expect(result.data).toBeUndefined(); - }); - it('fails for an unknown data point', async () => { - const testTask: SourceAgentTask = { - dataPoints: ['unknown-data-point'], - ownerId: '1234', - ownerSettings: { AMBEE_API_KEY: 'test-key' }, - parameters: { location: 'test' }, - }; - const result = await agent.executeTask(testTask); - expect(result.status).toEqual('failed'); - expect(result.data).toBeUndefined(); - }); - }); -}); diff --git a/server/agents/source-agents/ambee/ambee-agent.ts b/server/agents/source-agents/ambee/ambee-agent.ts deleted file mode 100644 index 9d3cffd..0000000 --- a/server/agents/source-agents/ambee/ambee-agent.ts +++ /dev/null @@ -1,151 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { AgentSettingMetadata } from 'common/common'; -import { SourceAgentDataPointMetadata } from 'common/source'; -import { SimpleSourceAgent } from '../simple-source-agent'; - -interface AmbeePollenData { - data: Array<{ - Risk: { - grass_pollen: string; - tree_pollen: string; - weed_pollen: string; - }; - updatedAt: string; - }>; -} -const POLLEN_LEVELS = ['Low', 'Moderate', 'High', 'Very High']; - -/** - * Returns the highest pollen level from a list of levels. - * @param {string[]} levels the levels to compare - * @returns {string} the highest pollen level - */ -function getHighestPollenLevel(...levels: string[]): string { - const indices = levels - .map((level) => POLLEN_LEVELS.indexOf(level)) - .filter((index) => index >= 0); - const highest = Math.max(0, ...indices); - return POLLEN_LEVELS[highest]; -} - -interface AmbeeAirQualityData { - message: string; - stations: Array<{ - AQI: number; - aqiInfo: { - pollutant: string; - concentration: number; - category: string; - }; - }>; -} - -const AMBEE_API_KEY_SETTNG: AgentSettingMetadata = { - key: 'AMBEE_API_KEY', - name: 'Ambee API Key', -}; -const POLLEN_LEVEL_DATAPOINT: SourceAgentDataPointMetadata = { - key: 'pollen-level', - name: 'Pollen Level', - type: 'enum', - values: POLLEN_LEVELS, -}; -const AIR_QUALITY_DATAPOINT: SourceAgentDataPointMetadata = { - key: 'air-quality', - name: 'Air Quality', - type: 'enum', - values: [ - 'Good', - 'Moderate', - 'Unhealthy for Sensitive Groups', - 'Unhealthy', - 'Very Unhelathy', - 'Hazardous', - ], -}; - -/** - * An agent for the Ambee API. - */ -export class AmbeeAgent extends SimpleSourceAgent { - /** - * Constructor. - */ - constructor() { - super({ - id: 'ambee', - name: 'Air Quality & Pollen', - type: 'source', - settings: [AMBEE_API_KEY_SETTNG], - parameters: [{ key: 'location', type: 'location', name: 'Location' }], - dataPoints: [POLLEN_LEVEL_DATAPOINT, AIR_QUALITY_DATAPOINT], - }); - } - - /** - * @inheritdoc - */ - protected async fetch( - dataPoint: string, - sourceParameters: Record, - ownerSettings: Record - ): Promise> { - const apiKey = ownerSettings[AMBEE_API_KEY_SETTNG.key]; - if (!apiKey) { - throw new Error('Missing API key for Ambee API.'); - } - - const baseURL = 'https://api.ambeedata.com/latest'; - const headers = { 'x-api-key': apiKey }; - - const location = sourceParameters['location']; - if (dataPoint === POLLEN_LEVEL_DATAPOINT.key) { - const response = await this.executeHttpRequest( - `${baseURL}/pollen/by-place`, - { params: { place: location }, headers } - ); - - if (response.data?.data && response.data?.data.length > 0) { - const risk = response.data.data[0].Risk; - const highest = getHighestPollenLevel( - risk.grass_pollen, - risk.tree_pollen, - risk.weed_pollen - ); - return { [POLLEN_LEVEL_DATAPOINT.key]: highest }; - } else { - throw new Error( - `Unexpected response format for Ambee data point: ${dataPoint}` - ); - } - } else if (dataPoint === AIR_QUALITY_DATAPOINT.key) { - const response = await this.executeHttpRequest(`${baseURL}/by-city`, { - params: { city: location }, - headers, - }); - - if (response.data?.stations && response.data?.stations.length) { - const station = (response.data as AmbeeAirQualityData).stations[0]; - return { [AIR_QUALITY_DATAPOINT.key]: station.aqiInfo.category }; - } else { - throw new Error( - `Unexpected response format for Ambee data point: ${dataPoint}` - ); - } - } else { - throw new Error(`Unsupported Ambee data point: ${dataPoint}`); - } - } -} diff --git a/server/agents/source-agents/open-weather/open-weather-agent.test.ts b/server/agents/source-agents/open-weather/open-weather-agent.test.ts deleted file mode 100644 index a60f6b8..0000000 --- a/server/agents/source-agents/open-weather/open-weather-agent.test.ts +++ /dev/null @@ -1,201 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import axios from 'axios'; -import MockAdapter from 'axios-mock-adapter'; -import { SourceAgentTask } from '../../../common/source'; -import { OpenWeatherAgent } from './open-weather-agent'; - -const MOCK_OPEN_WEATHER_DATA = { - coord: { - lon: -0.13, - lat: 51.51, - }, - weather: [ - { - id: 300, - main: 'Drizzle', - description: 'light intensity drizzle', - icon: '09d', - }, - ], - base: 'stations', - main: { - temp: 280.32, - pressure: 1012, - humidity: 81, - temp_min: 279.15, - temp_max: 281.15, - }, - visibility: 10000, - wind: { - speed: 4.1, - deg: 80, - }, - clouds: { - all: 90, - }, - dt: 1485789600, - sys: { - type: 1, - id: 5091, - message: 0.0103, - country: 'GB', - sunrise: 1485762037, - sunset: 1485794875, - }, - id: 2643743, - name: 'London', - cod: 200, -}; - -describe('OpenWeatherAgent', () => { - let agent: OpenWeatherAgent; - beforeEach(() => { - agent = new OpenWeatherAgent(); - }); - - describe('#id', () => { - it('exposes the correct ID', () => { - expect(agent.id).toEqual('open-weather'); - }); - }); - - describe('#describe', () => { - it('provides a description of the agent', async () => { - const description = await agent.describe(); - expect(description.id).toEqual('open-weather'); - expect(description.dataPoints).toContainEqual({ - key: 'temperature', - name: 'Temperature', - type: 'number', - }); - expect(description.dataPoints).toContainEqual({ - key: 'windspeed', - name: 'Wind Speed', - type: 'number', - }); - expect(description.dataPoints).toContainEqual({ - key: 'thunderstorm', - name: 'Thunderstorm', - type: 'boolean', - }); - expect(description.dataPoints).toContainEqual({ - key: 'snow', - name: 'Snow', - type: 'boolean', - }); - expect(description.dataPoints).toContainEqual({ - key: 'rain', - name: 'Rain', - type: 'boolean', - }); - expect(description.dataPoints).toContainEqual({ - key: 'clouds', - name: 'Clouds', - type: 'boolean', - }); - expect(description.dataPoints).toContainEqual({ - key: 'clearSky', - name: 'Clear sky', - type: 'boolean', - }); - expect(description.parameters).toContainEqual({ - key: 'location', - type: 'location', - name: 'Location', - }); - expect(description.settings).toContainEqual({ - key: 'OPENWEATHER_API_KEY', - name: 'Open Weather Map API Key', - }); - }); - }); - - describe('#executeTask', () => { - let axiosMock: MockAdapter; - beforeEach(() => { - axiosMock = new MockAdapter(axios); - axiosMock - .onGet('https://api.openweathermap.org/data/2.5/weather/') - .replyOnce(200, MOCK_OPEN_WEATHER_DATA); - }); - - it('succeeds with a task result', async () => { - const testTask: SourceAgentTask = { - dataPoints: ['temperature'], - ownerId: '1234', - ownerSettings: { OPENWEATHER_API_KEY: 'test-key' }, - parameters: { location: 'test' }, - }; - - const result = await agent.executeTask(testTask); - expect(result.status).toEqual('success'); - expect(result.data).toEqual( - expect.objectContaining({ temperature: 280.32 }) - ); - }); - - it('succeeds with multiple data points', async () => { - const testTask: SourceAgentTask = { - dataPoints: ['temperature', 'windspeed'], - ownerId: '1234', - ownerSettings: { OPENWEATHER_API_KEY: 'test-key' }, - parameters: { location: 'test' }, - }; - - const result = await agent.executeTask(testTask); - expect(result.status).toEqual('success'); - expect(result.data).toEqual( - expect.objectContaining({ - temperature: 280.32, - windspeed: 4.1, - }) - ); - }); - - it('only calls the API once for multiple data points', async () => { - const testTask: SourceAgentTask = { - dataPoints: ['temperature', 'windspeed'], - ownerId: '1234', - ownerSettings: { OPENWEATHER_API_KEY: 'test-key' }, - parameters: { location: 'test' }, - }; - await agent.executeTask(testTask); - expect(axiosMock.history.get.length).toBe(1); - }); - - it('fails if no API key is provided', async () => { - const testTask: SourceAgentTask = { - dataPoints: ['temperature'], - ownerId: '1234', - ownerSettings: {}, - parameters: { location: 'test' }, - }; - const result = await agent.executeTask(testTask); - expect(result.status).toEqual('failed'); - expect(result.data).toBeUndefined(); - }); - it('fails for an unknown data point', async () => { - const testTask: SourceAgentTask = { - dataPoints: ['unknown-data-point'], - ownerId: '1234', - ownerSettings: { OPENWEATHER_API_KEY: 'test-key' }, - parameters: { location: 'test' }, - }; - const result = await agent.executeTask(testTask); - expect(result.status).toEqual('failed'); - expect(result.data).toBeUndefined(); - }); - }); -}); diff --git a/server/agents/source-agents/open-weather/open-weather-agent.ts b/server/agents/source-agents/open-weather/open-weather-agent.ts deleted file mode 100644 index cac5827..0000000 --- a/server/agents/source-agents/open-weather/open-weather-agent.ts +++ /dev/null @@ -1,135 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { AgentSettingMetadata } from '../../../common/common'; -import { SourceAgentDataPointMetadata } from '../../../common/source'; -import { SimpleSourceAgent } from '../simple-source-agent'; - -const WEAHTER_CODES = { - THUNDERSTORM: new Set([200, 201, 202, 210, 211, 212, 221, 230, 231, 232]), - DRIZZLE: new Set([300, 301, 302, 310, 311, 312, 313, 314, 321]), - RAIN: new Set([500, 501, 502, 503, 504, 511, 520, 521, 522, 531]), - SNOW: new Set([600, 601, 602, 611, 612, 613, 615, 616, 620, 621, 622]), - CLOUDS: new Set([802, 803, 804]), - CLEAR: new Set([800, 801]), -}; - -const OPENWEATHER_API_KEY_SETTING: AgentSettingMetadata = { - key: 'OPENWEATHER_API_KEY', - name: 'Open Weather Map API Key', -}; - -const TEMPERATURE_DATAPOINT: SourceAgentDataPointMetadata = { - key: 'temperature', - name: 'Temperature', - type: 'number', -}; -const WINDSPEED_DATAPOINT: SourceAgentDataPointMetadata = { - key: 'windspeed', - name: 'Wind Speed', - type: 'number', -}; -const THUNDERSTORM_DATAPOINT: SourceAgentDataPointMetadata = { - key: 'thunderstorm', - name: 'Thunderstorm', - type: 'boolean', -}; -const SNOW_DATAPOINT: SourceAgentDataPointMetadata = { - key: 'snow', - name: 'Snow', - type: 'boolean', -}; -const RAIN_DATAPOINT: SourceAgentDataPointMetadata = { - key: 'rain', - name: 'Rain', - type: 'boolean', -}; -const CLOUDS_DATAPOINT: SourceAgentDataPointMetadata = { - key: 'clouds', - name: 'Clouds', - type: 'boolean', -}; -const CLEAR_SKY_DATAPOINT: SourceAgentDataPointMetadata = { - key: 'clearSky', - name: 'Clear sky', - type: 'boolean', -}; - -/** - * An agent for the OpenWeather API. - */ -export class OpenWeatherAgent extends SimpleSourceAgent { - /** - * Constructor. - */ - constructor() { - super({ - id: 'open-weather', - name: 'Open Weather Map', - type: 'source', - settings: [OPENWEATHER_API_KEY_SETTING], - parameters: [{ key: 'location', type: 'location', name: 'Location' }], - dataPoints: [ - TEMPERATURE_DATAPOINT, - WINDSPEED_DATAPOINT, - THUNDERSTORM_DATAPOINT, - SNOW_DATAPOINT, - RAIN_DATAPOINT, - CLOUDS_DATAPOINT, - CLEAR_SKY_DATAPOINT, - ], - }); - } - - /** - * @inheritdoc - */ - protected async fetch( - dataPoint: string, - sourceParameters: Record, - ownerSettings: Record - ) { - const apiKey = ownerSettings[OPENWEATHER_API_KEY_SETTING.key]; - if (!apiKey) { - throw new Error('Missing API key for Open Weather API.'); - } - - // TODO: Add return type and interface - const response = await this.executeHttpRequest( - 'https://api.openweathermap.org/data/2.5/weather/', - { - q: sourceParameters['location'], - units: 'metric', - appid: apiKey, - } - ); - const data = response.data; - const code = data.weather[0]?.id; - - try { - return { - [TEMPERATURE_DATAPOINT.key]: data.main.temp, - [WINDSPEED_DATAPOINT.key]: data.wind.speed, - [THUNDERSTORM_DATAPOINT.key]: WEAHTER_CODES.THUNDERSTORM.has(code), - [SNOW_DATAPOINT.key]: WEAHTER_CODES.SNOW.has(code), - [RAIN_DATAPOINT.key]: - WEAHTER_CODES.RAIN.has(code) || WEAHTER_CODES.DRIZZLE.has(code), - [CLOUDS_DATAPOINT.key]: WEAHTER_CODES.CLOUDS.has(code), - [CLEAR_SKY_DATAPOINT.key]: WEAHTER_CODES.CLEAR.has(code), - }; - } catch (e) { - this.logger.error(e); - throw new Error(`Unexpected response format for Open Weather`); - } - } -} diff --git a/server/agents/source-agents/simple-source-agent.ts b/server/agents/source-agents/simple-source-agent.ts deleted file mode 100644 index ab8ea4c..0000000 --- a/server/agents/source-agents/simple-source-agent.ts +++ /dev/null @@ -1,162 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import axios, { AxiosResponse } from 'axios'; -import { - SourceAgent, - SourceAgentData, - SourceAgentMetadata, - SourceAgentTask, - SourceAgentTaskResult, -} from 'common/source'; -import { createHash } from 'crypto'; -import { logger } from '../../util/logger'; - -/** - * A very simple base implementation of a source agent. - * - * Extending classes must call the super constructor and implement the fetch - * method. - */ -export abstract class SimpleSourceAgent implements SourceAgent { - /** - * @inheritdoc - */ - readonly id: string; - protected cache: Record>; - - /** - * A logger object this source agent can use to log information about the - * query process. - */ - protected logger = logger; - - /** This agent's support data point names. */ - private supportedDataPoints: Set; - - /** - * Implementing classes must implement this function to respond to a single - * data point query. - * - * If an external API responds with a composite answer of multiple data points - * no matter which data point is being queried, the fetch method may - * pre-emptively return additional data point values to reduce the number of - * API requests. - * - * @param {string} dataPoint the data point being queried - * @param {Record} parameters the parameters for this data - * point query - * @param {Record} ownerSettings the task owner's settings - * object - */ - protected abstract fetch( - dataPoint: string, - parameters: Record, - ownerSettings: Record - ): Promise; - - /** - * Constructor - * @param {SourceAgentMetadata} description the source agent description - * for this agent - */ - constructor(private readonly description: SourceAgentMetadata) { - this.id = description.id; - this.supportedDataPoints = new Set( - description.dataPoints.map((dataPoint) => dataPoint.key) - ); - this.cache = {}; - } - - /** - * Execute HTTP request. - * - * @param {string} url - * @param {Object} params - * @param {AxiosRequestHeaders} headers - * @returns {Promise>} - */ - async executeHttpRequest(url: string, params = {}, headers = {}) { - // Calculate cache key - const cacheKey = createHash('md5') - .update(`${url}.${JSON.stringify(params)}`) - .digest('hex'); - - // Check if request is cached - if (cacheKey in this.cache) { - this.logger.info(`Returning cached result!`); - return this.cache[cacheKey]; - } - - // Execute request - const res = await axios.get(url, { - headers, - params, - }); - - // Store response in cache - this.cache[cacheKey] = res; - - return res; - } - - /** - * @inheritdoc - */ - async executeTask(task: SourceAgentTask): Promise { - const responseData: SourceAgentData = {}; - - const dataPoints = task.dataPoints; - for (const dataPoint of dataPoints) { - if (!this.supportedDataPoints.has(dataPoint)) { - return { - status: 'failed', - error: `Data point ${dataPoint} is not available in agent ${this.id}`, - }; - } - - if (dataPoint in responseData) { - // already fetched this piece of data - continue; - } - try { - const dataPoints = await this.fetch( - dataPoint, - task.parameters, - task.ownerSettings - ); - Object.entries(dataPoints).forEach( - ([dataPoint, value]) => (responseData[dataPoint] = value) - ); - } catch (err) { - this.logger.error(err); - - return { - status: 'failed', - error: - err instanceof Error - ? err.message - : `Fetching data point ${dataPoint} failed.`, - }; - } - } - return { status: 'success', data: responseData }; - } - - /** - * @inheritdoc - */ - describe() { - return Promise.resolve(this.description); - } -} diff --git a/server/agents/target-agents/dv360-ads/dv360-agent.test.ts b/server/agents/target-agents/dv360-ads/dv360-agent.test.ts deleted file mode 100644 index d50d82f..0000000 --- a/server/agents/target-agents/dv360-ads/dv360-agent.test.ts +++ /dev/null @@ -1,460 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import 'jest'; -import { TargetAgentTask } from '../../../common/target'; -import { User } from '../../../common/user'; -import { Dv360Agent } from './dv360-agent'; -import { Dv360ApiClient } from './dv360-api-client'; - -const MOCK_OWNER: User = { - id: '1', - email: 'test@test.tst', - profileId: '123', - settings: {}, - credentials: { - accessToken: 'test', - expiry: new Date(), - refreshToken: 'test', - }, -}; - -const MOCK_ACTIVATE_CAMPAIGN_TASK: TargetAgentTask = { - action: 'ACTIVATE', - agentId: 'dv360', - owner: MOCK_OWNER, - ownerSettings: {}, - parameters: { advertiserId: '1', campaignId: '1', entityType: 'campaign' }, -}; -const MOCK_ACTIVATE_IO_TASK: TargetAgentTask = { - action: 'ACTIVATE', - agentId: 'dv360', - owner: MOCK_OWNER, - ownerSettings: {}, - parameters: { - advertiserId: '1', - insertionOrderId: '2', - entityType: 'insertionOrder', - }, -}; -const MOCK_DEACTIVATE_LI_TASK: TargetAgentTask = { - action: 'DEACTIVATE', - agentId: 'dv360', - owner: MOCK_OWNER, - ownerSettings: {}, - parameters: { - advertiserId: '1', - lineItemId: '3', - entityType: 'lineItem', - }, -}; - -describe('Dv360Agent', () => { - let agent: Dv360Agent; - beforeEach(() => { - jest.resetAllMocks(); - agent = new Dv360Agent(); - }); - - describe('#id', () => { - it('exposes the correct ID', () => { - expect(agent.id).toBe('dv360'); - }); - }); - - describe('#describe', () => { - it('provides a description of the agent', async () => { - const description = await agent.describe(); - expect(description.id).toBe('dv360'); - expect(description.name).toBe('Display & Video 360'); - expect(description.targetEntities).toContainEqual({ - name: 'Line Item', - key: 'lineItem', - parameters: ['advertiserId', 'lineItemId'], - }); - expect(description.targetEntities).toContainEqual({ - name: 'Insertion Order', - key: 'insertionOrder', - parameters: ['advertiserId', 'insertionOrderId'], - }); - expect(description.targetEntities).toContainEqual({ - name: 'Campaign', - key: 'campaign', - parameters: ['advertiserId', 'campaignId'], - }); - expect(description.settings).toBeUndefined(); - }); - }); - - describe('#executeTasks', () => { - it('executes a simple task', async () => { - const modifyCampaignStatusSpy = jest - .spyOn(Dv360ApiClient.prototype, 'modifyCampaignStatus') - .mockImplementation(() => Promise.resolve()); - - const results = await agent.executeTasks([MOCK_ACTIVATE_CAMPAIGN_TASK]); - expect(results[0].status).toBe('success'); - expect(modifyCampaignStatusSpy).toHaveBeenCalled(); - }); - - it('executes a list of tasks', async () => { - const modifyCampaignStatusSpy = jest - .spyOn(Dv360ApiClient.prototype, 'modifyCampaignStatus') - .mockImplementation(() => Promise.resolve()); - const modifyInsertionOrderStatusSpy = jest - .spyOn(Dv360ApiClient.prototype, 'modifyInsertionOrderStatus') - .mockImplementation(() => Promise.resolve()); - const modifyLineItemStatusSpy = jest - .spyOn(Dv360ApiClient.prototype, 'modifyLineItemStatus') - .mockImplementation(() => Promise.resolve()); - - const tasks: TargetAgentTask[] = [ - MOCK_ACTIVATE_CAMPAIGN_TASK, - MOCK_ACTIVATE_IO_TASK, - MOCK_DEACTIVATE_LI_TASK, - ]; - - const results = await agent.executeTasks(tasks); - expect(results[0].status).toBe('success'); - expect(results[1].status).toBe('success'); - expect(results[2].status).toBe('success'); - expect(modifyCampaignStatusSpy).toHaveBeenCalledWith( - '1', - '1', - 'ENTITY_STATUS_ACTIVE' - ); - expect(modifyInsertionOrderStatusSpy).toHaveBeenCalledWith( - '1', - '2', - 'ENTITY_STATUS_ACTIVE' - ); - expect(modifyLineItemStatusSpy).toHaveBeenCalledWith( - '1', - '3', - 'ENTITY_STATUS_PAUSED' - ); - }); - - it('fails individual tasks if the client throws an error', async () => { - jest - .spyOn(Dv360ApiClient.prototype, 'modifyCampaignStatus') - .mockImplementationOnce(() => Promise.reject(new Error('err'))) - .mockImplementationOnce(() => Promise.resolve()); - - const tasks: TargetAgentTask[] = [ - MOCK_ACTIVATE_CAMPAIGN_TASK, - MOCK_ACTIVATE_CAMPAIGN_TASK, - ]; - - const results = await agent.executeTasks(tasks); - - expect(results[0].status).toBe('failed'); - expect(results[1].status).toBe('success'); - }); - - it('fails individual tasks for unsupported entity types', async () => { - jest - .spyOn(Dv360ApiClient.prototype, 'modifyCampaignStatus') - .mockImplementationOnce(() => Promise.resolve()); - - const tasks: TargetAgentTask[] = [ - MOCK_ACTIVATE_CAMPAIGN_TASK, - { - action: 'ACTIVATE', - agentId: 'dv360', - owner: MOCK_OWNER, - ownerSettings: {}, - parameters: { type: 'unknown' }, - }, - ]; - - const results = await agent.executeTasks(tasks); - - expect(results[0].status).toBe('success'); - expect(results[1].status).toBe('failed'); - }); - }); - - describe('#listEntities', () => { - it('lists partners', async () => { - jest - .spyOn(Dv360ApiClient.prototype, 'listPartners') - .mockImplementationOnce(() => - Promise.resolve([ - { - type: 'partner', - name: 'partner1', - parameters: { partnerId: '1' }, - }, - ]) - ); - - const result = await agent.listTargetEntities('partner', {}, MOCK_OWNER); - - expect(result.status).toBe('success'); - expect(result.entities).toEqual([ - { - type: 'partner', - name: 'partner1', - parameters: { partnerId: '1' }, - }, - ]); - }); - it('fails to list partners in case of API errors', async () => { - jest - .spyOn(Dv360ApiClient.prototype, 'listPartners') - .mockImplementationOnce(() => Promise.reject(new Error('err'))); - - const result = await agent.listTargetEntities('partner', {}, MOCK_OWNER); - - expect(result.status).toBe('failed'); - }); - - it('lists advertisers for partner', async () => { - const mockAdvertisers = [ - { - type: 'advertiser', - name: 'advertiser1', - parameters: { partnerId: '1', advertiserId: '1' }, - }, - ]; - jest - .spyOn(Dv360ApiClient.prototype, 'listAdvertisers') - .mockImplementationOnce(() => Promise.resolve(mockAdvertisers)); - - const result = await agent.listTargetEntities( - 'advertiser', - { partnerId: '1' }, - MOCK_OWNER - ); - - expect(result.status).toBe('success'); - expect(result.entities).toEqual(mockAdvertisers); - }); - it('fails to list advertisers in case of API errors', async () => { - jest - .spyOn(Dv360ApiClient.prototype, 'listAdvertisers') - .mockImplementationOnce(() => Promise.reject(new Error('err'))); - - const result = await agent.listTargetEntities( - 'advertiser', - { partnerId: '1' }, - MOCK_OWNER - ); - - expect(result.status).toBe('failed'); - }); - it('fails to list advertisers if no partner ID is provided', async () => { - const result = await agent.listTargetEntities( - 'advertiser', - {}, - MOCK_OWNER - ); - - expect(result.status).toBe('failed'); - }); - - it('lists campaigns for advertiser', async () => { - const mockCampaigns = [ - { - type: 'campaign', - name: 'campaign1', - parameters: { advertiserId: '1', campaignId: '1' }, - }, - ]; - jest - .spyOn(Dv360ApiClient.prototype, 'listCampaigns') - .mockImplementationOnce(() => Promise.resolve(mockCampaigns)); - - const result = await agent.listTargetEntities( - 'campaign', - { advertiserId: '1' }, - MOCK_OWNER - ); - - expect(result.status).toBe('success'); - expect(result.entities).toEqual(mockCampaigns); - }); - it('fails to list campaigns in case of API errors', async () => { - jest - .spyOn(Dv360ApiClient.prototype, 'listCampaigns') - .mockImplementationOnce(() => Promise.reject(new Error('err'))); - - const result = await agent.listTargetEntities( - 'campaign', - { advertiserId: 1 }, - MOCK_OWNER - ); - - expect(result.status).toBe('failed'); - }); - it('fails to list advertisers if no partner ID is provided', async () => { - const result = await agent.listTargetEntities('campaign', {}, MOCK_OWNER); - - expect(result.status).toBe('failed'); - }); - - it('lists insertion orders for advertiser', async () => { - const mockIos = [ - { - type: 'insertionOrder', - name: 'io1', - parameters: { advertiserId: '1', insertionOrderId: '1' }, - }, - ]; - jest - .spyOn(Dv360ApiClient.prototype, 'listInsertionOrders') - .mockImplementationOnce(() => Promise.resolve(mockIos)); - - const result = await agent.listTargetEntities( - 'insertionOrder', - { advertiserId: '1' }, - MOCK_OWNER - ); - - expect(result.status).toBe('success'); - expect(result.entities).toEqual(mockIos); - }); - it('lists insertion orders for advertiser and campaign', async () => { - const mockIos = [ - { - type: 'insertionOrder', - name: 'io1', - parameters: { advertiserId: '1', insertionOrderId: '1' }, - }, - ]; - jest - .spyOn(Dv360ApiClient.prototype, 'listInsertionOrders') - .mockImplementationOnce(() => Promise.resolve(mockIos)); - - const result = await agent.listTargetEntities( - 'insertionOrder', - { advertiserId: '1', campaignId: '1' }, - MOCK_OWNER - ); - - expect(result.status).toBe('success'); - expect(result.entities).toEqual(mockIos); - }); - it('fails to list insertion orders in case of API errors', async () => { - jest - .spyOn(Dv360ApiClient.prototype, 'listInsertionOrders') - .mockImplementationOnce(() => Promise.reject(new Error('err'))); - - const result = await agent.listTargetEntities( - 'insertionOrder', - { advertiserId: '1' }, - MOCK_OWNER - ); - - expect(result.status).toBe('failed'); - }); - it('fails to list insertion orders if no advertiser ID is provided', async () => { - const result = await agent.listTargetEntities( - 'insertionOrder', - {}, - MOCK_OWNER - ); - - expect(result.status).toBe('failed'); - }); - - it('lists line items for advertiser', async () => { - const mockLineItems = [ - { - type: 'lineItem', - name: 'li1', - parameters: { advertiserId: '1', lineItemId: '1' }, - }, - ]; - jest - .spyOn(Dv360ApiClient.prototype, 'listLineItems') - .mockImplementationOnce(() => Promise.resolve(mockLineItems)); - - const result = await agent.listTargetEntities( - 'lineItem', - { advertiserId: '1' }, - MOCK_OWNER - ); - - expect(result.status).toBe('success'); - expect(result.entities).toEqual(mockLineItems); - }); - it('lists line items for advertiser and campaign', async () => { - const mockLineItems = [ - { - type: 'lineItem', - name: 'li1', - parameters: { advertiserId: '1', lineItemId: '1' }, - }, - ]; - jest - .spyOn(Dv360ApiClient.prototype, 'listLineItems') - .mockImplementationOnce(() => Promise.resolve(mockLineItems)); - - const result = await agent.listTargetEntities( - 'lineItem', - { advertiserId: '1', campaignId: '1' }, - MOCK_OWNER - ); - - expect(result.status).toBe('success'); - expect(result.entities).toEqual(mockLineItems); - }); - it('lists line items for advertiser and insertion order', async () => { - const mockLineItems = [ - { - type: 'lineItem', - name: 'li1', - parameters: { advertiserId: '1', lineItemId: '1' }, - }, - ]; - jest - .spyOn(Dv360ApiClient.prototype, 'listLineItems') - .mockImplementationOnce(() => Promise.resolve(mockLineItems)); - - const result = await agent.listTargetEntities( - 'lineItem', - { advertiserId: '1', insertionOrder: '1' }, - MOCK_OWNER - ); - - expect(result.status).toBe('success'); - expect(result.entities).toEqual(mockLineItems); - }); - it('fails to list line items in case of API errors', async () => { - jest - .spyOn(Dv360ApiClient.prototype, 'listLineItems') - .mockImplementationOnce(() => Promise.reject(new Error('err'))); - - const result = await agent.listTargetEntities( - 'lineItem', - { advertiserId: '1' }, - MOCK_OWNER - ); - - expect(result.status).toBe('failed'); - }); - it('fails to list insertion orders if no advertiser ID is provided', async () => { - const result = await agent.listTargetEntities('lineItem', {}, MOCK_OWNER); - - expect(result.status).toBe('failed'); - }); - - it('fails for unsupported line items', async () => { - const result = await agent.listTargetEntities('unknown', {}, MOCK_OWNER); - - expect(result.status).toBe('failed'); - }); - }); -}); diff --git a/server/agents/target-agents/dv360-ads/dv360-agent.ts b/server/agents/target-agents/dv360-ads/dv360-agent.ts deleted file mode 100644 index 2deb87c..0000000 --- a/server/agents/target-agents/dv360-ads/dv360-agent.ts +++ /dev/null @@ -1,298 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { OperationResult } from '../../../common/common'; -import { - TargetAgent, - TargetAgentMetadata, - TargetAgentTask, - TargetEntityResponse, -} from '../../../common/target'; -import { User } from '../../../common/user'; -import { googleAuthService } from '../../../services/google-auth-service'; -import { Dv360ApiClient } from './dv360-api-client'; - -const DV360_AGENT_ID = 'dv360'; - -/** - * Target agent implementation for Display & Video 360. - */ -export class Dv360Agent implements TargetAgent { - readonly id = DV360_AGENT_ID; - - /** - * Returns an API client authorized for the user. - * @param {User} user - * @returns {Dv360ApiClient} the API client with the user's authorization - */ - private getDv360ApiClient(user: User) { - const auth = googleAuthService.getAuthorizedClientForUser(user); - return new Dv360ApiClient(auth); - } - - /** - * Executes a single target agent task. - * @param {TargetAgentTask} task the task - * @returns {Promise}the result of the action - */ - private async executeTask(task: TargetAgentTask): Promise { - const client = this.getDv360ApiClient(task.owner); - - const entityType = task.parameters['entityType']; - const advertiserId = task.parameters['advertiserId'] as string; - const targetStatus = - task.action === 'ACTIVATE' - ? 'ENTITY_STATUS_ACTIVE' - : 'ENTITY_STATUS_PAUSED'; - - try { - switch (entityType) { - case 'lineItem': - await client.modifyLineItemStatus( - advertiserId, - task.parameters['lineItemId'] as string, - targetStatus - ); - return { status: 'success' }; - case 'insertionOrder': - await client.modifyInsertionOrderStatus( - advertiserId, - task.parameters['insertionOrderId'] as string, - targetStatus - ); - return { status: 'success' }; - case 'campaign': - await client.modifyCampaignStatus( - advertiserId, - task.parameters['campaignId'] as string, - targetStatus - ); - return { status: 'success' }; - default: - return { - status: 'failed', - error: `Unsupported target entity type: ${entityType}`, - }; - } - } catch (err) { - return { - status: 'failed', - error: err instanceof Error ? err.message : JSON.stringify(err), - }; - } - } - - /** - * @inheritdoc - */ - async executeTasks(tasks: TargetAgentTask[]): Promise { - const results: OperationResult[] = []; - for (const task of tasks) { - const result = await this.executeTask(task); - results.push(result); - } - return results; - } - - /** - * @inheritdoc - */ - describe() { - const description: TargetAgentMetadata = { - id: 'dv360', - name: 'Display & Video 360', - type: 'target', - targetEntities: [ - { - name: 'Line Item', - key: 'lineItem', - parameters: ['advertiserId', 'lineItemId'], - }, - { - name: 'Insertion Order', - key: 'insertionOrder', - parameters: ['advertiserId', 'insertionOrderId'], - }, - { - name: 'Campaign', - key: 'campaign', - parameters: ['advertiserId', 'campaignId'], - }, - ], - }; - return Promise.resolve(description); - } - - /** - * Fetches a list of DV360 partners. - * @param {Dv360ApiClient} client the DV360 API client - * @returns {Promise} the agent response - */ - private async listPartners( - client: Dv360ApiClient - ): Promise { - try { - const entities = await client.listPartners(); - return { status: 'success', entities }; - } catch (err) { - return { - status: 'failed', - error: err instanceof Error ? err.message : JSON.stringify(err), - }; - } - } - - /** - * Fetches a list of advertisers. - * @param {Dv360ApiClient} client the DV360 API client - * @param {Record} parameters the parameters for the API call - * @returns {Promise} the agent response - */ - private async listAdvertisers( - client: Dv360ApiClient, - parameters: Record - ): Promise { - if (!parameters['partnerId']) { - return { - status: 'failed', - error: 'Missing required parameter: partnerId.', - }; - } - try { - const entities = await client.listAdvertisers( - parameters['partnerId'] as string - ); - return { status: 'success', entities }; - } catch (err) { - return { - status: 'failed', - error: err instanceof Error ? err.message : JSON.stringify(err), - }; - } - } - /** - * Fetches a list of campaigns. - * @param {Dv360ApiClient} client the DV360 API client - * @param {Record} parameters the parameters for the API call - * @returns {Promise} the agent response - */ - private async listCampaigns( - client: Dv360ApiClient, - parameters: Record - ): Promise { - if (!parameters['advertiserId']) { - return { - status: 'failed', - error: 'Missing required parameter: advertiserId.', - }; - } - try { - const entities = await client.listCampaigns( - parameters['advertiserId'] as string - ); - return { status: 'success', entities }; - } catch (err) { - return { - status: 'failed', - error: err instanceof Error ? err.message : JSON.stringify(err), - }; - } - } - /** - * Fetches a list of insertion orders. - * @param {Dv360ApiClient} client the DV360 API client - * @param {Record} parameters the parameters for the API call - * @returns {Promise} the agent response - */ - private async listInsertionOrders( - client: Dv360ApiClient, - parameters: Record - ): Promise { - if (!parameters['advertiserId']) { - return { - status: 'failed', - error: 'Missing required parameter: advertiserId.', - }; - } - try { - const entities = await client.listInsertionOrders( - parameters['advertiserId'] as string, - parameters['campaignId'] as string | undefined - ); - return { status: 'success', entities }; - } catch (err) { - return { - status: 'failed', - error: err instanceof Error ? err.message : JSON.stringify(err), - }; - } - } - /** - * Fetches a list of insertion orders. - * @param {Dv360ApiClient} client the DV360 API client - * @param {Record} parameters the parameters for the API call - * @returns {Promise} the agent response - */ - private async listLineItems( - client: Dv360ApiClient, - parameters: Record - ): Promise { - if (!parameters['advertiserId']) { - return { - status: 'failed', - error: 'Missing required parameter: advertiserId.', - }; - } - try { - const entities = await client.listLineItems( - parameters['advertiserId'] as string, - parameters['campaignId'] as string | undefined, - parameters['insertionOrderId'] as string | undefined - ); - return { status: 'success', entities }; - } catch (err) { - return { - status: 'failed', - error: err instanceof Error ? err.message : JSON.stringify(err), - }; - } - } - - /** - * @inheritdoc - */ - async listTargetEntities( - type: string, - parameters: Record, - requestor: User - ): Promise { - const client = this.getDv360ApiClient(requestor); - switch (type) { - case 'partner': - return this.listPartners(client); - case 'advertiser': - return this.listAdvertisers(client, parameters); - case 'campaign': - return this.listCampaigns(client, parameters); - case 'insertionOrder': - return this.listInsertionOrders(client, parameters); - case 'lineItem': - return this.listLineItems(client, parameters); - default: - return Promise.resolve({ - status: 'failed', - error: `Unsupported target entity type: ${type}`, - }); - } - } -} diff --git a/server/agents/target-agents/dv360-ads/dv360-api-client.test.ts b/server/agents/target-agents/dv360-ads/dv360-api-client.test.ts deleted file mode 100644 index 3f6e99a..0000000 --- a/server/agents/target-agents/dv360-ads/dv360-api-client.test.ts +++ /dev/null @@ -1,425 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { OAuth2Client } from 'google-auth-library'; -import 'jest'; -import { TargetEntity } from '../../../common/target'; -import { Dv360ApiClient } from './dv360-api-client'; -jest.mock('google-auth-library'); - -const responseSuccess = (data?: object) => () => - Promise.resolve({ status: 200, statusText: 'ok', data }); -const responseFailed = (code: number) => () => - Promise.resolve({ status: code, statusText: 'error' }); - -describe('Dv360ApiClient', () => { - const oauthMock = jest.mocked(new OAuth2Client(), true); - let client: Dv360ApiClient; - beforeEach(() => { - jest.resetAllMocks(); - client = new Dv360ApiClient(oauthMock); - }); - - describe('#listPartners', () => { - it('lists partner entities across multiple API pages', async () => { - const mockPartnerPage1 = { - partners: [ - { partnerId: '1', displayName: 'partner1' }, - { partnerId: '2', displayName: 'partner2' }, - ], - nextPageToken: 'test', - }; - const mockPartnerPage2 = { - partners: [{ partnerId: '3', displayName: 'partner3' }], - }; - oauthMock.request - .mockImplementationOnce(responseSuccess(mockPartnerPage1)) - .mockImplementationOnce(responseSuccess(mockPartnerPage2)); - - const expectedEntities: TargetEntity[] = [ - { - type: 'partner', - name: 'partner1', - parameters: { partnerId: '1' }, - }, - { - type: 'partner', - parameters: { partnerId: '2' }, - name: 'partner2', - }, - { - type: 'partner', - parameters: { partnerId: '3' }, - name: 'partner3', - }, - ]; - - const partners = await client.listPartners(); - expect(partners).toContainEqual( - expect.objectContaining(expectedEntities[0]) - ); - expect(partners).toContainEqual( - expect.objectContaining(expectedEntities[1]) - ); - expect(partners).toContainEqual( - expect.objectContaining(expectedEntities[2]) - ); - }); - - it('fails if the API request fails', async () => { - oauthMock.request.mockImplementationOnce(responseFailed(401)); - expect(client.listPartners()).rejects.toBeDefined(); - }); - }); - - describe('#listAdvertisers', () => { - it('lists all advertisers under a partner', async () => { - const mockAdvertisers1 = { - advertisers: [ - { partnerId: '1', advertiserId: '1', displayName: 'adv1' }, - ], - nextPageToken: 'abc', - }; - const mockAdvertisers2 = { - advertisers: [ - { partnerId: '1', advertiserId: '2', displayName: 'adv2' }, - ], - }; - oauthMock.request - .mockImplementationOnce(responseSuccess(mockAdvertisers1)) - .mockImplementationOnce(responseSuccess(mockAdvertisers2)); - const expectedEntities = [ - { - type: 'advertiser', - parameters: { partnerId: '1', advertiserId: '1' }, - name: 'adv1', - }, - { - type: 'advertiser', - parameters: { partnerId: '1', advertiserId: '2' }, - name: 'adv2', - }, - ]; - - const advertisers = await client.listAdvertisers('1'); - - expect(advertisers).toContainEqual( - expect.objectContaining(expectedEntities[0]) - ); - expect(advertisers).toContainEqual( - expect.objectContaining(expectedEntities[1]) - ); - }); - - it('fails if the API request fails', async () => { - oauthMock.request.mockImplementationOnce(responseFailed(401)); - expect(client.listAdvertisers('123')).rejects.toBeDefined(); - }); - }); - - describe('#listCampaigns', () => { - it('lists all campaigns under an advertiser', async () => { - const mockResponses = [ - { - campaigns: [ - { advertiserId: '1', campaignId: '1', displayName: 'cmp1' }, - ], - nextPageToken: 'abc', - }, - { - campaigns: [ - { advertiserId: '1', campaignId: '2', displayName: 'cmp2' }, - ], - }, - ]; - oauthMock.request - .mockImplementationOnce(responseSuccess(mockResponses[0])) - .mockImplementationOnce(responseSuccess(mockResponses[1])); - const expectedEntities = [ - { - type: 'campaign', - parameters: { campaignId: '1', advertiserId: '1' }, - name: 'cmp1', - }, - { - type: 'campaign', - parameters: { campaignId: '2', advertiserId: '1' }, - name: 'cmp2', - }, - ]; - - const campaigns = await client.listCampaigns('1'); - - expect(campaigns).toContainEqual( - expect.objectContaining(expectedEntities[0]) - ); - expect(campaigns).toContainEqual( - expect.objectContaining(expectedEntities[1]) - ); - }); - - it('fails if the API request fails', async () => { - oauthMock.request.mockImplementationOnce(responseFailed(401)); - expect(client.listCampaigns('123')).rejects.toBeDefined(); - }); - }); - - describe('#listInsertionOrders', () => { - it('lists all campaigns under an advertiser', async () => { - const mockResponses = [ - { - insertionOrders: [ - { advertiserId: '1', insertionOrderId: '1', displayName: 'io1' }, - ], - nextPageToken: 'abc', - }, - { - insertionOrders: [ - { advertiserId: '1', insertionOrderId: '2', displayName: 'io2' }, - ], - }, - ]; - oauthMock.request - .mockImplementationOnce(responseSuccess(mockResponses[0])) - .mockImplementationOnce(responseSuccess(mockResponses[1])); - const expectedEntities = [ - { - type: 'insertionOrder', - parameters: { advertiserId: '1', insertionOrderId: '1' }, - name: 'io1', - }, - { - type: 'insertionOrder', - parameters: { advertiserId: '1', insertionOrderId: '2' }, - name: 'io2', - }, - ]; - - const insertionOrders = await client.listInsertionOrders('1'); - - expect(insertionOrders).toContainEqual( - expect.objectContaining(expectedEntities[0]) - ); - expect(insertionOrders).toContainEqual( - expect.objectContaining(expectedEntities[1]) - ); - }); - - it('applies the optional campaign id filter', async () => { - oauthMock.request.mockImplementationOnce( - responseSuccess({ - insertionOrders: [ - { advertiserId: '1', insertionOrderId: '1', displayName: 'io1' }, - ], - }) - ); - - await client.listInsertionOrders('1', '2'); - expect(oauthMock.request).toHaveBeenCalledWith( - expect.objectContaining({ - params: expect.objectContaining({ - filter: expect.stringMatching('campaignId=2'), - }), - }) - ); - }); - - it('fails if the API request fails', async () => { - oauthMock.request.mockImplementationOnce(responseFailed(401)); - expect(client.listInsertionOrders('123')).rejects.toBeDefined(); - }); - }); - - describe('#listLineItems', () => { - it('lists all line items under an advertiser', async () => { - const mockResponses = [ - { - lineItems: [ - { advertiserId: '1', lineItemId: '1', displayName: 'li1' }, - ], - nextPageToken: 'abc', - }, - { - lineItems: [ - { advertiserId: '1', lineItemId: '2', displayName: 'li2' }, - ], - }, - ]; - oauthMock.request - .mockImplementationOnce(responseSuccess(mockResponses[0])) - .mockImplementationOnce(responseSuccess(mockResponses[1])); - const expectedEntities = [ - { - type: 'lineItem', - parameters: { advertiserId: '1', lineItemId: '1' }, - name: 'li1', - }, - { - type: 'lineItem', - parameters: { advertiserId: '1', lineItemId: '2' }, - name: 'li2', - }, - ]; - - const lineItems = await client.listLineItems('1'); - - expect(lineItems).toContainEqual( - expect.objectContaining(expectedEntities[0]) - ); - expect(lineItems).toContainEqual( - expect.objectContaining(expectedEntities[1]) - ); - }); - - it('applies the optional campaign id filter', async () => { - oauthMock.request.mockImplementationOnce( - responseSuccess({ - lineItems: [ - { advertiserId: '1', lineItemId: '1', displayName: 'li1' }, - ], - }) - ); - - await client.listLineItems('1', '2'); - expect(oauthMock.request).toHaveBeenCalledWith( - expect.objectContaining({ - params: expect.objectContaining({ - filter: expect.stringMatching('campaignId=2'), - }), - }) - ); - }); - - it('applies the optional insertion order ID filter', async () => { - oauthMock.request.mockImplementationOnce( - responseSuccess({ - lineItems: [ - { advertiserId: '1', lineItemId: '1', displayName: 'li1' }, - ], - }) - ); - - await client.listLineItems('1', '2', '3'); - expect(oauthMock.request).toHaveBeenCalledWith( - expect.objectContaining({ - params: expect.objectContaining({ - filter: expect.stringMatching('insertionOrderId=3'), - }), - }) - ); - }); - - it('fails if the API request fails', async () => { - oauthMock.request.mockImplementationOnce(responseFailed(401)); - expect(client.listCampaigns('123')).rejects.toBeDefined(); - }); - }); - - describe('modifyCampaignStatus', () => { - it('sets the target campaign status to active', async () => { - oauthMock.request.mockImplementationOnce(responseSuccess()); - - await client.modifyCampaignStatus('1', '1', 'ENTITY_STATUS_ACTIVE'); - - expect(oauthMock.request).toHaveBeenCalledWith({ - method: 'PATCH', - url: 'https://displayvideo.googleapis.com/v1/advertisers/1/campaigns/1', - params: { updateMask: 'entityStatus' }, - body: { entityStatus: 'ENTITY_STATUS_ACTIVE' }, - }); - }); - it('sets the target campaign status to paused', async () => { - oauthMock.request.mockImplementationOnce(responseSuccess()); - - await client.modifyCampaignStatus('1', '1', 'ENTITY_STATUS_PAUSED'); - - expect(oauthMock.request).toHaveBeenCalledWith({ - method: 'PATCH', - url: 'https://displayvideo.googleapis.com/v1/advertisers/1/campaigns/1', - params: { updateMask: 'entityStatus' }, - body: { entityStatus: 'ENTITY_STATUS_PAUSED' }, - }); - }); - it('failes if the API call fails', () => { - oauthMock.request.mockImplementationOnce(responseFailed(400)); - expect( - client.modifyCampaignStatus('1', '1', 'ENTITY_STATUS_ACTIVE') - ).rejects.toBeDefined(); - }); - }); - - describe('modifyInsertionOrderStatus', () => { - it('sets the target campaign status to active', async () => { - oauthMock.request.mockImplementationOnce(responseSuccess()); - - await client.modifyInsertionOrderStatus('1', '1', 'ENTITY_STATUS_ACTIVE'); - - expect(oauthMock.request).toHaveBeenCalledWith({ - method: 'PATCH', - url: 'https://displayvideo.googleapis.com/v1/advertisers/1/insertionOrders/1', - params: { updateMask: 'entityStatus' }, - body: { entityStatus: 'ENTITY_STATUS_ACTIVE' }, - }); - }); - it('sets the target campaign status to paused', async () => { - oauthMock.request.mockImplementationOnce(responseSuccess()); - - await client.modifyInsertionOrderStatus('1', '1', 'ENTITY_STATUS_PAUSED'); - - expect(oauthMock.request).toHaveBeenCalledWith({ - method: 'PATCH', - url: 'https://displayvideo.googleapis.com/v1/advertisers/1/insertionOrders/1', - params: { updateMask: 'entityStatus' }, - body: { entityStatus: 'ENTITY_STATUS_PAUSED' }, - }); - }); - it('failes if the API call fails', () => { - oauthMock.request.mockImplementationOnce(responseFailed(400)); - expect( - client.modifyInsertionOrderStatus('1', '1', 'ENTITY_STATUS_ACTIVE') - ).rejects.toBeDefined(); - }); - }); - describe('modifyLineItemStatus', () => { - it('sets the target campaign status to active', async () => { - oauthMock.request.mockImplementationOnce(responseSuccess()); - - await client.modifyLineItemStatus('1', '1', 'ENTITY_STATUS_ACTIVE'); - - expect(oauthMock.request).toHaveBeenCalledWith({ - method: 'PATCH', - url: 'https://displayvideo.googleapis.com/v1/advertisers/1/lineItems/1', - params: { updateMask: 'entityStatus' }, - body: { entityStatus: 'ENTITY_STATUS_ACTIVE' }, - }); - }); - it('sets the target campaign status to paused', async () => { - oauthMock.request.mockImplementationOnce(responseSuccess()); - - await client.modifyLineItemStatus('1', '1', 'ENTITY_STATUS_PAUSED'); - - expect(oauthMock.request).toHaveBeenCalledWith({ - method: 'PATCH', - url: 'https://displayvideo.googleapis.com/v1/advertisers/1/lineItems/1', - params: { updateMask: 'entityStatus' }, - body: { entityStatus: 'ENTITY_STATUS_PAUSED' }, - }); - }); - it('failes if the API call fails', () => { - oauthMock.request.mockImplementationOnce(responseFailed(400)); - expect( - client.modifyLineItemStatus('1', '1', 'ENTITY_STATUS_ACTIVE') - ).rejects.toBeDefined(); - }); - }); -}); diff --git a/server/agents/target-agents/dv360-ads/dv360-api-client.ts b/server/agents/target-agents/dv360-ads/dv360-api-client.ts deleted file mode 100644 index 87dedc2..0000000 --- a/server/agents/target-agents/dv360-ads/dv360-api-client.ts +++ /dev/null @@ -1,357 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { OAuth2Client } from 'google-auth-library'; -import { TargetEntity } from '../../../common/target'; - -interface ResourceItem { - displayName: string; -} -interface ResourcePage { - nextPageToken?: string; -} -interface Dv360Partner extends ResourceItem { - partnerId: string; -} -interface Dv360PartnerPage extends ResourcePage { - partners: Dv360Partner[]; -} -interface Dv360Advertiser extends ResourceItem { - partnerId: string; - advertiserId: string; -} -interface Dv360AdvertiserPage extends ResourcePage { - advertisers: Dv360Advertiser[]; -} -interface Dv360Campaign extends ResourceItem { - advertiserId: string; - campaignId: string; -} -interface Dv360CampaignPage extends ResourcePage { - campaigns: Dv360Campaign[]; -} -interface Dv360InsertionOrder extends ResourceItem { - campaignId: string; - insertionOrderId: string; -} -interface Dv360InsertionOrderPage extends ResourcePage { - insertionOrders: Dv360InsertionOrder[]; -} -interface Dv360LineItem extends ResourceItem { - insertionOrderId: string; - lineItemId: string; -} -interface Dv360LineItemPage extends ResourcePage { - lineItems: Dv360LineItem[]; -} - -type TargetEntityStatus = 'ENTITY_STATUS_ACTIVE' | 'ENTITY_STATUS_PAUSED'; - -const DV360_API_URL = 'https://displayvideo.googleapis.com/v1'; -const DV360_PARTNER_FIELDS = 'partners(partnerId,displayName),nextPageToken'; -const DV360_ADVERTISER_FIELDS = - 'advertisers(partnerId,advertiserId,displayName),nextPageToken'; -const DV360_CAMPAIGN_FIELDS = - 'campaigns(advertiserId,campaignId,displayName),nextPageToken'; -const DV360_INSERTION_ORDER_FIELDS = - 'insertionOrders(advertiserId,insertionOrderId,displayName),nextPageToken'; -const DV360_LINE_ITEM_FIELDS = - 'lineItems(advertiserId,lineItemId,displayName),nextPageToken'; -const DV360_ACTIVE_FILTER = 'entityStatus="ENTITY_STATUS_ACTIVE"'; -const DV360_ACTIVE_OR_PAUSED_FILTER = `(${DV360_ACTIVE_FILTER} OR entityStatus="ENTITY_STATUS_PAUSED")`; - -/** - * DV360 API interface for the DV360 agent and directory. - */ -export class Dv360ApiClient { - /** - * Constructor. - * @param {OAuth2Client} oauthClient an OAuth client for authorized API - * requests. - */ - constructor(private readonly oauthClient: OAuth2Client) {} - - /** - * Fetches a page of resource items from the API. - * @param {string} url the resource URL - * @param {Record} params additional params to customize the - * API response - * @param {string|undefined} pageToken an optional page token to specify a - * page to fetch - * @returns {Promise} a resource page containing the next page token and - * the resources - */ - private async fetchItemsPage( - url: string, - params: Record, - pageToken?: string - ): Promise { - const requestParams = { ...params, pageToken }; - const response = await this.oauthClient.request({ - url, - params: requestParams, - }); - if (response.status !== 200 || response.data === undefined) { - throw new Error(`DV360 API client error: ${response.statusText}`); - } - return response.data as T; - } - - /** - * Fetches all resource items within a specified resource URL. - * @param {string} url the resource URL - * @param {Record} params addition URL parameters to - * customize the API response - * @param {function(page:U): T} resourceSelector a function which retrieves - * the resource items from the page - * @returns {Promise} a list of resource items - */ - private async fetchItems( - url: string, - params: Record, - resourceSelector: (page: U) => T[] - ): Promise { - let pageToken: string | undefined; - let resources: T[] = []; - do { - const page = await this.fetchItemsPage(url, params, pageToken); - const items = resourceSelector(page); - if (items && items.length) { - resources = resources.concat(items); - } - pageToken = page.nextPageToken; - } while (pageToken); - return resources; - } - - /** - * Fetches all partners for the authorized user. - * @returns {Promise} a list of partner entities - */ - async listPartners(): Promise { - const url = `${DV360_API_URL}/partners`; - - const items = await this.fetchItems( - url, - { - filter: DV360_ACTIVE_FILTER, - fields: DV360_PARTNER_FIELDS, - }, - (page) => page.partners - ); - const entities: TargetEntity[] = items.map((item) => ({ - type: 'partner', - parameters: { partnerId: item.partnerId }, - name: item.displayName, - })); - return entities; - } - - /** - * Fetches all advertisers for the current user (optionally within the - * specified partner ID). - * @param {string} partnerId an optional partner ID filter - * @returns {Promise} a list of advertiser entities - */ - async listAdvertisers(partnerId: string): Promise { - const url = `${DV360_API_URL}/advertisers`; - const items = await this.fetchItems( - url, - { - partnerId, - filter: DV360_ACTIVE_FILTER, - fields: DV360_ADVERTISER_FIELDS, - }, - (page) => page.advertisers - ); - const entities: TargetEntity[] = items.map((item) => ({ - type: 'advertiser', - parameters: { partnerId, advertiserId: item.advertiserId }, - name: item.displayName, - })); - return entities; - } - - /** - * Lists all campaigns under an advertiser. - * @param {string} advertiserId the advertiser ID for which to list campaigns - * @returns {Promise} a list of campaign entities - */ - async listCampaigns(advertiserId: string): Promise { - const url = `${DV360_API_URL}/advertisers/${advertiserId}/campaigns`; - const items = await this.fetchItems( - url, - { - filter: DV360_ACTIVE_OR_PAUSED_FILTER, - fields: DV360_CAMPAIGN_FIELDS, - }, - (page) => page.campaigns - ); - const entities: TargetEntity[] = items.map((item) => ({ - type: 'campaign', - parameters: { advertiserId, campaignId: item.campaignId }, - name: item.displayName, - })); - return entities; - } - - /** - * Lists all line items for the current user and advertiser (optionally also - * within the specified campaign). - * @param {string} advertiserId the advertiser ID - * @param {string} [campaignId] an optional campaign filter - * @returns {Promise} a list of insertion order entities - */ - async listInsertionOrders( - advertiserId: string, - campaignId?: string - ): Promise { - const url = `${DV360_API_URL}/advertisers/${advertiserId}/insertionOrders`; - - let filter = DV360_ACTIVE_OR_PAUSED_FILTER; - if (campaignId) { - filter = `campaignId=${campaignId} AND ${filter}`; - } - - const items = await this.fetchItems< - Dv360InsertionOrder, - Dv360InsertionOrderPage - >( - url, - { - fields: DV360_INSERTION_ORDER_FIELDS, - filter, - }, - (page) => page.insertionOrders - ); - const entities: TargetEntity[] = items.map((item) => ({ - type: 'insertionOrder', - parameters: { advertiserId, insertionOrderId: item.insertionOrderId }, - name: item.displayName, - })); - return entities; - } - - /** - * Lists all line items for the current user and advertiser (optionally also - * within the specified campaign or insertion order). - * @param {string} advertiserId the advertiser ID - * @param {string} [campaignId] an optional campaign filter - * @param {string} [insertionOrderId] an optional insertion order filter - * @returns {Promise} a list of insertion order entities - */ - async listLineItems( - advertiserId: string, - campaignId?: string, - insertionOrderId?: string - ): Promise { - const url = `${DV360_API_URL}/advertisers/${advertiserId}/lineItems`; - - let filter = DV360_ACTIVE_OR_PAUSED_FILTER; - if (insertionOrderId) { - filter = `insertionOrderId=${insertionOrderId} AND ${filter}`; - } else if (campaignId) { - filter = `campaignId=${campaignId} AND ${filter}`; - } - - const items = await this.fetchItems( - url, - { - fields: DV360_LINE_ITEM_FIELDS, - filter, - }, - (page) => page.lineItems - ); - const entities: TargetEntity[] = items.map((item) => ({ - type: 'lineItem', - parameters: { advertiserId, lineItemId: item.lineItemId }, - name: item.displayName, - })); - return entities; - } - - /** - * Modifies a resource item's status - * @param {string} url the URL for the resource item to modify - * @param {TargetEntityStatus} status the target status - * @returns {Promise} completes after the operation - */ - private async modifyItemStatus( - url: string, - status: TargetEntityStatus - ): Promise { - const response = await this.oauthClient.request({ - method: 'PATCH', - url, - params: { updateMask: 'entityStatus' }, - body: { entityStatus: status }, - }); - if (response.status !== 200) { - throw new Error(`${response.status}: ${response.statusText}`); - } - } - - /** - * Modifies a line item's status - * @param {string} advertiserId the advertiser ID for the line item - * @param {string} lineItemId the ID of the line item to modify - * @param {TargetEntityStatus} status the target status - * @returns {Promise} completes after the operation - */ - modifyLineItemStatus( - advertiserId: string, - lineItemId: string, - status: TargetEntityStatus - ): Promise { - return this.modifyItemStatus( - `${DV360_API_URL}/advertisers/${advertiserId}/lineItems/${lineItemId}`, - status - ); - } - - /** - * Modifies a insertion order's status - * @param {string} advertiserId the advertiser ID for the line item - * @param {string} insertionOrderId the ID of the insertion order to modify - * @param {TargetEntityStatus} status the target status - * @returns {Promise} completes after the operation - */ - modifyInsertionOrderStatus( - advertiserId: string, - insertionOrderId: string, - status: TargetEntityStatus - ): Promise { - return this.modifyItemStatus( - `${DV360_API_URL}/advertisers/${advertiserId}/insertionOrders/${insertionOrderId}`, - status - ); - } - - /** - * Modifies a campaign's status - * @param {string} advertiserId the advertiser ID for the line item - * @param {string}campaignId the ID of the campaign to modify - * @param {TargetEntityStatus} status the target status - * @returns {Promise} completes after the operation - */ - modifyCampaignStatus( - advertiserId: string, - campaignId: string, - status: TargetEntityStatus - ): Promise { - return this.modifyItemStatus( - `${DV360_API_URL}/advertisers/${advertiserId}/campaigns/${campaignId}`, - status - ); - } -} diff --git a/server/agents/target-agents/google-ads/google-ads-agent.test.ts b/server/agents/target-agents/google-ads/google-ads-agent.test.ts deleted file mode 100644 index eb58759..0000000 --- a/server/agents/target-agents/google-ads/google-ads-agent.test.ts +++ /dev/null @@ -1,238 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { OAuth2Client } from 'google-auth-library'; -import 'jest'; -import { TargetAgentTask } from '../../../common/target'; -import { User } from '../../../common/user'; -import { GoogleAdsAgent } from './google-ads-agent'; - -jest.mock('google-auth-library'); - -const MOCK_OWNER: User = { - id: '1', - email: 'test@test.tst', - profileId: '123', - settings: {}, - credentials: { - accessToken: 'test', - expiry: new Date(), - refreshToken: 'test', - }, -}; -const MOCK_ACTIVATE_ADGROUP_TASK: TargetAgentTask = { - action: 'ACTIVATE', - agentId: 'google-ads', - owner: MOCK_OWNER, - ownerSettings: { - GOOGLE_ADS_DEVELOPER_TOKEN: 'test', - GOOGLE_ADS_MANAGER_ACCOUNT_ID: 'test', - }, - parameters: { - entityType: 'adGroup', - customerAccountId: '1', - adGroupId: '1', - }, -}; -const MOCK_DEACTIVATE_ADGROUP_TASK: TargetAgentTask = { - action: 'DEACTIVATE', - agentId: 'google-ads', - owner: MOCK_OWNER, - ownerSettings: { - GOOGLE_ADS_DEVELOPER_TOKEN: 'test', - GOOGLE_ADS_MANAGER_ACCOUNT_ID: 'test', - }, - parameters: { - entityType: 'adGroup', - customerAccountId: '1', - adGroupId: '1', - }, -}; - -describe('GoogleAdsAgent', () => { - let agent: GoogleAdsAgent; - beforeEach(() => { - jest.resetAllMocks(); - agent = new GoogleAdsAgent(); - }); - - describe('#id', () => { - it('exposes the correct ID', () => { - expect(agent.id).toBe('google-ads'); - }); - }); - - describe('#describe', () => { - it('provides a description of the agent', async () => { - const description = await agent.describe(); - expect(description.id).toBe('google-ads'); - expect(description.name).toBe('Google Ads'); - expect(description.targetEntities).toContainEqual({ - name: 'Ad Group', - key: 'adGroup', - parameters: ['customerAccountId', 'adGroupId'], - }); - expect(description.settings).toContainEqual({ - key: 'GOOGLEADS_MANAGER_ACCOUNT_ID', - name: 'Google Ads Manager Account ID', - }); - expect(description.settings).toContainEqual({ - key: 'GOOGLEADS_DEV_TOKEN', - name: 'Google Ads Developer Token', - }); - }); - }); - - describe('#executeTasks', () => { - it('executes a simple task', async () => { - const modifyAdGroupStatusSpy = jest - .spyOn(OAuth2Client.prototype, 'request') - .mockImplementation(() => - Promise.resolve({ - status: 200, - }) - ); - - const results = await agent.executeTasks([MOCK_ACTIVATE_ADGROUP_TASK]); - expect(results[0].status).toBe('success'); - expect(modifyAdGroupStatusSpy).toHaveBeenCalled(); - }); - - it('executes a multiple tasks', async () => { - const modifyAdGroupStatusSpy = jest - .spyOn(OAuth2Client.prototype, 'request') - .mockImplementation(() => Promise.resolve({ status: 200 })); - - const results = await agent.executeTasks([ - MOCK_ACTIVATE_ADGROUP_TASK, - MOCK_DEACTIVATE_ADGROUP_TASK, - ]); - expect(results[0].status).toBe('success'); - expect(results[1].status).toBe('success'); - expect(modifyAdGroupStatusSpy).toHaveBeenCalledTimes(2); - }); - - it('fails individual tasks if the client responds with an error', async () => { - jest - .spyOn(OAuth2Client.prototype, 'request') - .mockImplementationOnce(() => Promise.resolve({ status: 400 })) - .mockImplementationOnce(() => Promise.resolve({ status: 200 })); - - const tasks: TargetAgentTask[] = [ - MOCK_ACTIVATE_ADGROUP_TASK, - MOCK_DEACTIVATE_ADGROUP_TASK, - ]; - - const results = await agent.executeTasks(tasks); - - expect(results[0].status).toBe('failed'); - expect(results[1].status).toBe('success'); - }); - - it('fails individual tasks for unsupported entity types', async () => { - jest - .spyOn(OAuth2Client.prototype, 'request') - .mockImplementationOnce(() => Promise.resolve({ status: 200 })); - - const tasks: TargetAgentTask[] = [ - MOCK_ACTIVATE_ADGROUP_TASK, - { - action: 'ACTIVATE', - agentId: 'google-ads', - owner: MOCK_OWNER, - ownerSettings: { - GOOGLE_ADS_DEVELOPER_TOKEN: 'test', - GOOGLE_ADS_MANAGER_ACCOUNT_ID: 'test', - }, - parameters: { type: 'unknown' }, - }, - ]; - - const results = await agent.executeTasks(tasks); - - expect(results[0].status).toBe('success'); - expect(results[1].status).toBe('failed'); - }); - }); - - describe('#listTargetEntities', () => { - it('lists adgroups', async () => { - const mockResponse = { - status: 200, - data: { - results: [ - { - customerAccountId: '1', - campaign: { id: '1', name: 'campaign1' }, - adGroup: { - id: '1', - name: 'adGroup1', - type: 'type', - status: 'PAUSED', - }, - }, - ], - }, - }; - jest - .spyOn(OAuth2Client.prototype, 'request') - .mockImplementation(() => Promise.resolve(mockResponse)); - - const result = await agent.listTargetEntities( - 'adGroup', - { customerAccountId: '1' }, - MOCK_OWNER, - { - GOOGLE_ADS_DEVELOPER_TOKEN: 'test', - GOOGLE_ADS_MANAGER_ACCOUNT_ID: 'test', - } - ); - - expect(result.status).toBe('success'); - expect(result.entities).toContainEqual({ - type: 'adGroup', - name: 'adGroup1', - parameters: { - customerAccountId: '1', - adGroupId: '1', - }, - }); - }); - - it('fails for unsupported line items', async () => { - const result = await agent.listTargetEntities( - 'unknown', - {}, - MOCK_OWNER, - {} - ); - expect(result.status).toBe('failed'); - }); - it('fails for api error responses', async () => { - jest - .spyOn(OAuth2Client.prototype, 'request') - .mockImplementation(() => Promise.resolve({ status: 400 })); - - const result = await agent.listTargetEntities( - 'adGroup', - { customerAccountId: '1' }, - MOCK_OWNER, - { - GOOGLE_ADS_DEVELOPER_TOKEN: 'test', - GOOGLE_ADS_MANAGER_ACCOUNT_ID: 'test', - } - ); - expect(result.status).toBe('failed'); - }); - }); -}); diff --git a/server/agents/target-agents/google-ads/google-ads-agent.ts b/server/agents/target-agents/google-ads/google-ads-agent.ts deleted file mode 100644 index 41e816f..0000000 --- a/server/agents/target-agents/google-ads/google-ads-agent.ts +++ /dev/null @@ -1,243 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { GaxiosError, GaxiosOptions } from 'gaxios'; -import { OAuth2Client } from 'google-auth-library'; -import { OperationResult } from '../../../common/common'; -import { - TargetAgent, - TargetAgentAction, - TargetAgentMetadata, - TargetAgentTask, - TargetEntity, - TargetEntityResponse, -} from '../../../common/target'; -import { User } from '../../../common/user'; -import { googleAuthService } from '../../../services/google-auth-service'; - -interface GoogleAdsAdgroupInfo { - customerAccountId: string; - campaign: { id: string; name: string }; - adGroup: { id: string; name: string; type: string; status: string }; -} -interface GoogleAdsQueryResult { - results: T[]; -} - -const GOOGLEADS_API_URL = 'https://googleads.googleapis.com/v10'; -const GOOGLEADS_AGENT_ID = 'google-ads'; - -/** - * Target agent implementation for Google Ads. - */ -export class GoogleAdsAgent implements TargetAgent { - readonly id = GOOGLEADS_AGENT_ID; - - /** - * Performs an action on the specified ad group. - * @param {OAuth2Client} client the authorized API client - * @param {TargetAgentAction} action the action to perform - * @param {string} customerAccountId the customer account ID - * @param {string} adGroupId the ad group ID - * @param {string} developerToken the Google Ads developer token - * @param {string} managerAccountId the MCC ID - * @returns {Promise} the result of the action - */ - public async performAdGroupAction( - client: OAuth2Client, - action: TargetAgentAction, - customerAccountId: string, - adGroupId: string, - developerToken: string, - managerAccountId: string - ): Promise { - const resourceUrl = `/customers/${customerAccountId}/adGroups/${adGroupId}`; - const adGroupOperation = { - updateMask: 'status', - update: { - resourceName: resourceUrl, - status: action === 'ACTIVATE' ? 'ENABLED' : 'PAUSED', - }, - }; - const mutateOperation = { operations: [adGroupOperation] }; - - const request: GaxiosOptions = { - method: 'POST', - baseURL: GOOGLEADS_API_URL, - url: `/customers/${customerAccountId}/adGroups:mutate`, - headers: { - 'developer-token': developerToken, - 'login-customer-id': parseInt(managerAccountId), - }, - body: mutateOperation, - }; - const response = await client.request(request); - if (response.status === 200) { - return { status: 'success' }; - } else { - return { - status: 'failed', - error: `Failed to activate target entity: ${resourceUrl}`, - }; - } - } - - /** - * Executes a single target agent task. - * @param {TargetAgentTask} task the task to execute - * @returns {Promise} the result of the performed action - */ - private executeTask(task: TargetAgentTask): Promise { - const client = googleAuthService.getAuthorizedClientForUser(task.owner); - - const entityType = task.parameters['entityType']; - const customerAccountId = task.parameters['customerAccountId'] as string; - const managerAccountId = task.ownerSettings['GOOGLEADS_MANAGER_ACCOUNT_ID']; - const developerToken = task.ownerSettings['GOOGLEADS_DEV_TOKEN']; - - switch (entityType) { - case 'adGroup': - try { - const adGroupId = task.parameters['adGroupId'] as string; - return this.performAdGroupAction( - client, - task.action, - customerAccountId, - adGroupId, - developerToken, - managerAccountId - ); - } catch (err) { - return Promise.resolve({ - status: 'failed', - error: err instanceof Error ? err.message : JSON.stringify(err), - }); - } - default: - return Promise.resolve({ - status: 'failed', - error: `Unsupported entity type: ${entityType}`, - }); - } - } - - /** - * @inheritdoc - */ - async executeTasks(tasks: TargetAgentTask[]): Promise { - const results: OperationResult[] = []; - - for (const task of tasks) { - const result = await this.executeTask(task); - results.push(result); - } - - return results; - } - - /** - * @inheritdoc - */ - describe() { - const description: TargetAgentMetadata = { - id: 'google-ads', - name: 'Google Ads', - type: 'target', - settings: [ - { - key: 'GOOGLEADS_MANAGER_ACCOUNT_ID', - name: 'Google Ads Manager Account ID', - }, - { key: 'GOOGLEADS_DEV_TOKEN', name: 'Google Ads Developer Token' }, - ], - targetEntities: [ - { - name: 'Ad Group', - key: 'adGroup', - parameters: ['customerAccountId', 'adGroupId'], - }, - ], - }; - return Promise.resolve(description); - } - - /** - * @inheritdoc - */ - async listTargetEntities( - type: string, - parameters: Record, - requestor: User, - requestorSettings: Record - ): Promise { - const client = googleAuthService.getAuthorizedClientForUser(requestor); - const customerAccountId = - 'customerAccountId' in parameters - ? (parameters['customerAccountId'] as string) - : (requestorSettings['GOOGLEADS_ACCOUNT_ID'] as string); - const developerToken = requestorSettings['GOOGLEADS_DEV_TOKEN'] as string; - const managerAccountId = requestorSettings[ - 'GOOGLEADS_MANAGER_ACCOUNT_ID' - ] as string; - - if (type.toLowerCase() === 'adgroup') { - const query = `SELECT ad_group.name, - campaign.id, - campaign.name, - ad_group.id, - ad_group.name, - ad_group.status, - ad_group.type - FROM ad_group - WHERE ad_group.status != 'REMOVED'`; - - let response; - - try { - response = await client.request< - GoogleAdsQueryResult - >({ - url: `${GOOGLEADS_API_URL}/customers/${customerAccountId}/googleAds:search`, - data: { query }, - method: 'POST', - headers: { - 'developer-token': developerToken, - 'login-customer-id': parseInt(managerAccountId), - }, - }); - } catch (err) { - console.log(err); - response = (err as GaxiosError).response; - } - - if (response.status !== 200 || response.data === undefined) { - return { - status: 'failed', - error: `HTTP error: ${response.statusText}`, - }; - } - - const entities = response.data.results.map( - ({ adGroup }) => - ({ - type: 'adGroup', - parameters: { customerAccountId, adGroupId: adGroup.id }, - name: adGroup.name, - } as TargetEntity) - ); - - return { status: 'success', entities }; - } - return { status: 'failed', error: `Unsupported entity type: ${type}` }; - } -} diff --git a/server/app.ts b/server/app.ts deleted file mode 100644 index 531f59e..0000000 --- a/server/app.ts +++ /dev/null @@ -1,122 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -// Load environment variables first -import env from 'dotenv'; -import { logger } from './util/logger'; - -const envConfig = env.config(); -if (envConfig.error || envConfig.parsed == null) { - logger.error('Error loading configuration from .env file'); -} - -import { FirestoreStore } from '@google-cloud/connect-firestore'; -import { Firestore } from '@google-cloud/firestore'; -import bodyParser from 'body-parser'; -import cors from 'cors'; -import express, { NextFunction, Request, Response } from 'express'; -import session from 'express-session'; -import passport from 'passport'; -import path from 'path'; -import { createGoogleStrategy } from './auth/google-auth'; -import { User } from './common/user'; -import router from './routes'; -import { handleGenericError } from './util/error'; - -const app = express(); - -logger.info(`LOG LEVEL SETTING : ${process.env.LOG_LEVEL}`); -logger.debug({ ...process.env }); -logger.debug( - '-------------------------------END CONFIGURATION----------------' -); -const PORT = process.env.PORT || 8080; -app.set('PORT', PORT); -/** - * Express configuration - */ - -// Configure CORS -app.use( - cors({ - origin: true, - credentials: true, - methods: ['GET', 'POST', 'PATCH', 'DELETE', 'PUT', 'HEAD', 'OPTIONS'], - preflightContinue: true, - optionsSuccessStatus: 204, - }) -); -// Configure static assets & Frontend files -app.use(express.static(path.join(__dirname, './public'))); -app.use(express.json()); - -// Configure app to process any request body as JSON and throw error if JSON is -// not valid -app.use(bodyParser.json({ type: '*/*' })); -app.use(express.urlencoded({ extended: true })); - -// Configure sessions -// TDOD(jhoesel): Check if session cookie can live longer than access-token -const SESSION_COOKIE_MAX_AGE = 3600000; -app.use( - session({ - store: new FirestoreStore({ - dataset: new Firestore(), - kind: 'sessions', - }), - secret: process.env.SESSION_SECRET || 's9hp0VtUkd$FJM$T91lB', - cookie: { - secure: process.env.NODE_ENV !== 'development', - maxAge: SESSION_COOKIE_MAX_AGE, - }, - resave: false, - saveUninitialized: true, - }) -); - -// Configure request logger -export const requestLogger = ( - req: Request, - res: Response, - next: NextFunction -) => { - const message = ` Url:${req.url} - Method: ${req.method} - Params: ${JSON.stringify(req.params, null, 2)} - Body: ${JSON.stringify(req.body, null, 2)}`; - logger.debug(message); - next(); -}; -app.use(requestLogger); - -// Initialize passport for app login -try { - passport.use(createGoogleStrategy()); - // TODO(jhoesel): Reduce user properties stored in session - passport.serializeUser((user, done) => done(null, user)); - passport.deserializeUser((user, done) => done(null, user)); - - app.use(passport.initialize()); - app.use(passport.session()); -} catch (err) { - logger.error(err); -} - -// Configure routes -app.use('/', router); - -// Configure error handlers (always do last) -// Register generic error handler for anything uncaught -app.use(handleGenericError); - -export default app; diff --git a/server/auth/google-auth.ts b/server/auth/google-auth.ts deleted file mode 100644 index f4438aa..0000000 --- a/server/auth/google-auth.ts +++ /dev/null @@ -1,290 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import axios from 'axios'; -import { add as dateAdd, isFuture as dateIsFuture } from 'date-fns'; -import { NextFunction, Request, Response } from 'express'; -import { - Profile, - Strategy, - StrategyOptions, - VerifyCallback, -} from 'passport-google-oauth20'; -import { ModelSpec } from '../common/common'; -import { Credentials, User } from '../common/user'; -import { collectionService } from '../services/collections-service'; -import { AppError } from '../util/error'; -import { logger } from '../util/logger'; - -const users = collectionService.users; -const GOOGLE_TOKEN_URL = 'https://oauth2.googleapis.com/token'; - -// **************************************************************************** -// Authentication -// **************************************************************************** - -/** - * Extracts the raw access token from a HTTP authorization header. - * @param {string} authorizationHeader the authorization header - * @returns {string|undefined} the access token or undefined - */ -function extractAccessTokenFromHeader(authorizationHeader: string) { - return authorizationHeader?.split(' ')[1]; -} - -/** - * Extracts the raw access token from a HTTP request. - * @param {Request} req the express request - * @returns {string|undefined} the access token or undefined - */ -function extractAccessTokenFromRequest(req: Request) { - const authorizationHeader = req.headers.authorization ?? ''; - return extractAccessTokenFromHeader(authorizationHeader); -} - -/** - * Express middleware function to validate access tokens sent to the API. - * @param {Request} req the express request - * @param {Response} res the express response - * @param {NextFunction} next the express next function - * @returns {void} - */ -export async function isAuthenticated( - req: Request, - res: Response, - next: NextFunction -) { - const accessToken = extractAccessTokenFromRequest(req); - logger.debug(`Authenticating via access token ${accessToken}.`); - if (accessToken) { - const user = await users.findByAccessToken(accessToken); - if (user) { - logger.debug(`Found eligible user ${user.id}`); - if (dateIsFuture(user.credentials.expiry)) { - logger.debug(`Eligible user's access token is valid.`); - return next(); - } - } - } - return next(new AppError('Not authenticated', 401)); -} - -// **************************************************************************** -// Token refresh -// **************************************************************************** - -/** - * Get new auth token. - * - * @param {string} refreshToken - * @returns {Promise} the new credentials for the user - */ -async function getNewAuthToken(refreshToken: string): Promise { - try { - logger.debug(`Exchanging Refresh token ${refreshToken} for Auth Token`); - const grantType = 'refresh_token'; - const clientSecret = process.env.GOOGLE_CLIENT_SECRET; - const clientId = process.env.GOOGLE_CLIENT_ID; - - const payload = { - client_id: clientId, - client_secret: clientSecret, - grant_type: grantType, - refresh_token: refreshToken, - }; - const now = new Date(); - const request = await axios.post(GOOGLE_TOKEN_URL, payload); - - if (request.status == 200) { - const credenitals: Credentials = { - accessToken: request.data.access_token, - expiry: dateAdd(now, { seconds: request.data.expires_in }), - refreshToken: request.data.refresh_token, - }; - - logger.info(`Obtained new access Token ${credenitals.accessToken}`); - logger.info(`Token expires in ${request.data.expires_in}`); - - return credenitals; - } - } catch (err) { - logger.error(err); - return Promise.reject(err); - } - return Promise.reject( - new Error('Could not obtain token, check logs for errors') - ); -} - -/** - * Refresh tokens for user. - * - * For server-internal use only. - * @param {string} userId the user ID - * @returns {Promise} the new credentials for the user - */ -export async function refreshTokensForUser( - userId: string -): Promise { - try { - const user = await users.get(userId); - - if (user) { - if (dateIsFuture(user.credentials.expiry)) { - logger.info(`Access token for user ${userId} is still valid`); - return user.credentials; - } - logger.info( - `Noticed expired access token for user ${userId} , refreshing...` - ); - const refreshToken: string = user.credentials.refreshToken; - const newCredentials = await getNewAuthToken(refreshToken); - Object.assign(user.credentials, newCredentials); - await users.update(userId, user); - return user.credentials; - } - throw new AppError('Unknown user.', 401); - } catch (err) { - logger.error(['google-auth:refreshTokenForUser', err as string]); - throw err; - } -} - -/** - * Reissues a new token for the user, upon presentation of the old token. - * @param {string} userId the user ID - * @param {string} accessToken the user's current access token - * @returns {Promise} the new credentials for the user - */ -export async function refreshAccessToken( - userId: string, - accessToken: string -): Promise { - if (!userId && !accessToken) { - return Promise.reject( - new Error('Both userId and expired access Token are required for renewal') - ); - } - - try { - const user: User = (await users.get(userId)) as User; - if (user?.credentials?.accessToken == accessToken) { - const newCredentials = await refreshTokensForUser(userId); - return newCredentials; - } - throw new Error('Refresh request denied'); - } catch (e) { - logger.error(e); - throw e; - } -} - -// **************************************************************************** -// Passport config -// **************************************************************************** - -/** - * Initializes a new user in the data store. - * @param {Profile} profile the profile from which to create the user. - */ -async function createUser(profile: Profile) { - logger.debug('Initializing new user.'); - const profileData = profile._json; - const userData: ModelSpec = { - profileId: profile.id, - displayName: profile.displayName, - givenName: profile.name?.givenName, - familyName: profile.name?.familyName, - email: profileData.email!, - verified: profileData.email_verified === 'true', - gender: 'unknown', - profilePhoto: profileData.picture, - locale: profileData.locale, - credentials: { - accessToken: '', - expiry: new Date(), - refreshToken: '', - }, - settings: {}, - }; - logger.debug(`User data from profile: ${JSON.stringify(userData, null, 2)}`); - const user = await users.insert(userData); - logger.debug(`Stored user data with id: ${user.id}`); - - if (!user) { - throw new AppError('Could not create user entry', 500); - } - return user; -} - -/** - * Implements passport's verify callback. - * @param {string} accessToken the user's access token - * @param {string} refreshToken the user's refresh token - * @param {Profile} profile the user's profile data - * @param {VerifyCallback} done the callback to notify completion - */ -async function verify( - accessToken: string, - refreshToken: string, - profile: Profile, - done: VerifyCallback -) { - // this is the callback method called after successful authentication - logger.debug(`Profile : ${JSON.stringify(profile, null, 2)}`); - - // Check if the user exists in db - let [user] = await users.findWhere('profileId', profile.id); - logger.debug(user); - if (!user) { - user = await createUser(profile); - } - - user.credentials = Object.assign(user.credentials, { - accessToken: accessToken, - refreshToken: refreshToken, - expiry: dateAdd(Date.now(), { seconds: 3599 }), - }); - - await users.update(user.id!, user); - // Do not transfer refresh token back to client. - return done(null, user, true); -} - -/** - * Creates a Google OAuth2.0 sign-in strategy. - * @returns {Strategy} the Google OAuth strategy. - */ -export function createGoogleStrategy() { - if (typeof process.env.OAUTH_CALLBACK_URL === 'undefined') { - throw new Error( - 'OAUTH_CALLBACK_URL undefined, it must be set as environment variable' - ); - } - logger.warn( - `Set oauth callback URL to ${process.env.OAUTH_CALLBACK_URL}, adjust Authorized URLs in GCP client settings accordingly` - ); - - const strategyOptions: StrategyOptions = { - clientID: process.env.GOOGLE_CLIENT_ID!, - clientSecret: process.env.GOOGLE_CLIENT_SECRET!, - callbackURL: process.env.OAUTH_CALLBACK_URL, - scope: [ - 'email', - 'profile', - 'https://www.googleapis.com/auth/display-video', - 'https://www.googleapis.com/auth/adwords', - ], - }; - return new Strategy(strategyOptions, verify); -} diff --git a/server/collections/firebase-collection.ts b/server/collections/firebase-collection.ts deleted file mode 100644 index 5f2f934..0000000 --- a/server/collections/firebase-collection.ts +++ /dev/null @@ -1,285 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { - DocumentData, - Firestore, - FirestoreDataConverter, - QueryDocumentSnapshot, - SetOptions, - Timestamp, -} from '@google-cloud/firestore'; -import { Model, ModelSpec } from '../common/common'; -import { logger } from '../util/logger'; - -/** - * A firebase data converter that converts dates to timestamps. - */ -class FirebaseDateConverter - implements FirestoreDataConverter> -{ - /** - * Converts a object's date properties to firebase timestamps. - * @param {unknown} value the object to convert - * @param {string} fieldName an optional field path - */ - private deepConvertToFirestore(value: unknown, fieldName = '') { - if (value instanceof Object) { - Object.entries(value as object).forEach(([field, fieldValue]) => { - if (fieldValue instanceof Date) { - logger.debug(`Converting date to timestamp: ${fieldName}.${field}`); - value[field] = Timestamp.fromDate(fieldValue); - } else { - this.deepConvertToFirestore(fieldValue, field); - } - }); - } - } - /** - * Converts a object's date properties to firebase timestamps. - * @param {unknown} value the object to convert - * @param {string} fieldName an optional field path - */ - private deepConvertFromFirestore(value: unknown, fieldName: string = '') { - if (value instanceof Object) { - Object.entries(value as object).forEach(([field, fieldValue]) => { - if (fieldValue instanceof Timestamp) { - logger.debug(`Converting timestamp to date: ${fieldName}.${field}`); - value[field] = fieldValue.toDate(); - } else { - this.deepConvertFromFirestore(fieldValue); - } - }); - } - } - - /** - * @inheritdoc - */ - toFirestore(modelObject: ModelSpec): DocumentData; - /** - * @inheritdoc - */ - toFirestore( - modelObject: Partial>, - options: SetOptions - ): DocumentData; - /** - * @inheritdoc - */ - toFirestore( - modelObject: ModelSpec, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - options?: unknown - ): DocumentData { - this.deepConvertToFirestore(modelObject); - return modelObject; - } - - /** - * @inheritdoc - */ - fromFirestore(snapshot: QueryDocumentSnapshot): ModelSpec { - const data = snapshot.data(); - this.deepConvertFromFirestore(data); - return data as ModelSpec; - } -} - -/** - * A collection implementation for Firebase - */ -export class FirebaseCollection { - private dateConverter = new FirebaseDateConverter(); - - /** - * Constructor - * @param {string} name the name of this collection - * @param {Firestore} firestore the underlying Firestore - */ - constructor(readonly name: string, readonly firestore: Firestore) {} - - /** - * Retrieves a single model from Firestore. - * @param {string} id the model ID - * @returns {Promise} the model or undefined if no model with - * the given ID exists - */ - async get(id: string): Promise { - logger.debug(['FirebaseCollection:get', id]); - if (!id) { - throw new Error('Document id cannot be empty'); - } - - try { - const docRef = this.firestore - .collection(this.name) - .withConverter(this.dateConverter) - .doc(id); - - const doc = await docRef.get(); - - if (!doc.exists) { - logger.info(`Document with id : ${id} not found`); - return undefined; - } - return { id: doc.id, ...doc.data() } as T; - } catch (err) { - logger.error(err); - return Promise.reject(err); - } - } - /** - * Retrieves all model from Firestore - * @returns {Promise} the list of existing models - */ - async list(): Promise { - const data: T[] = []; - - try { - const collection = await this.firestore - .collection(this.name) - .withConverter(this.dateConverter) - .get(); - - collection.forEach((entry) => { - data.push({ id: entry.id, ...entry.data() } as T); - }); - logger.debug('Repository:list'); - logger.debug(data); - return data; - } catch (err) { - logger.error(err); - return Promise.reject(err); - } - } - - /** - * Inserts a model. - * @param {ModelSpec} modelSpec the model data to insert - * @returns {Promise} the inserted model - */ - async insert(modelSpec: ModelSpec): Promise { - logger.debug('Saving data to firestore'); - logger.debug(modelSpec); - try { - const collectionRef = this.firestore.collection(this.name); - const result = await collectionRef.add(modelSpec); - logger.debug('Saved entity with id :' + result.id); - return (await this.get(result.id))!; - } catch (err) { - logger.error(err); - throw err; - } - } - - /** - * Replaces a model's data. - * @param {string} id the model ID - * @param {ModelSpec} modelSpec the model data to replace - * @returns {Promise} the updated model - */ - async update(id: string, modelSpec: ModelSpec): Promise { - // Refer to https://cloud.google.com/firestore/docs/manage-data/add-data - // on updating nested objects and difference between set & update functions. - // set replaces existing document with the new copy. - try { - const docRef = this.firestore.collection(this.name).doc(id); - await docRef.set(modelSpec); - return (await this.get(id))!; - } catch (err) { - logger.error(err); - throw err; - } - } - - /** - * Deletes a model. - * @param {string} id the model ID. - * @returns {Promise} completes after model deletion - */ - async delete(id: string): Promise { - try { - const docRef = this.firestore.collection(this.name).doc(id); - await docRef.delete(); - } catch (err) { - logger.error(err); - throw err; - } - } - - /** - * Retrieves all models for which the value at the specified field path - * matches the provided value. - * @param {string} fieldSpec the field path - * @param {unknown} value the value to match - * @returns {Promise} the models which match the value at the field path - */ - async findWhere(fieldSpec: string, value: unknown): Promise { - logger.debug('Repository:getBy'); - const models: Array = []; - try { - const colRef = this.firestore - .collection(this.name) - .withConverter(this.dateConverter); - const snapshot = await colRef.where(fieldSpec, '==', value).get(); - - if (snapshot.empty) { - logger.debug( - `Collection ${this.name} contains no document with field ${fieldSpec} : ${value}` - ); - } - - snapshot.forEach((doc) => { - models.push({ id: doc.id, ...doc.data() } as T); - }); - } catch (err) { - logger.error(err); - throw err; - } - - return Promise.resolve(models); - } - - /** - * Retrieves all models for which the array at the specified field path - * contains the provided value. - * @param {string} fieldSpec the field path - * @param {unknown} value the value to match - * @returns {Promise} the models which contain the value at the field - * path - */ - async findWhereArrayContains( - fieldSpec: string, - value: unknown - ): Promise { - const data: T[] = []; - logger.debug('repository:arrayContainsAny'); - const snapshot = await this.firestore - .collection(this.name) - .where(fieldSpec, 'array-contains', value) - .withConverter(this.dateConverter) - .get(); - - if (snapshot.empty) { - logger.debug( - `No matching documents found ${fieldSpec}[] containing ${value}` - ); - } - - snapshot.forEach((doc) => { - data.push({ id: doc.id, ...doc.data() } as T); - }); - return data; - } -} diff --git a/server/collections/users-collection.ts b/server/collections/users-collection.ts deleted file mode 100644 index 08f4208..0000000 --- a/server/collections/users-collection.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { User } from 'common/user'; -import { FirebaseCollection } from './firebase-collection'; - -/** - * A firebase collection implementation with additional functionality for users. - */ -export class UsersCollection extends FirebaseCollection { - /** - * - * @param {string} accessToken - * @returns {Promise} the user or undefined if no user with - * access token can be found. - */ - async findByAccessToken(accessToken: string): Promise { - const [user] = await this.findWhere('credentials.accessToken', accessToken); - return user; - } -} diff --git a/server/common/common.ts b/server/common/common.ts deleted file mode 100644 index 8219cd7..0000000 --- a/server/common/common.ts +++ /dev/null @@ -1,53 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -/** - * Base interface of all IFTTA DB models. - */ -export interface Model { - id: string; -} - -/** - * A model's data (excluding the ID). - */ -export type ModelSpec = Omit; - -export interface OperationResult { - status: 'success' | 'failed'; - error?: string; -} - -export type AgentParameters = Record; - -export interface Agent { - /** The unique ID of this agent. */ - readonly id: string; - - /** - * Provides descriptive metadata about this agent, including its name, id and - * additional capabilities. - */ - describe(): Promise; -} - -export interface AgentSettingMetadata { - key: string; - name: string; -} -export interface AgentMetadata { - id: string; - name: string; - type: 'source' | 'target'; - settings?: AgentSettingMetadata[]; -} diff --git a/server/common/rule.ts b/server/common/rule.ts deleted file mode 100644 index fcc0769..0000000 --- a/server/common/rule.ts +++ /dev/null @@ -1,94 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { AgentParameters, Model, OperationResult } from './common'; -import { TargetAgentAction } from './target'; - -export type Comparator = 'eq' | 'gt' | 'lt'; - -/** - * A rule's condition definition - */ -export interface Condition { - /** The source data point to compare. */ - dataPoint: string; - /** The condition's comparator. */ - comparator: Comparator; - /** The value to compare against. */ - compareValue: string | number | boolean; -} - -/** - * A rule's source definition. - */ -export interface RuleSourceAction { - /** The source agent ID. */ - agentId: string; - /** The source agent parameters. */ - parameters: AgentParameters; -} - -/** - * A rule's target definition. - */ -export interface RuleTargetAction { - /** The target agent ID. */ - agentId: string; - /** The target agent parameters. */ - parameters: AgentParameters; - /** The action to execute if the condition evaluates to true. */ - action: TargetAgentAction; -} - -export interface RuleStatus { - /** A flag indicating that the rule evaluation succeeded. */ - success: boolean; - /** The rule's last evaluation date. */ - lastExecution: Date; - /** The reason the rule evaluation did not succeed. */ - error?: string; -} - -/** - * The rule definition. - */ -export interface Rule extends Model { - /** The rule's human-readable name */ - name: string; - /** The user ID of the rule owner. */ - ownerId: string; - /** The execution interval in minutes. */ - executionInterval: number; - /** The rule's source definition. */ - source: RuleSourceAction; - /** The rule's condition definition. */ - condition: Condition; - /** The rule's target defintion. */ - targets: RuleTargetAction[]; - - /** The status of the rule's last evaluation. */ - latestStatus?: RuleStatus; -} - -/** - * The result of evaluating a rule. - * - * During evaluation source agent data is translated to the resulting - * actions for the target agent. - */ -export interface RuleEvaluationResult extends OperationResult { - /** The rule which was evaluated */ - rule: Rule; - /** The resulting target actions after evaluation. */ - targetActions?: RuleTargetAction[]; -} diff --git a/server/common/source.ts b/server/common/source.ts deleted file mode 100644 index 91bd521..0000000 --- a/server/common/source.ts +++ /dev/null @@ -1,151 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { - Agent, - AgentMetadata, - AgentParameters, - OperationResult, -} from './common'; - -/** - * A description of a parameter a source agent requires to make calls - * to the ultimate API. - */ -export interface SourceAgentParameterMetadata { - /** The parameter's human readable name. */ - name: string; - /** The parameter's unique key. */ - key: string; - /** The type of the parameter. */ - type: string; - /** Optional enumeration values. */ - values?: string[]; -} - -/** - * A description of a data point provided by a source agent. - * - * Source agent can provide data point values as strings, numbers or booleans. - * - * Numeric data points should also specify the unit of measurement if applicable. - * E.g. temperature data points should specify whether they are in °C, °F or K. - * - * Enumeration values may be specified via the values property. - * E.g. index data points should specify possible values like 'low', 'medium', - * 'high', etc. - */ -export interface SourceAgentDataPointMetadata { - /** The data point's unique key. */ - key: string; - /** The data point's human readable name. */ - name: string; - /** The type of the data point. */ - type: 'string' | 'number' | 'boolean' | 'enum'; - /** Optional enumeration values. */ - values?: string[]; -} - -/** - * A description of an agent and it's capabilities. - */ -export interface SourceAgentMetadata extends AgentMetadata { - /** - * Parameters which a source agent requires to fetch data. - */ - readonly parameters: SourceAgentParameterMetadata[]; - /** - * Data points which a source agent provides. - */ - readonly dataPoints: SourceAgentDataPointMetadata[]; -} - -/** - * A query task for the source agent to execute. - */ -export interface SourceAgentTask { - /** - * Parameters for this task. - */ - parameters: AgentParameters; - - /** - * The ID of the user who owns this task. - */ - ownerId: string; - - /** - * The task owners settings object. - */ - ownerSettings: Record; - /** - * The data points for which this task requires data. - */ - dataPoints: string[]; -} - -/** - * The source agent's response data object. When executing tasks, the - * source agent must respons with an object that contains values for each - * queried data point. - * - * If a task's data points contain ["a", "b", "c"] the source agent must provide - * a response object in the form of { "a": , "b": , "c": }, - * where values must be of the type specified by the data point description. - */ -export interface SourceAgentData { - [dataPoint: string]: number | boolean | string; -} - -/** - * The result of a data fetching job. The data object must contain values for - * each queried data point. The data can be undefined in error cases (i.e. if - * the result's status is 'failed' rather than 'success'.) - */ -export interface SourceAgentTaskResult extends OperationResult { - /** The agent's response data. */ - data?: SourceAgentData; -} - -/** - * The source agent is responsible for fetching data from a source. - * - * Source agents access an external API to request input signals and translate - * those signals into data for the rule engine. The process of fetching data - * is asynchronous and source agent implementations will be invoked via tasks. - * - * A source agent task encapsulates the query for a set of data points. Source - * agents must provide data for all queried data points. Tasks will also - * receive a set of parameters for the query and the task owner's settings. - * Source agents should inspect parameters and owner settings to draw required - * values for the ultimate API query. - * - * In addition to the process of executing tasks, source agents must also - * implement the method "describe", which provides metadata for the agent, - * including the agent's name and ID, which data points this source agent - * provides, etc. Please refer to the SourceAgentDescription interface for - * information on descriptive metadat. - */ -export interface SourceAgent extends Agent { - /** - * Executes a query task. - * @param task the task to be executed - */ - executeTask(task: SourceAgentTask): Promise; - - /** - * Provides descriptive metadata about this agent, including its name, id and - * available source data points . - */ - describe(): Promise; -} diff --git a/server/common/target.ts b/server/common/target.ts deleted file mode 100644 index 3020a16..0000000 --- a/server/common/target.ts +++ /dev/null @@ -1,79 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { - Agent, - AgentMetadata, - AgentParameters, - OperationResult, -} from './common'; -import { User } from './user'; - -export interface TargetEntity { - type: string; - name: string; - parameters: Record; -} - -export interface TargetEntityMetadata { - key: string; - name: string; - parameters?: string[]; -} - -export interface TargetAgent extends Agent { - /** - * Executes a set of tasks that result from rule evaluations - * @param {TargetAgentTask[]} tasks the tasks to execute - */ - executeTasks(tasks: TargetAgentTask[]): Promise; - - /** - * @inheritdoc - */ - describe(): Promise; - - /** - * List a set of target entities this agent can interact with. - * @param {string} type the entity type - * @param {AgentParameters} parameters the call parameters - * @param {User} requestor the requesting user - * @param {Record} requestorSettings the requestor's user - * settings. - * @returns {Promise} the agent's response - */ - listTargetEntities( - type: string, - parameters: AgentParameters, - requestor: User, - requestorSettings: Record - ): Promise; -} - -export interface TargetAgentMetadata extends AgentMetadata { - targetEntities: TargetEntityMetadata[]; -} - -export type TargetAgentAction = 'ACTIVATE' | 'DEACTIVATE'; - -export interface TargetAgentTask { - agentId: string; - action: TargetAgentAction; - parameters: AgentParameters; - owner: User; - ownerSettings: Record; -} - -export interface TargetEntityResponse extends OperationResult { - entities?: TargetEntity[]; -} diff --git a/server/common/user.ts b/server/common/user.ts deleted file mode 100644 index 9902c5a..0000000 --- a/server/common/user.ts +++ /dev/null @@ -1,34 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { Model } from './common'; - -export interface Credentials { - accessToken: string; - expiry: Date; - refreshToken: string; -} - -export interface User extends Model { - profileId: string; - displayName?: string; - givenName?: string; - familyName?: string; - gender?: string; - email: string; - verified?: boolean; - profilePhoto?: string; - locale?: string; - credentials: Credentials; - settings: Record; -} diff --git a/server/controllers/account-controller.ts b/server/controllers/account-controller.ts deleted file mode 100644 index c1d0d2d..0000000 --- a/server/controllers/account-controller.ts +++ /dev/null @@ -1,90 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ -import { ModelSpec } from 'common/common'; -import { Request, Response } from 'express'; -import { User } from '../common/user'; -import { collectionService } from '../services/collections-service'; -import { logger } from '../util/logger'; - -const users = collectionService.users; - -// TODO: add exception handling -// input data validation -export const listAccounts = async (req: Request, res: Response) => { - try { - const userData = await users.list(); - return res.json(userData); - } catch (e) { - logger.debug(e); - return res.status(500).send('Failed to fetch account list'); - } -}; - -export const create = async (req: Request, res: Response) => { - // TODO: implement data validation. - const user: ModelSpec = { ...req.body }; - const result = await users.insert(user); - return res.json(result); -}; - -export const get = async (req: Request, res: Response) => { - const userData = await users.get(req.params.id); - return res.json(userData); -}; - -/** - * Updates user object. - * @param {Request} req :id - * @param {Response} res Updated user object - */ -export const update = async (req: Request, res: Response) => { - try { - const userId = req.params.id; - const user: ModelSpec = { ...req.body }; - await users.update(userId, user); - return res.sendStatus(200); - } catch (e) { - logger.error(e); - return res.sendStatus(500); - } -}; - -export const updateSettings = async (req: Request, res: Response) => { - try { - const user = (await users.get(req.params.userId)) as User; - user.settings = req.body; - await users.update(req.params.userId, user); - } catch (e) { - logger.error(e); - return res - .status(500) - .json({ error: 'Error occurred while updating user settings' }); - } - return res.status(200).json({ status: 'ok' }); -}; - -export const remove = async (req: Request, res: Response) => { - const id = req.params.id; - logger.debug(`Deleting document ${id}`); - await users.delete(id); - return res.json({ status: 'done' }); -}; - -export const getBy = async (req: Request, res: Response) => { - const fieldName = req.query.fieldName! as string; - const fieldValue: string = req.query.fieldValue! as string; - - const data = await users.findWhere(fieldName, fieldValue); - - return res.json(data); -}; diff --git a/server/controllers/agents-controller.ts b/server/controllers/agents-controller.ts deleted file mode 100644 index db1aca0..0000000 --- a/server/controllers/agents-controller.ts +++ /dev/null @@ -1,72 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -require('module-alias/register'); - -import { Request, Response } from 'express'; -import { agentsService } from '../services/agents-service'; -import { collectionService } from '../services/collections-service'; -import { logger } from '../util/logger'; - -export const getAgentsMetadata = async (req: Request, res: Response) => { - const agentMetadata = await agentsService.describeAll(); - return res.json(agentMetadata); -}; - -export const getAgentEntityList = async (req: Request, res: Response) => { - const agentId = req.params.agent; - if (!agentId) { - return res.status(400).send('Invalid agent parameter.'); - } - - const entityType = req.params.entityType; - if (!entityType) { - return res.status(400).send('Invalid entityType parameter.'); - } - - const accessToken = req.headers.authorization?.split(' ')[1]; - if (!accessToken) { - logger.error('Invalid request credentials.'); - return res.status(401).send(); - } - - const [requestor] = await collectionService.users.findWhere( - 'credentials.accessToken', - accessToken - ); - if (!requestor) { - logger.error('Invalid request credentials.'); - return res.status(401).send(); - } - - const agent = agentsService.getTargetAgent(agentId); - if (!agent) { - logger.error(`Unknown target agent: ${agentId}`); - return res.status(404).send(); - } - - const params = Object.fromEntries( - Object.entries(req.query).filter((entry) => typeof entry[1] === 'string') - ) as Record; - const response = await agent.listTargetEntities( - entityType, - params, - requestor, - requestor.settings - ); - if (response.status === 'failed') { - logger.error(response.error); - return res.status(400).send(response.error); - } - return res.json(response); -}; diff --git a/server/controllers/auth-controller.ts b/server/controllers/auth-controller.ts deleted file mode 100644 index 9af2c8e..0000000 --- a/server/controllers/auth-controller.ts +++ /dev/null @@ -1,128 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { NextFunction, Request, Response } from 'express'; -import passport from 'passport'; -import { logger } from '../util/logger'; - -// TODO(jhoesel): move token refresh out of job runner. -import { refreshAccessToken } from '../auth/google-auth'; - -/** - * Encodes the login request parameters into a pass-through state variable for - * the OAuth flow. - * @param {Request} req the express request - * @returns {string} the base-64 encoded state value - */ -function encodeLoginStateFromRequest(req: Request) { - return Buffer.from( - JSON.stringify({ - returnTo: req.query.returnTo, - clientUrl: req.query.clientUrl, - }) - ).toString('base64'); -} - -/** - * - * @param {Request} req the express request - * @returns {{returnTo: string, clientUrl: string}} the decoded login state - */ -function decodeLoginStateFromRequest(req: Request) { - const parsed = JSON.parse( - Buffer.from(req.query.state!.toString(), 'base64').toString() - ); - return { - returnTo: parsed['returnTo'] as string, - clientUrl: parsed['clientUrl'] as string, - }; -} - -/** - * Attempts an access token refresh. - * @param {Request} req the express request - * @param {Response} res the express response - * @param {NextFunction} next the express next function - */ -export async function refreshToken( - req: Request, - res: Response, - next: NextFunction -) { - try { - const { userId, token } = req.body; - const newToken = await refreshAccessToken(userId, token); - res.json(newToken); - } catch (err) { - next(err); - } -} - -/** - * Performs a logout. - * @param {Request} req the express request - * @param {Response} res the express response - */ -export function logout(req: Request, res: Response) { - req.logout(() => { - req.session.destroy(() => { - res.clearCookie('connect.sid'); - res.redirect('/'); - }); - }); -} - -/** - * Handles the login callback from Google's OAuth flow. - * @param {Request} req the express request - * @param {Response} res the express response - * @param {NextFunction} next the express next function - */ -export function googleLoginCallback( - req: Request, - res: Response, - next: NextFunction -) { - logger.debug('Google login called back.'); - passport.authenticate('google', { - failureRedirect: '/api/auth/login', - })(req, res, next); -} - -/** - * Handles the final leg of the OAuth flow and redirects the user's agent to - * the final 'logged-in' page. - * @param {Request} req the express request - * @param {Response} res the express response - */ -export function googleLoginDone(req: Request, res: Response) { - logger.debug('Google login process done, redirecting client.'); - const { returnTo, clientUrl } = decodeLoginStateFromRequest(req); - const userValue = encodeURIComponent(JSON.stringify(req.user) || ''); - res.redirect(`${clientUrl}/login?returnTo=${returnTo}&user=${userValue}`); -} - -/** - * Starts the Google OAuth login flow. - * @param {Request} req the express request - * @param {Response} res the express response - * @param {NextFunction} next the express next function - */ -export function login(req: Request, res: Response, next: NextFunction) { - logger.debug('Executing Google login.'); - passport.authenticate('google', { - accessType: 'offline', - prompt: 'consent', - state: encodeLoginStateFromRequest(req), - })(req, res, next); -} diff --git a/server/controllers/rules-controller.ts b/server/controllers/rules-controller.ts deleted file mode 100644 index 836685d..0000000 --- a/server/controllers/rules-controller.ts +++ /dev/null @@ -1,156 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { Request, Response } from 'express'; -import { ModelSpec } from '../common/common'; -import { Comparator, Rule } from '../common/rule'; -import { collectionService } from '../services/collections-service'; -import { rulesService } from '../services/rules-service'; -import { logger } from '../util/logger'; - -/** - * Endpoint to create a rule. - * - * @param {Request} req - * @param {Response} res - */ -export const create = async (req: Request, res: Response) => { - console.log('create rule', req.body); - // TODO: add express-validator - - // Parse incoming rule data. - const ruleSpec: ModelSpec = { - name: req.body.name, - ownerId: req.body.ownerId, - source: { - agentId: req.body.source.agentId, - parameters: req.body.source.parameters, - }, - condition: { - dataPoint: req.body.condition.dataPoint, - comparator: req.body.condition.comparator as Comparator, - compareValue: req.body.condition.compareValue, - }, - targets: req.body.targets.map((target) => ({ - agentId: target.agentId, - parameters: target.parameters, - action: target.action, - })), - executionInterval: req.body.executionInterval, - }; - - try { - logger.debug(ruleSpec); - logger.info('rules-controller:create: Creating rule'); - const rule = await rulesService.insertRule(ruleSpec); - logger.info( - `rules-controller:create: Successfully created rule with id : ${rule.id}` - ); - return res.json(rule); - } catch (err) { - console.log(err); - return res.sendStatus(500); - } -}; - -/** - * List all available rules. - * - * @param {Request} req - * @param {Response} res - */ -export const list = async (req: Request, res: Response) => { - return res.json(await collectionService.rules.list()); -}; - -/** - * Delete a rule and its associated jobs. - * - * @param {Request} req - * @param {Response} res - */ -export const remove = async (req: Request, res: Response) => { - try { - const userId = req.params.userId; - const ruleId = req.params.id; - - const rule = await collectionService.rules.get(ruleId); - if (rule) { - if (rule.ownerId === userId) { - await rulesService.deleteRule(rule.id); - return res.status(200).send(); - } else { - const msg = `FORBIDDEN: Non ower userId: ${userId} attempted to delete Rule ${ruleId}`; - logger.warn(msg); - return res.status(403).send(msg); - } - } else { - return res.status(404).send('Not found'); - } - } catch (e) { - logger.error(e); - return res.sendStatus(500); - } -}; - -/** - * Get a single rule by id. - * - * @param {string} req :id - * @param {Response} res - */ -export const get = async (req: Request, res: Response) => { - try { - const ruleId = req.params.id; - const rule = await collectionService.rules.get(ruleId); - return res.json(rule); - } catch (e) { - logger.error(e); - return res.sendStatus(500); - } -}; - -/** - * Get all rules for a user. - * - * @param {Request} req :id - * @param {Response} res Rules[] - */ -export const getByUser = async (req: Request, res: Response) => { - try { - const userId = req.params.id; - const rules = await collectionService.rules.findWhere('ownerId', userId); - return res.json(rules); - } catch (e) { - logger.error(e); - return res.sendStatus(500).json(e); - } -}; - -/** - * Run all rules. - * - * @param {Request} req - * @param {Response} res - * @returns {Response} - */ -export const runAll = (req: Request, res: Response) => { - try { - rulesService.runAll(); - - return res.json({ status: 'started' }); - } catch (e) { - logger.error(e); - return res.sendStatus(500).json(e); - } -}; diff --git a/server/docs/README.md b/server/docs/README.md deleted file mode 100644 index a6049f4..0000000 --- a/server/docs/README.md +++ /dev/null @@ -1,26 +0,0 @@ - - -# IFTTA Server Documentation - -## Server architecture -![Client-Server architecture](imgs/iftta-client-server-architecture.png) - -## Agents -### Source agents -#### OpenWeatherMap interfaces -![OpenWeatherMap interfaces](imgs/agent-openweather-interface.png) -### Target agents -#### DV360 interfaces -![DV360 interfaces](imgs/agent-dv360-ads-interface.png) - diff --git a/server/docs/imgs/agent-dv360-ads-interface.png b/server/docs/imgs/agent-dv360-ads-interface.png deleted file mode 100644 index dbd072ed2b67c0158d06c434d07d0500105bf84c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 439578 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
    44Gn)G**UrHg}QWDfC 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

    otNKmOIEB=ct#5* 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

    U>tl-id?pwjQmN>^^|%k!yb*j4f%{0MPJvh(3U# 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 F{1;B`znB03 diff --git a/server/docs/imgs/agent-openweather-interface.png b/server/docs/imgs/agent-openweather-interface.png deleted file mode 100644 index a22119a21043ac840c190c9d26ae093575bd07ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192073 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�_zJH`z*hi}LV<~3@Yl;Mj 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

    WIVfRiO?Tls?;SWvtt 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 diff --git a/server/docs/imgs/iftta-client-server-architecture.png b/server/docs/imgs/iftta-client-server-architecture.png deleted file mode 100644 index c61be9d5d702e304ffe53f0ec2fbda1ce79fb37f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 197520 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[N9}gx?y@J0J8RpR=FF zEN)vTeHEt_H`w*Mrf2;_+E}5bbF3jN$g+&Ii(tKhHiLwRUF5Aqaq) zi_b^-sAXNn1^=pbiaGx=t9ct2g3F0*e4~bq(y)<~Yk`ehfYxEeBD&x(^kitC?4b_8 z%XTYcv90jSd?!xK1v`+N@i)vR-6QAz9QB%jLU74o_?uF1r+2d0wW@jBPRklmj1WjF zXVfS1h_Dp~S`rxn8?K-HQD^3Q0?z>!sV)IbGv0Hsr;vAIdM&eHTqf(5ifG2t*TTRW ziDzrYqnQ>?G-Uv3ceO_3@uc0nrCU2b`OOaj-9n9qBE(TdpI0y^P*2Hj=nHuuY?L$O z9Kjvgx!?^QFB#(X;Qh@vEmgrUlp3rq)7|^LLgFyY*HF~=Zf0=8q zP~l#8>C|9qo!Y$ulkDLm#cWD-;Osb3@ek(v0yWY|t4GZ0AaBf@U_CSo{(QAU(RlyT zpKQK?d)~we7LwQ+49X^IXmAm^HGMCsU60C#H0?i3FrRca0!880w7ce_w7-j(*K_AF z){O*hf|UXWg_7u?Uwoxs30FQqT1C(K1F30fNOU;|X?zmIg>u26F_-Qc$)1iBV{gAJuc2pT+TUwT5ki8pa9hS7(z;7>oS9{v6n;Co!l*Xye|c zM25uO&!9eh=*$Y`{y$jwp7PY|0B;ym>7eMM7?D7cO?^@{6<;`JzX`27t(w2KP*8|< z7xAlh^|+hv(nny2#k9e5YwhpGe^5k}x0Kz=pDsNsIsKZz4bvG*`vPd0wRir>yMmD8 zP^Mu=@}ue?M6?D82)Cmu6$x+PzFeJ>70LxSDGhz;TXfFu$lgcT@-Km5J8H=Cdxt;U zV5^$bQkTQYuAKCFWHNvWG%|3lWMaY&GGcbn z@5TpG0^X?KB<7UhiFXtIiTlfSIvt28b?XajbMH1J{Y_k>ivrQTJ9iy)>j!AvpUhsV5nxbH~a11Pqo&13m`%+(#nwn~Q{rrbUy@zvsIT1{u6+FCTZPufx z(}2bt?Mf}@5OcW63>Z|}=de)jlaK=gjpuJ-N2Pgue0&OY8!Ia>F+x+$^)q-j2M;e; zNH81IeCG-uouIO}T`A=A2~GRtb|-JCPtPx0sz6Yw_-5AGTbK-s6l#ADq>)`Z$f&%T zFerA&D{}GF`U=_NmuQA@D&?UKvI0U^phs|hhnm8Q4*aT+CBhLv?ertDOS)|icCy zv^V5Hx8mN%uUXFa1DU13cyn-1z>pDo*j~bVLGd-=U<(lEVS~U$lSd0p!v!3`U~2-H(%sHjNSNc zh2U`TaM1YI6qPYs^tuLkYB@n{($S?8c96}K8j@D%n#}}Vk@vQAN=5MAI<|4xg7FZ_ zr@jhqD}h>Y)@`fyHrMz8ZTsc;Ik324KCF^&(Pip|W!;wEU;zo|S#aEGbOE7#YFjl2 z^s#Pu0nGDkLu!!eG7Hs_4NDLCX^_cP8@MMLCJl0XvI~88me`w|)MF^wygiA&Wg4t9 zJT{4_0U6mhm#5BXJ;O*Zrlwh?Xx}!ePh$mHsX@Fko9B7ETE3l;Txm0mXd`KKaVeEJ3pAy~^VP~)|H-fT| zxDNaOxI=JgFu$b}k!mV_&nGST`6W;T+Sd^zflnVHR&C;_98#|S((8sbN;ywbmv&DB zUBmroEovs4=;qg|nlMTh^6H3HZspDF9scqM>mK-hNUVsbO4mxZFuUDy9@A2Pq*dcR&@y#m1*8^4<6Td_w8% zbH9&;DVqBebpz$8@)fG>XP6Cqq{3bv@Wm0e%F9a9tIeG^!Mm=M^I2Cx3|hho`2DnD zX3&rX1x$6C5`hNqmlDk$61D&taWD;>i&j{;`q8A~ar<#C9$c6ExW7vDm{&S{ymcNB z^GK#CMMyaWsj)8UssWhpbKp&y{sUm_-i8wErfncEQ@wUV=k<#(Oh7BuF<2GqV`yL) zr}TD}wZh1SQCH-A)YCxxaKEXA><-;;@MW2K$>qw{070-9aFOMqqj}SZ=+_J>NRf=6 zKDf3MN#qR+7uG%*|L%lhu0AU!3ZJSS%o5^FP@T~PY`AyL9Bz~$oDq$2c5(y*9<#l z&!eO2Luan|{C~gw2@1>+YmKoTngCRJ8?BMGevk?q$k-II6!_HUger#_Z#^#w7TOX`1ot*?@}FCC z8Ld~DiF8|k@$wtuw3IN70F-IiU_-%8g~~MP23il|6a57CD)wL2>yHR~M{6(5oLJe- zje?irE3@FLvf#4BP1w433zujW__?9@E@7f@s4h}W2Eafz?(j|_<&r5gVE#az){@U9 zRY<8TrM7HvKYN9sCg6zQ=ahw>hueDJf0gMxTvFr1X{DhukZ5exhk6bN<& zeeWd+ebG5zV@*d(h)RbaPD^Z8htJ|vog))MF2p&+KZkar#)AncOxBd~l!O3#{`s9A zBs8y3nZq}z0EuDk{r$Q@hK<@iu$P_QiIw7djaiUkRo`tDrpW`=k-N_uidF`ZQ-y*-b1Hm}w(A(@YWo>ljSej(mG0XL~a{8l~Tb^U!1 z@?>P{Y5Rc&9!X&`NXXCb0)~dMJMU8vD24;#+s9zLls|^+gJS?49P$)vFsr5%lS1>y7*m%oH0Q5jXF`z`9 zibFf*p$auWiRnwn63#RGKgkJ#rrmR0gQjj&&2j>DO#*#5unB8~r6!TZBYtQ6?>5+LYc+3=LDg?{ zT20#m+;^QGGXY|MNK-G>w-3LLr@PjRkCkeVxqn}Ki6OFr(W{Tp5IMaN-zR1`;MaM4 z0-OW7)(smE{DuU2hWa{QNIo8i6;#(37Z0;;_-QM=WB=>r^;l^K=5CP*J`E(^Ux24E z8N4h56=(S!SKP38ZvOjJ9^}`ET0!|tpoAuBEU?95Rrck2i)zr?FpZCm9TIFjhAvd; zd283+a!l>dQFO07<|%iV2R->#k9U5I3*X#we^hec!`gh94^DVr1+1?Myy$UG*;mH~ z9dx#A+gJC#k%XCTyhOKQ{YQYgLR((0gOvXu0h=%v{X%osU8Q?xkNAHUIf@+$PAn5&FtU`k~8l{Hc}4k;{PJ3cPYX!8DApOD8(HYt6S zlQv3lpD_=MjuZ9qh3MIzdGuldME28S1>}A#B?_~LzJpj`SEM%?PlQh?(*NIi@PC;D zB$WXve?Vcq;FGh3rh~>Zv6JuA9Grrs-zbd(QmT11yir_qaJOx%LO_F#8{rjy&!klx zpB%5lDKh*n{OhAIouhQ~1srlCO;_~FRCPKhCA!yJZa{vdSXqQ_x6V!91dvFl&cNsg z4X>Fo-a%@ZaKm_At5)MoQQLC8P970jpjvC`{h{ZURU}cXmLNPr8J_Nw9HIhfQdXfk z)THV0^&pFM_QbTGXiBw#7<*gIVqU`D`bD0*G0{WH!=_Ft!dCLEr94eq{QUbD^|~e1 zRGg)qodyfxtQu|3{&Nd{0;~EPI<%P4R|-+ip$-_x=4^VP8V!&G(1T4m_=eSae{A32 zYLH#k{p6O(dC^=ishBdEy;2Oq{;J>yxx#>~g7#SU+E2AdxYGPu;(s48Xyw4o#NI%; z)ZOJT=l;t7CbaX)t6JnkB9vgM<@nf=r&}wLSZMH_g)$kf8Pt_?v^6-Cr`4JYT)HaI zFtA1?Q3Et==zf>sPbRBZ%&Czi8wZxLwdS#fL?nc_h>6l3npEWdo&c(qg1_1zeBt_D zIYNR&t5-pT2}kp8@I4vEviIC5hzw8ndnI1KK7*z@&K14sW_OwFxDBSmCB8zSY-5pb zZIMf9*?tLitr89$U5ea-AsB~FEJO(SnAg;UPE)v8EyGiA#80@)+wcA0SP<2Np3$K_ z4E+XG&%fz)mW#&36e@XVOL&0TF&Y>3VUcw^30wqEJ5?uBOmxq*YOp2bB$+3l6 zqILJZ69J1Bo625nx!FIP3c%}ok7zJsVb?j~oA-If6pcY>TsVBtJ;m)a#Nf04K>oi2 z1;TSJ5CP@|`=0{%f6Uz#h|C>R0{2mi{7bOjf6~)unm@Kk?q;QlXMd2is*}9j9=I6R z`Dz&GBsIv3k)4|smgP|4n z=#EPt$_2M(d!|zLm+Jbp9$il+W-TYGtJ(rWXR*e2%dI11GVlDp2F;jOmA&oA$Cp_7 za+{#}lKa;&t4}+Wl~p|l@FlQpsuN{Z&;cr}jGRT*?xr?Xt0;*w7zh?)pnR>BoR*%>jM1@C{gqMlZk)w2zsQrdR4b|IhB$Q+yIgj!TzeW_O>fcu1$R;n6cVrOOkQF< zSo{ncprtA)O(jYP)` z&TXnYH9iAN_9wIbXWs5T4n7V(UcCk12X>whi-oFBgx|mZz+=F}?aHCH3=lA=upD+! zc^Lw$5#p2tP0%Zcu|^MZpMPpB;Wey#fW(mO6jD~T>8r-76ipoNu5+!<@_1DVQJYaG zd2hhi(T>Kt_(MmJ7B^vyfxOan@PWqJI?bv zBVaDKZ_7(=Q7Y%}vyOO*PTJtsXB8p21(3@&ojIUS{<4)P7M`hGa}q^`pmyp9+UL=i+5#qt$WzMJNEDUYVRhS_xp4XL!Vp0 z{*K;GAQ1ftg{@vMR~P>0u~rO0KzoG2c>fG-2NC&6Qc_ZLYimDxWeB)zmA$=RWLBtl zNI%Xm-W6j7o>QxyFD)9kl9@}?k{8^<8e8B?-4)uUWtZ7CGz3lo{}@O^{)VdCMZq*w za2A+K4CQqDG+5f+9pBgB=Lh~1ORvOF%wh&|BvdU6X}E_rHHkNIvefO4<#m}NGrQHWetMai8UeH@dW4a#B7vJ6t6Hh5{ zuOC9RC@yD{x*KVNSN})<1pU8_d7s?fCwr#`ri|(#_}(rxT7<+?&2L-rp_W@l)Nf{k+0)Prgyu-9ED=_(y@3mYe1-Ly z@u6?TmcTL1V`c)5N(OyD@}UBj!O5IcuPrt-K$2FK zx=I`?@a4&&r?^yCUHqtQ8N;vg45jodwsMgg=cd1DS;drXnQxUEpq89dqO;Ql_|oZX zE+_|%91XYSMwa~yP@fO;)t*JyP!jJE5q^MN5oXa-XJBBoMzCUw{gIQm&|+Z0seU&z z8+#Zg{FoIz;>2F9^hiSFE~**0@tIt44!K3=aQq+d{jk)M`G5D48y46Ad)C<<&;SU^ zFsNK>cP9|{2iY}`kISotwjL74_ioSZKl1&!C13#mj~3u@Gr#RIH1>Gb;4xw1B4$wt zMdA0|vdA<@2Tn_SSu$?778(Q7x* zn_=v{iNC9?)FEa6>zg(|ebPmC6)yi|?WjoQM#pKplq?^IdZUz>y@@iwQ^a{NXdh{e z8w&IGul|OR>Ozmaq@XJ}V=5T1S0$GmesE=>nTgd3$}l%g*$ zAYTt8N4<8bQBU|cp4|2P-|n7Iy5CPQ-j^J4KCAM_PcH332pJS7XZQJdyJknPr2QX$ z{~pLaS>+F6)NWUuC#}}nT%TVLg#G(2U`0M+KPH8bvS3N3$D4iCK3=ll>}5kinxJln zf}FM*CHfU{x_RsL5sm1<{l=>29B{MLle7M>om|Rnn+V^eyJ8rKo7%L-PVRu*Mcn{TphlwnZg4L1yo^si;U!HIUO0OO6vx|60OqDC+$}B@0pm?F3SZ zDrIi$o_Dy@=*=pZfhKxG9+ZGzzRnt!looLktqa*C1UgqK<%30nT?ljRnIYx~Y0VI- zG5o|KvGH;BD-QFD;|RpRl@_xduR=*Bd`T0=gSQfW8_A=?FIMeM9#Lh|nN= zaq#oG`@1^#nnP#T)3|-s&?j-)=r0n4kYr#2z-Se5hrAY=5w9wmRmNsJ0fJq(~yC+7JHGPkx%X zilHclb?8(4*cRzcJ^nKhQ>u2=aR@ca`p%d%aX2**?R8)K!l@5;7$N)?QT4rhF@Ub( zvHVSPZ&ba~5*e=^<)z!bqJYT6j35|vC>K-j^zy#~;Noad`(s{-Sd`$_o3`>oCeTf# z4cBw8>bQ`Te@8tw__ztZShnTud-MpLyikq8B;W}*JLZ_0oG!SB{6NM>f?60S3V2?S z5YY*fO=nVTY+^U{Mtw4UX!Y)}eaZhjy@ob-KAp!YG+~7Z>Zdz;ffC0kHNZh3WM5yo zurCJ1p&9?+%y z$D5CflzhHVk}#xxyrzFeM|4`@)0&x>uG9Xq{)_ANtY($sD8et=UPy0x4-tG8oG62) zly!91mGW4%A$hj0SJ)Eg}*vRX7>$V)~ymhH=D$tXs+%vi&??tkHm(vvcyTY-?FIgtc(L$l` zzU9GmvG^mq^9C%oykq9W`yx~5xKs0AC(fz@=OCIaDcTnZc$uDC2C}7broY1Q@G@{R z$(RYq44j6+;3hq5xbC+9)>=j+>z+$u3#RA1FJ7~qVQSYwdDFN82@?vpaB|KUZ(SSi zoRb|Jya$42M;ac_@`QIkS;_xJ)GlEcESBDqY8Y%R=8FRYUBV*Nnn(YT$|z#pM4V+D ziS(SbxpFPsNcWtbeVZb={Mj1wp0|a9`E~gCvNY7+TY*{M{|<}L<3y?DbtdxavLE#W zaKcOt4^HM_4(FjQpjGdMtWl{w7+UPU<_b(}t|2vyE1Bm0Lxiz}G> zeD)FA0KvDdWVlFk^+KUDkx-prLHvRJOz&FLBZ3hH$DMa?J8=y+Y_|nzhdRJPgNv+D z@$Y*R(;lE0j1OJWu1>BLmKv9;c|dr$XYEMKzq~s7*KoJY{1X&~-c?n8HViecjukB; zDH{C20z!IVH{e)!{_iXmNR>b4Y4D%5=M%Vi=Pq50`K4s#296rl%JoAO(DkBw2 zCgSao#F-~Y%%u*O`*3CmQ#Le+f!e1kh{B`TJTqm^j329P{8DkuV1KS9TN6c0EJ#o~ zZt&Oru2^*i{Ds`<;>1BqSudT_)kO^QM18?#){g?!ZG^(0G`op)!`%tcQok}okRR>^ z{@=3KOXXBoqk?8@lB%kzI`kuR8}5$8TevV#9%lQV^D=1HVTL3g?2P`w-p=ULnrrE| zFn0cdi^-QAXJSHT+e~+gqy+N=^Q=hQ&B?I(eCE4u;;(z@Jce(7dn(t<^RKlq+D>AP zZL=aNG+|eeGfsbz0xKO+J)Qm)({Rmi15AD8W0C+fs2m}!_ZeJBbZiXY8f<<^l>$3r z-m>8S+$oGVlTou`!*8e&Z6Dq>_z+0Wcz$YHMk}6~g%M8&gfJ7D<@%16JC6(SZUd}(V?xmqZ0YQODt`}R zMw)Yp@9&z}gLAQS%Y!cFqu`mb1C5o>ltUUJjIF~&X+E;NNgHvXA91p=JfG&JH@0oU zs*gC+9ah>Yw}o@o_N$@~62IsO6@EWpX7PXbc|CXU=FguD(Uk{ngnv}P@J??87JZG+ zlhfEAZq$c0_YGk;aL-0GG>B|`aP-@3eC^g6&@Z3+A_zg*LgN4GSfSsUZga}q^=RzI z$xKW8l(-DsVSuaQP}%ZS>p`=>Qab$fHy@xoKD66s>y8(zi4bRdBt^d{3qD zHHpP@j#X;R$)A)Mfcip&Al=5Uhd;B1knXKOXca9IiI1CPPP$Z;Q>EE^rHH}xCy5({ zO&7m7o#a}gr7Od08Q{yG30$@?ly3?-nNB>TJLmyW{yAPcB5ih$Fi$iQlsq{iWJ{r! zt*v_^yo)L3^I;p9jiyn}#5ZuZ2SDvOF=QN*L`k&z`)a|K6gDXmE6>;T`*f>nvw1<=@~aa`c#`A3P{<7dPn;|F5f8%6E5J zxP1hsUEOzsL`1q1C{hPGA~WUDU(mH;dc#jgKpJQ-WhKCe(j4kppUcwQa||@-%a47< zOwkj_&PG=+ob%=V8Gyz^0QC$wKk7{9V!HTDVPi#VEe0(*iI@mfrvUcn^#i)A7T}cs zv?o$4ZG*JBr=bQqI+1mCY<7;^788U8#l`-4wa^fvuTM)jSKD&cn-OvcJAwB8h(&mV zTN;r3$H5FVGCYX^cPA=U#niR3Du?K48Zr2Qx%2_P!uZ*f5t%Hn4if9gn!iNhw$}Ac z4~MiB8+8~F+9fo|vNHqlMKremKtSBGR1*!-+xzv>wGYR(Mn^DqR1}^cO$7H- zUh7n`B@?Bfoq;89?wTnm2Rs9SW|J?S1tzUc?ollnrT{HvHp~X2*dRSMV`1oIXFD6L zdPnOV=r!~3GyhvHy)LR!P<9<|$==!=1OdTW{CDCcT8>-g?_hCfGmE5g88@?f_(KQU zsqEtqhLJIlSz0pUlId8TzTgbn4RFjKM>tvzN0N_cpoMA|T(DC{AtQwn@`jjevIC7C z>v-a`SzrJifwwOsL?JyJl%zrW#Gilhxnbo{E_z{;z{s*Plf|YV1a$QDqNR_sMG7WH zN+iU>$E4i8-5aqx!?FDbH%3EIcr{uKJ_wSaE6a#gU;7#Xd#oGm!S}>K%diVT1hto7 zz&iTZ+E$rR<(qA%)l~^8I7SYy0fL z)4k-?+<#8btwVMYKNFC?{FaokV)!@VYbv`tQE zd*RmC{E?W2U!dHoy`kAH#s)NT)*~J6JyO#l%}Vi$Tbm!{6$Oj2?eaHp8h%SEmY&Q> zF=K*DnSR$2si*JY*050A@?bm72PT|!1P@_;E%svTpY`b9)RKl;6Lk>uvrC9*V}hJ- zjMi#DmE@S8-+aB9?2l?a=(m>ByBpN?FJPOX`V=?!@t7{@oQs`k%B7Lnu@u&G))dD*12?oy4tWB=h+8Ouc`q>amL2$ofM{4WkT4vL zjg2j|#~?^v1#W;E^q5?=GO^K-i9ktA{d4~B7@?g26!#q|PdnAPvqe;F9EiM4lzy-D#9xAPwke`B zJwWeW?epNUqve4VL(4YZSo^zTL2}gKijfGr%=h=0Xl+>h) zlHd64M32tiGQ$?=_$Yzg)ZIyVapnOlnE8W6ogY&nI1kpaS%TGSn^M>94p|wIih{6_ zRQPY-cgO}_Lv^cj4Y#%8R)D`Z8$!hq8!O#x-%aUR1n;f|ANgYQxw^npyR^f*=fMuF z@FTd>jnmFPZ&Dy!V6GGh^eXE(rd^1TlLq;bRwhTOe?C4e5^!-W)cpcqc1@FuRh;io zd0)YW>D)E8ak?L&AEb*)I3=C@pZ*zaJ7>QT7F#jvG$AoFX-C}}B|82ce-ICcsF$@`g4?>R#aQez zr)}!E6F9c9cKCbH{Syz!G|&nd&f{PQUlUCnKObq#irS|stENS06N9D5-B9U2lEUBgorA zvpy-S^?drGMzk0*H>O*F`MclTne<2 zcX#hK;pt4lI%8++9r!i|Pxc%OgrG5`aKB^IBJwhjpjMP}onEkA?j9YcIk`<{UI|z$ zSTav8tVzB3_gxiQn@d5 zUpHYlq!kq>&^({b(#1&M;eO@Bc5}v~!w33(0_E@j2b95O0wjbbud_kSqQL8Ae@2~B z(E6T}qeS{MWh?=6Oyt%0_gFr{NN+ zW~Xux3ASW6icKo*6Y(4tzZDg3W?%qz(tI)4OQbWUY!HT`BzRmNn_HhxO6( zaVQq_FS;)xKGkW9QyH)HFe7XxG<6z|%Q>r z*4K=uR6z?As$}z?6%PpJjz{u^ij`mCH%vpw2JILoVOY7#Hcs8oDrp)>O3gi1fGG@) z4Q9uw_$_i~aDwLA$h%HWR<`~KD8?vYGDEMu-wpj(7CVmc<9qPPKP*vU(hp^`so)^c zLnK-o#TG6q3pzifdRl48pP1Q@1taH|mwPkLzm)2p&xoa}=Hl$>Y35`5_A{>4>-p+! z<#`!_x7ElIMv`D};zxHyqhbvQ{^R}(1fk-Am{(J*=rz_WtJxOY%<-#{?^!SN*$B1b zZ@1+9#gPEi`~7n?{8*xa_J1Ei(d8+Qr2*!yM$aLLmlqpdI7gm^Jp1Y`g}RcVp$Vo~ zT$~X?dcC!780~-haMP^%f4`>Y`-CYCFJNTyI8*37XCWs4WLu zYIj&IbXgH*33*%!5Ml-24LmH)=*Bt>!Oz=Xh#SZeGs&#Gao9KV`Fyq&2?$>VO@oRJ zWwVfdjWE=S`2M^^k2jG~h)Vw94j7cv@4fMVXDm|u6Law~+@0Ie;=m$2!^Ta91_Zr1 z!*|yso1r|QcS!sdJnje)90cWH$iZcY4LUqnBcCv+6&=oAk6^>StUVuYvOgd~&4XXAn)cOyRka^vNz4&#O zPAhff#1&|u&G6jD=-g`JzN)mp8$vErZ2Y9)2j;hL(LlTlX`R|(YDV=|$W`|b9*m0u zOCcBC8}Kume0GcYwyOC9eEFMt>@9KmUAbaEHmiPobJvOgogR3W)IPnc7AtpP@QZoP zK~O3RFIcJ@**hI+f-7hJTCqH6yf`T1S(t2PbjW8QXTm0LnLw21i)4ace}MpfTQIt< zz`~$Z(Cohi<%DyQYT=)pf7~{kV+BLo$~s%N_E#KwaqI@eiDBvLY*+DP`QRnSXv+Bi zDhQ8#DA2x{MoIgg|IkP}x%(?p%}qF%J0!&5?Mu7B_)cM-#SZ=PZoeTZ<2Wtiqh>ZH zW~hvYCMrymtU|^54gOaSNdY4L?3d5N6UiJRPz22Xc{cm9^TIclV#nV%F2|iOGnL(f zNh%sIGIU4^^Ec8k@Zv+LY`O1LRhVj}&v$d>l?pfmc;Wd{2k(X~`Ijyzo~CI&WEz9Z zQ8X=h?TA+U>Sd&I;H4i94qVGj9s(XSF%= z{n=_%zjXQLopfA=Fa!=$3k)}7YK&SK%vzN3Y_54nn=N!xr7v>eg0|`2UT<1z%>EGH z?VZa`olVuSFJgDh*Xr(&q;eoxcL8A)fT)@8ub0W#6Q#Fix{?dl#hMA6 z2y$wf{$EJ+-e48H#G8H(pz7atQ<{LNJ%-EpYGzOC<(R#OJm{qRim^cHolwe*mu3HL z!H05H$y0&Q5~ZJnb%}tqw`x0wdMsm-)+L8SJ;V;;qESM5{&+aceZ6l2nBDVRX6I_{ z!Uy*2*TLYY_~cgjz!oYH;;u@OhT$Ig+^cQW0C|J|fWj1<1Ub6xVhwor$J@o#f{uM} z!TuSEQ(Q^0n>z-T{O-LKw2ArVb9?tB%6+RHR^m178h?a#^@PQ&O$jn#qc26g%yuHu zbrBBlB4Je-XApjMphym?0&Mg4nz~$zUKS@=rerIm=+D>A5gOdkT130SmIPZD!s>yh zX3e~^V>tP76mM0kh)7w7r>_ST+=A#Tvp*@^p%#9ugt@Ql{@mYrQC8E9P)R%>wRSf7 zm{7PR6#fOB-TsB!?+itt(USI|t+^aMZmUx!^H7~0NiZreL3Oq3(oWZBOQ1ssXQ*_7 z6otVbAC{}SXO*{}<*kmH{I_avA=EBj+?K{->iOC-8UcjjNF(`tZeHW$fa9_H1%WTWVkObyBSK6-jl0*ngBT9#`c?g zDPf5H=~wBO)IWZr2@#ZG5j$sme6LjYlyR_NjXMp)*qb&WWb9>M~j}{2pp&dYd z>i`0QJF)(+6j>hI@Gfp{e!IV302f46Q1V$H(7OJ>;1QX+S{Z^nf#MODfnQFMe8*VX ziD>0FLd*Dp+_-zs7eSa<3W8MD?MMwzL5CIVu|(x5h6hEiaEEjW>~%RW-Z`+ohc{0~ zGT(+)<%D8`IH*z1{BXv{6~6r?i3ysXRn}G=n6~Py#sDcm1FN*+xQwx_V@~@68EvNK z&qcj7h}mu;!6n6YOpu$W+t1~iNxh#N7ayOU7cZad4{ztlD4NmO5A=R!^nD?$=8IC+ zWVd@-=4SO;SLa!@&S6*@DALUCc~<|&VtdMq>wcA@ti?xY1`l5Hu6Ub@k^xst#@-ub z^&9&lg7-E1bZUCWf_%ElP)obw{;hKX4uwN9?u(s-{kR})z1 z4mz0UAZXI)-PNGC@jyvbB@_``J){`ev$eqDB_^VnH}nVQZVjE|B`*V>l?*tP35D;C zWS1))^B4jTQ$`0gnr2sWdg-+Xbr^7kd^|FQGuZ^lSUliAIq6PoPIrtnes`vG5Fymd z|2-`Y4c8EgQcSo9TRxQjzcP0eil);Kq=RNSq^GABX6bvOp_;p%ICt85Ew>v2%}hYU zhy;AEAhrQcpR#Yw_1x{&jtDqZL=SX?M<5}}0vHJ;g{IL(?WcY=U-7tgcVhklc7z`% zQs-!$I<)Eq5QpZTz#YNNu+?7`GW)`>5ixokoViYMQd4EU@Q(34h($5VN*dTOE>!CT z&)WdW%Y6hQ=!Wv{rxbDDiM774w+sm%UWAIX#wTTk8s!g>Sh}Sqk#2IRq|yhvoW2*lOktwKJWh8+ zsmZ@-9e21tO=lvMt+;!M6N4f7s_`kNpe(R$kM`cL(C}P29OI*AFs9fo&9qQ9i(#R9 z|7wlqRU16CHxZ8y&(F*tyW*;0Bg`d_MjUx8hHQP_>ux~cMP4G)if7d>j~etXKe{xB z#s~$E!_8*UNguH5;`2ek+;dCwnB?(Diu(nH>*;LtCMvz+$;gDa+)T8y_&(p}z8?Nt z4e9y*)xm4@ErZv&#$l_ko{zY-6$Ao5#6LMa*sH_**zIxd4GDYu zi{US~n1!00$j(gK0p8tjg1Q_JgfT6E=$7%a92S|K^=mSsjBACvyTMYr(Z9&TNNVm9 zQ|E}edb|)h`$sBl zc}7W%pwNxCD|ms2vDt6TWj&f*PV98o>@{w82o)=jOj45_xS-NTAyqk}@9Ze1@yPNp zyz!J?p`LWS5JU+N#A{?Kz}81mbv*9c*WM<5oyrxhUux~jMmPdEUB_o-K{prWR|6xB z_V!w~)0s&Njj4j}IWP+rdHIy~Q10|0ndlpr>&f_87Y_WC08l@CsYX>9b^laLQY?0O zV(5G9cN^7eIe_YZ6Axy_p-iV)cQ4TRbab=A{m4aq=NZ%swP80Z=WRlOtdhi#;H z-`xHmEx<(M4RgmO#QnuaY*rRA_MNYj`Uz#dDSB_ijN>ZWVU< zg1smUrqtX9G`)+!<=O?Qp-g`Sr~S_1I*~{Tfnq!IFZ{#9+q~97EUWLWEq7J+{bu)D zdnx)q?c|0|LAcP% zy6W_nG{vBC56iP;)nf!ujyD(82#S~x!5rozhm#CYNkg!G$9_FW^&g;@OU`L-4x3I` zoS-KOmSLalA5bx?foZR?m}EL#?u4bF9_wj&;x;_q4KEpy*^U9fTjOhf%Wr!PGL1fH zsiqC0_<{br$O<>nEJOjYc?55C()2^?X4GJ_PO3H3@AdI2_!U0o2tM%fD+q@80i~p< zK1n6^|09(kgTUb3*mCo;Zf>_`4sNb+;Gf@_pSgKAXK^~Se)@TP^N&o06D}R-`+T)~ zJD<#LVdsS~NYCs2CFR(nF5Rgqt)CYP;>X!Kq$`0U?Hd93^IN=akQW_KU+{H0NANfy zZ}!KAqG}6IU%OhbNf)YgU{k(G7^Qfad%%PN>NBFdrS}j?7FR z)mfx@Ye}m?%P2g~FNLkNaG|cY>ju#Z1nW{={6QyGx&fYJaS7ooc;9Sg)^u ztE=SlVi+lX>+M*ozf2;i8XQrfSj+&GS`g)Bh91e#Pjh@sn0vO+_GqgM_8y@T>-xg) z*F#<)$VU8r5A!n!yyToCDwTx@CzBh8T^a`hUHG1)s;{28J49KnKO{vz2GK$>)Y?72 zNX`Q1B_2=XcY(?d|1t|}&7B%N(2i5;rp?^fI0WU)-@UA^L{Z|WwwVXND@B!; z_YvRfYMgZ@=HjF7c3)U+zBbnF3`B=L#s{P25pwKmmv=HHTuwch;*!|Wnm+SF;!_y> zHe?wfr21b1FOi+fxYz*bl52A5^p@4Vhj^b@(SM^otGb5-ia1pm<_-TYyM z(UOr654SXnjs(4l)RfoR3Qi>nzM1hdU`nJKAiKVqf7wRxm3C{S;o4iMQ{sko!~yL|IkN z$Nrw_COCo}tYU2zp_M+BJB%|vw=7G^mUb+~{>Z9z7KkzeiqUHpXH%wY)r{4db7cVY z!YNM>lpIw3P!hQyBjj*<598%XN&pv}ZF63e`t7`q#Gr_35-|t8cf@BUkPsw zQM-l!Vza{FL-&U->mUJy{|4LO|Mwva4if2Zx%f~N%a*?dy(OR$rz@tc$WC7H13}k& zoD(QuL!VIiltGc;VvKg{&dU{c)>aM-6Q|Q}ZkE3!@_FWSP5Qeqw4RnDOUiXa z%BwrUXPLV3qDA==`iVI@n~^W<^kc=YTJ+pnI7kV@Nz1fVbcGNO7+dgns1yc& zb*Q!2BE-1kmYmPUC*~L$S0$}I|IPLH7RTMQ(ukVWn4X;u8l^xkv3sCkX2)We-pi$= z#?muFbX!P#5omqVVPRP7J9{X(&8b?E&^I0n%sO8CyX9|T@-yV^&=xVsDA+%Fdk)lG z30;+lo_(Z6FjzthvcgYIwwDZDi4d=Z5zr;6HgZW0f#yr%ii0NxjR$0EBI6eo7mw`~ zre=m1uJ%SK6a4Np`g)`_4w z0*Sr?zowBZYC#CnIpWkdM_SCqKXIb+qGXQ%UfW<`fGjrVK>$5!q|V`AJCqG3`kG;_ zSIPW9yveYm>3BU)TlJTewMXOvg)W4hYhBzwg=C8>fj?eiO#ZFYxww18Ss{}3?)^-U zL$Q$Miin7aPfv?vm9+ZiXvH&aR|D{G<6qFs0&yoqug@5wn3UgH+UF*Gca>alS69}I zpxZ|esI4wxd(4=ULjm>k3mShkJj#a9?BVI93m%&J5ywm$EFY!}< zTm1hBdkdf{-{@VGmhSHEM!Fk8I;9biZUi>nB`F9fuqkB|N=tWlBi-HIbwBj?Kj+-J zXXeg0jKj=kfA9L%yYhL~>Nr6~DQZA<{7NvHr%=VjiHhTJ$xyz1IIZTh#tH1+%QBrQ zGm}0+N?}3?x}gMojo2SaIVw1@m_S5t5IfLoda3e_VpB@CfClhc{WsC7eEe#U_6D50 z@N~_x7zT5b_bRP$XA+Kd>WoN!L-zN064x~9bekrM-g{~iM(Dc_Qhbnpr~fl{F-6mC zXN(cWW{-tpR2jd-C%uF5O?BCcas{;Vkg|Yl5m8V5FV_A;KQz7TaU22t#YiOGrEs9A z6Iy4f;+Q9Yx$)(r|4t5NIK#d|InfRx^A0CzucAkusxB9+k+er}G!B{2m5;lH0Nz`s zGOF1e*G^w)WlSU;c!Ff%gspM4iNf`41{meMWN!ez^7^J-9em>az8oxP}TKBJTCm5s`>W{MIWd~p1Xgmn^ zVgF$0Eh?XZbAUX|;zG%yE(=-S(0Avy$SZg~<;^gsjlb*jO-caL8h2W!BNM~O_a}6e zh?9$bK05KMj*6!EY~eWq^rb_Vv9)xObjb94)Q^D_^V$B7oIjD$_^s$a{}f7L^T83T zb-vU+YE>psm6prJQ*J`=m<*d`bOeA1^L4+khz$phtBMT+jK3A-aLTS%J2en@D7bd! z?tFEGzcfw?$Y*Y?qw}z!w=US{a~{Q!dri!f%c7Wf=amF6CVN)+!T)Xb7tIw_51F!G z?1Ln*IIcf?mHr64Z_b+QyL~fgP#gacl+Wp#$Y@13x)r{d>s$@vfH}I)usy2=F3MSS zdjHsmIlcfuhGqr)vbdob?^^Px+DQ;QqvmGDK%G-I+6hUflEotuZt-z}(;?F7DXTY2 zzixn`KT+f3yXtATA!Fg#d5dGI$kW>n!xk%?Xzue=sw%L~$j$|VA z=~JeRzqFC%JCa-`h+8vNA{-K>hZLm#Fi70fQk#~Q;%z^i+De{TDPx>5CXkAqZas15 z_N=6~ml1SmD(nedEHc$^Mw@kv4f|-P%l~vUh|T)$g5bjabq*y5#<%?TiLuze%Hf{J z>xH1cJjJo2_zJ-cN2t7t!b}neP8s#>soAP{fAE)r99C^vE5sRflC?jM=59ZG-_W`V z;=KAs^DyUzeAufT{dgd%N@$j;-}z20BiBXf-iJ-d3TE`TbqMuXes1}6YxNwbJwCj7 z6Aey42g@nmkU~AR_GBcn;T%l&WIw~g9TF!g-i5_GsXlZFyvNlCu_RrBmG-e)Ws?MQ==X4MCBGZFO&bI(m)~MqQzgOOFw9!h8k@CpwGguiv|IS3 z!5iwHM0VJxO4*kKWbDy=6qd|8gh|rda|sr@V>iud5PVO(U3}DmGUxA^8rKHC^dInM z)uhyYV`C7|4z4@-*qFIr>uJH0XCc8O=c?n-+33*D;{o+KDOF5H)rka~)78u=rP=~QzC5g^XsjA#U(TnmAk--Kdt>s=!!QYAs61vYrnkG zm7mXPJ}$cko`)g6i=gCDq+d?C)jvMyLsrn(SA4z|6q#JZ0oC^zPx9APA;OBfkSY%+ z&i?k66~9&g?`-YV-WDl%bWHdvX3NvKTdzSyhZLvHvt(108Jbkpo5Dc`@(VhDa)(_eUHgC5(X0MjH)DElV5n?5jkE?`tz z-8XabRNlhcSx?K$8};Baw2q8?F+>qwVMVi8gqxK0Z7w!!*Z|ZOudINysbL)al{IFu zZb@sd?5C6TbqLKu1?gYILU%&tL zq1M>hDNe{kVeoVfWiWedv)W~Y z@BZqoM;%1})&}0=yHFd`A%n2{#mxh!kSf)rFWhFBpultRC$(j={Zg<6M4=Ksvq|!x z*f9uFj$Zf2IEHON(q$Gg<3ey|G4rlsB9#dKo42z2D`os1l~2JLGO-3-WHu;y%{{FJ zs6|H8D`*;}H=Oc^HV2lwxbGl*zF3p)#D*y1O|9L-R}8`hT^YkmfN| z*Xr%|N!Igi7WGcVR#w@dkP4y#nqLNMD5^A~FXD?r>-}$qMvf?dKP0SI=g;yjJzeju zIIxq5^;@ABxRdV3kJNmd$TG@5tC#5yPT1L#&5i+XX_`|I{Fyov(MPcU(k+d|=kbV= zB%d<#3F71ww2qJben~X9X0Sk)T`DbO%SRgF%ut9~BNyQG7aadK&61aQDeC?;zhlZp z!D*JZa`7AkhxX@s;toKLxkN{E&GKD@x22;8Ipfk5GAmB7X5cyJYHrv2q-tBf0`=2p zD+oM_OyxL#g_>GR;v%2wNV>_#eeS!(zrxKX2jI{Mti);=wn3TPghDhKc$`c<;b*95 zi^ea#ru7; z(J*L;yRPavg&x$8j8xBak{_zUP$^Ay*iKCkuOSPmU%sHtZEMlf!>wfkEnY7ZDxzgI zp!4C+SlT>j^k0c6w8QMD;W=NmW2uZ!@hhUjH#hMVkGK&AGy)5@&Z7KCMjB}m2JWw~ z2}uhX+=M1#kgSRl8C=AvJNg|KzWJc>jngE4vq4+w3?lQ|AL38YR*RdRUJ6>zM4;c$ zf2Wt^^+U@|F|kx(`n~vh_uRZ78}nB3oPdV%?p7vr2-;eK1Ig6EJnu@ft~}mlm?ukG zn)y0fc%B0m{^buQ=Kcw$3YByO1luNrPjycNS~%(+VF8 z>~ps*Bum^{yoIcJLI%$mi~xTrhY<8HL9REf|wDpYN*05MiDWh6=!b9;WU~g9&+>s=_$}5fiYc6a=|wFL zWVPkBJkZI-lZ*Cd>3juaMw$R|#=572g@x2hnH2WFGO0CELbgeR2ieuZVn|AgjtsBx z(Zf=Q{X$A&_ItS;G#%yDowIUuG7wTZv72p=ocbv&n-GcycQ?&>jb+40(!9|NW%j9ohe1i1pr=8*dou_Vo#^UnnVBEQ=-M@OZP&dcu}c4f|Wz?L3+h6OBoP0!~!Dc<|QRT_2H;B;oXkWS0ovCD(N_{`CJPi z${5&d0LI${C7^(}ojy=2LUs3wzLkUq_aj41KoJCT;j{LJ>81)xiU@8JKcOGd<4;7w zX8sU7$#^ES5KOsi_*@*6hofOEjUBj6HQ)^A?N@HgQ85TN7Zv95ORxJLx$h>N`=!?n zy0koc5o?g7N+8@LusEzN;Mu>bsye4mwe9j+Y|v(D`^#+Np2jRx{NRiNqUNFJHzmoC zX;Us$_1!4i6W%a`>M(ciqEE8jg*D#UBN0Oe)vLF3rP4|)U7P&NA+EL@1d$ad5Ib}w z8hKEd&%*JwOf5tt>UIqmWzMf$#}StVvLi&ak~lB?V_9?3;79X?AU>@g9;tm)_K+1N ze_uOwI_kN?MN%3h*=G+YYin|bB)iM1Y?buKPSO|!J8^%tiRz{eM zW~ScI4)l6@gGukm9c;C}YbrLktK8szJw{JYGk9zC>NQ*k{S}|QK$rmZq{KffwG`W+=A*IlXz<_6^P8baHJvQClxA%rgLGDKMxYx7`6g zD{Cw6cSN3D^|kD~7|oHZ1gtJ_H)4GVZ8Kgof89vZ=#M)O>{Z-Z)e07Y1?<&wjjAT< zq4q@I=&P)QXy+y|2hs!T#vXSJydNhLFp~`cGI-|-yw+YGR$F(!(KYFZq<+>w2r^5TpteEunV7?wf z2^@ee{IL=tMT{*h zg)N!FiQnwz8RDq0&FN^tj}pa9`D-4ZgDInS5gTTN9gtmtdo`NZ%RM!$ndQyxnm6a- znp=A1b-K4Vq*wRAhFVG(UhG)+iaA$}m-mCzHoXg(tfe1etSHy^!)YB5Ly6CQa29Q{ zku%47re&kwn(x&%HjD5pvK0TLl8%B z3bV6pD|6niRScC){#+yI&#{vp!>wMnT&Xs)@|4kwmsEPmdeH&lN~^3vhnHr2Wex7N zArl8aA@tSLVWTs4u3A|dhfxvy)++!;d2bleiuf&CS-JG{JcHB@5}>GIcE^Pl*+sml zCbZF7so`#CHW|#!BvPzfpOScEhO65PWy(B;m_;tP#aG*2QEceEa|N8fvjq9js!$;=Udk3;P^DE#jT-#-JRrCX_LH6=W z1xSI%$B4G!ljL^rnwH=%(OE1d8VI6*Y}%X2&q~5m-p3`t9zrw&XX|rC+?15{@Y3aw zZ1kA#J6@mr6Q7Ng%_cp%Vm9bE)P}^=wtpnwAqLk+t$yV@YFgUk5#Y@{%1n|FU1($5 zVBAyQ{_Lz$VOMaucObTm17nZx+|)Fm>)J0CWvMsrv4J6MVHaZ^% z1^fBq;)VB02DR|H&_YpO1=Zm1%c?fXOla$nU_OfR1!5;P+IemJBBYZh#$44cFC@M% z%BRM@4)7jLx63!H&-Vdof_7WL7(vTcDbq5{6E6|Ha#whr61^zU`PM4f=ZJ_^GYNzk z1g#20wt*&6U;kEzBoKWGp%rUP>fM=uIXK!G_VyvbUSSr=j^F_fdB&nuFNTDbGBbBD zieoyw5f+}2Bs{cq$j}Gb54mVej@+RWH&%2u7SvW@Q$L&=VE7AwCIXK%(|(p! z`g#Tq#{sc=s-FK>5T+Ctx^KTC+{{N83};V0-+v3sez@=wO3JKd-NX*elDPSp|9jnh|>leKMew1R@xPtQ`5_$DZM6d-mT%x zPr|^qUe-7{N5F8j?gGAV;2g-{USuEgIk05^1)cxGGEz>j$(`5_>#&v7aTKGD#uKs! z%43v$mhv)V*&WdZxzI%jkW9ELyl?qb7R;Q1n*W7>~rmW-eJDKHkUUM?p*w7u34ulssFwVth$(uhUHFF~g>GvA3F5uDlZj~y62H@|c zgnX%BS0mdt5t!KF`MP9uP2esa78P6t6IMpE_tlS-Ro|fiI6%0D_9f^=EVQL&P7P9K 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 { - logger.info(`Server listening on port ${port}`); - logger.info('ctrl + C to kill it'); -}); - -export default server; diff --git a/server/jest.config.js b/server/jest.config.js deleted file mode 100644 index aecf64b..0000000 --- a/server/jest.config.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ -module.exports = { - preset: 'ts-jest', - testEnvironment: 'node', - modulePathIgnorePatterns: ['/dist'], - moduleNameMapper: { - '@iftta/util': '/util', - }, -}; diff --git a/server/package.json b/server/package.json deleted file mode 100644 index 98cbdc6..0000000 --- a/server/package.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "description": "If This Then Ad", - "version": "1.0.0", - "private": true, - "main": "index.js", - "scripts": { - "start": "node dist/index.js", - "compile": "npx tsc", - "reset": "rm -Rf dist && rm -Rf node_modules", - "build": "npm install && npx tsc", - "post-build": "cd dist/ && npm install", - "fix-paths": "cd dist/ && sed -i 's+./dist+.+g' package.json", - "lint": "npx tsc --noEmit && eslint \"**/*.{js,ts}\" --fix", - "copy-static": "cp -R public dist/ && cp *.json dist/", - "build-local": "npm install --production=false && npm run build && npm run copy-static && npm run post-build", - "build-dist": "npm i && npm run compile && npm run copy-static && npm run post-build", - "w-typescript": "npx tsc -w", - "debug": "nodemon --exec node --inspect=0.0.0.0:9229 --require ts-node/register index.ts", - "w-node": "nodemon dist/index.js", - "dev": "concurrently -k -p \"[{name}]\" -n \"TypeScript,Node\" -c \"yellow.bold,green.bold\" \"npm run w-typescript\" \"npm run w-node\"", - "test": "jest --silent=false server/", - "format": "npx prettier --config .prettierrc --write .", - "pre-commit": "npm install && npm run format && npm run build && npm test" - }, - "engines": { - "node": ">= 12.0.0" - }, - "author": "Google LLC", - "license": "Apache-2.0", - "dependencies": { - "@google-cloud/connect-firestore": "^2.0.2", - "@google-cloud/debug-agent": "^5.2.8", - "@google-cloud/firestore": "^4.15.1", - "@google-cloud/logging-winston": "^4.1.1", - "@google-cloud/pubsub": "^2.18.4", - "axios": "^0.25.0", - "body-parser": "^1.19.1", - "cors": "^2.8.5", - "dotenv": "^10.0.0", - "express": "^4.17.1", - "express-session": "^1.17.2", - "googleapis": "^91.0.0", - "module-alias": "^2.2.2", - "oauth": "^0.10.0", - "passport": "^0.5.2", - "passport-google-oauth20": "^2.0.0", - "typescript": "^4.5.4", - "winston": "^3.3.3" - }, - "devDependencies": { - "@types/cors": "^2.8.12", - "@types/errorhandler": "^1.5.0", - "@types/express": "^4.17.13", - "@types/express-session": "^1.17.4", - "@types/jest": "^27.4.0", - "@types/node": "^16.11.10", - "@types/passport": "^1.0.7", - "@types/passport-google-oauth20": "^2.0.11", - "@typescript-eslint/eslint-plugin": "^5.4.0", - "@typescript-eslint/parser": "^5.4.0", - "axios-mock-adapter": "^1.21.2", - "concurrently": "^6.4.0", - "eslint": "^8.16.0", - "eslint-config-google": "^0.14.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-prettier": "^4.0.0", - "jest": "^27.5.1", - "nodemon": "^2.0.15", - "prettier": "^2.5.0", - "ts-jest": "^27.1.3", - "ts-node": "^10.4.0", - "typescript": "^4.5.4" - }, - "overrides": { - "oauth": "$oauth" - }, - "_moduleAliases": { - "@iftta/job-runner": "./job-runner", - "@iftta/rules-engine": "./packages/rule-engine", - "@iftta/open-weather-map-agent": "./agents/source-agents/open-weather-map", - "@iftta/ambee-agent": "./agents/source-agents/ambee", - "@iftta/dv360-ads": "./agents/target-agents/dv360-ads", - "@iftta/google-ads": "./agents/target-agents/google-ads", - "@iftta/util": "./util" - } -} \ No newline at end of file diff --git a/server/public/.gitkeep b/server/public/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/server/routes/index.ts b/server/routes/index.ts deleted file mode 100644 index ce0a226..0000000 --- a/server/routes/index.ts +++ /dev/null @@ -1,103 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import express, { Router } from 'express'; -import * as AuthController from '../controllers/auth-controller'; -import * as AccountController from '../controllers/account-controller'; -import * as AgentsController from '../controllers/agents-controller'; -import * as RulesController from '../controllers/rules-controller'; -import path from 'path'; -import passport from 'passport'; -import { isAuthenticated } from '../auth/google-auth'; - -// eslint-disable-next-line new-cap -const router = Router(); - -// ************************** -// * Authorization routes -// ************************** -// App authorization routes -router.get('/api/auth/login', AuthController.login); -router.get('/api/auth/logout', AuthController.logout); -router.post('/api/auth/logout', AuthController.logout); -router.get( - '/api/auth/oauthcallback', - passport.authenticate('google', { failureRedirect: '/api/auth/login' }), - AuthController.googleLoginDone -); -router.post('/api/auth/refresh', AuthController.refreshToken); - -// ************************** -// * API routes -// ************************** - -// Account routes -router.get('/api/accounts', isAuthenticated, AccountController.listAccounts); -router.get('/api/accounts/:id', isAuthenticated, AccountController.get); -router.post('/api/accounts', isAuthenticated, AccountController.create); -router.post('/api/accounts/:id', isAuthenticated, AccountController.update); -router.delete('/api/accounts/:id', isAuthenticated, AccountController.remove); -// User settings endpoint (save/update) -router.post( - '/api/accounts/:userId/settings', - isAuthenticated, - AccountController.updateSettings -); - -// Rules endpoints -router.post('/api/rules', isAuthenticated, RulesController.create); -router.get('/api/rules/run', RulesController.runAll); -router.get('/api/rules', isAuthenticated, RulesController.list); -router.get('/api/rules/:id', isAuthenticated, RulesController.get); -router.get('/api/rules/user/:id', isAuthenticated, RulesController.getByUser); -router.delete( - '/api/rules/:userId/:id', - isAuthenticated, - RulesController.remove -); - -router.get( - '/api/agents/metadata', - isAuthenticated, - AgentsController.getAgentsMetadata -); - -router.get( - '/api/agents/:agent/list/:entityType', - isAuthenticated, - AgentsController.getAgentEntityList -); - -/** - * Depending on the env determine the location of static files. - * - * @returns {string} filePath - */ -const getStaticFilePath = (): string => { - let filePath = ''; - - if (process.env.NODE_ENV == 'development') { - filePath = path.join(__dirname, '../../../client/dist/client'); - } else { - filePath = path.join(__dirname, '../', 'public'); - } - - return filePath; -}; - -// Serve static Angular build environment dependent. -if (process.env.NODE_ENV !== 'development') { - router.use('*', express.static(getStaticFilePath())); -} - -export default router; diff --git a/server/services/agents-service.ts b/server/services/agents-service.ts deleted file mode 100644 index f435dbf..0000000 --- a/server/services/agents-service.ts +++ /dev/null @@ -1,84 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { AmbeeAgent } from '../agents/source-agents/ambee/ambee-agent'; -import { OpenWeatherAgent } from '../agents/source-agents/open-weather/open-weather-agent'; -import { Dv360Agent } from '../agents/target-agents/dv360-ads/dv360-agent'; -import { GoogleAdsAgent } from '../agents/target-agents/google-ads/google-ads-agent'; -import { SourceAgent, SourceAgentMetadata } from '../common/source'; -import { TargetAgent, TargetAgentMetadata } from '../common/target'; - -export interface AgentsMetadata { - /** A list of source agent descriptions */ - source: SourceAgentMetadata[]; - /** A list of target agent descriptions */ - target: TargetAgentMetadata[]; -} - -/** - * Provides agent utilities. - */ -export class AgentService { - private readonly sourceAgents: Array; - private readonly targetAgents: Array; - - /** - * Constructor. - */ - constructor() { - this.sourceAgents = [new AmbeeAgent(), new OpenWeatherAgent()]; - - this.targetAgents = [new Dv360Agent(), new GoogleAdsAgent()]; - } - - /** - * Provides a description of all available agents. - * @returns {Promise} - */ - async describeAll(): Promise { - const sources = await Promise.all( - this.sourceAgents.map((agent) => agent.describe()) - ); - const targets = await Promise.all( - this.targetAgents.map((agent) => agent.describe()) - ); - - return { - source: sources, - target: targets, - }; - } - - /** - * Looks up a source agent with the specified ID. - * @param {string} id the ID of the agent - * @returns {SourceAgent|undefined} the source agent or undefined if no agent - * with the specified ID exists. - */ - getSourceAgent(id: string): SourceAgent | undefined { - return this.sourceAgents.find((agent) => agent.id === id); - } - - /** - * Looks up a target agent with the specified ID. - * @param {string} id the ID of the agent - * @returns {TargetAgent|undefined} the target agent or undefined if no agent - * with the specified ID exists. - */ - getTargetAgent(id: string): TargetAgent | undefined { - return this.targetAgents.find((agent) => agent.id === id); - } -} - -/** The default singleton instance of the agent service. */ -export const agentsService = new AgentService(); diff --git a/server/services/collections-service.ts b/server/services/collections-service.ts deleted file mode 100644 index 99b0d4c..0000000 --- a/server/services/collections-service.ts +++ /dev/null @@ -1,61 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { Firestore } from '@google-cloud/firestore'; -import { FirebaseCollection } from '../collections/firebase-collection'; -import { UsersCollection } from '../collections/users-collection'; -import { Rule } from '../common/rule'; - -/** - * Provides access to model collections. - */ -export class CollectionService { - readonly users = new UsersCollection(this.prefix + 'users', this.fireStore); - readonly rules = new FirebaseCollection( - this.prefix + 'rules', - this.fireStore - ); - - /** - * Creates a collection service based on the environment variable configuration. - * @returns {CollectionService} configured collection service. - */ - static fromEnv() { - const projectId = process.env.PROJECT_ID; - if (!projectId) { - throw new Error('Undefined env variable PROJECT_ID'); - } - - const envPrefix = process.env.DEMO_ENV_NAME; - const prefix = envPrefix ? envPrefix.replace('/', '-') + ':' : ''; - - const fireStore = new Firestore({ projectId }); - fireStore.settings({ ignoreUndefinedProperties: true }); - return new CollectionService(fireStore, prefix); - } - - /** - * Constructor. - * @param {Firestore} fireStore the underlying Firestore database connection - * @param {string} prefix a prefix for Firebase collections - */ - constructor( - private readonly fireStore: Firestore, - private readonly prefix = '' - ) {} -} - -/** - * The default singleton collections service. - */ -export const collectionService = CollectionService.fromEnv(); diff --git a/server/services/conditions-service.test.ts b/server/services/conditions-service.test.ts deleted file mode 100644 index 0aaadac..0000000 --- a/server/services/conditions-service.test.ts +++ /dev/null @@ -1,71 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import 'jest'; -import { ConditionsService } from './conditions-service'; - -describe('ConditionsService', () => { - let conditionsService: ConditionsService; - beforeEach(() => { - conditionsService = new ConditionsService(); - }); - - describe('#evaluate', () => { - it('evaluates {number eq number} ', () => { - expect(conditionsService.evaluate(123, 'eq', 123)).toBe(true); - expect(conditionsService.evaluate(123, 'eq', 124)).toBe(false); - }); - it('evaluates {number gt number}', () => { - expect(conditionsService.evaluate(123, 'gt', 122)).toBe(true); - expect(conditionsService.evaluate(123, 'gt', 123)).toBe(false); - expect(conditionsService.evaluate(123, 'gt', 124)).toBe(false); - }); - it('evaluates {number lt number}', () => { - expect(conditionsService.evaluate(122, 'lt', 123)).toBe(true); - expect(conditionsService.evaluate(123, 'lt', 123)).toBe(false); - expect(conditionsService.evaluate(124, 'lt', 123)).toBe(false); - }); - it('evaluates {boolean eq boolean}', () => { - expect(conditionsService.evaluate(true, 'eq', true)).toBe(true); - expect(conditionsService.evaluate(false, 'eq', false)).toBe(true); - expect(conditionsService.evaluate(true, 'eq', false)).toBe(false); - expect(conditionsService.evaluate(false, 'eq', true)).toBe(false); - }); - it('evaluates {string eq string}', () => { - expect(conditionsService.evaluate('abc', 'eq', 'abc')).toBe(true); - expect(conditionsService.evaluate('abc', 'eq', 'cde')).toBe(false); - }); - - it('does not evaluate for different data types', () => { - expect(conditionsService.evaluate(1, 'eq', true)).toBe(undefined); - expect(conditionsService.evaluate(true, 'eq', 1)).toBe(undefined); - expect(conditionsService.evaluate(1, 'eq', '1')).toBe(undefined); - expect(conditionsService.evaluate('1', 'eq', 1)).toBe(undefined); - expect(conditionsService.evaluate('true', 'eq', true)).toBe(undefined); - expect(conditionsService.evaluate(true, 'eq', 'true')).toBe(undefined); - }); - - it('does not evaluate {string gt string}', () => { - expect(conditionsService.evaluate('123', 'gt', '122')).toBe(undefined); - }); - it('does not evaluate {string lt string}', () => { - expect(conditionsService.evaluate('123', 'lt', '122')).toBe(undefined); - }); - it('does not evaluate {boolean gt boolean}', () => { - expect(conditionsService.evaluate(true, 'gt', false)).toBe(undefined); - }); - it('does not evaluate {boolean lt boolean}', () => { - expect(conditionsService.evaluate(false, 'lt', true)).toBe(undefined); - }); - }); -}); diff --git a/server/services/conditions-service.ts b/server/services/conditions-service.ts deleted file mode 100644 index b25bad6..0000000 --- a/server/services/conditions-service.ts +++ /dev/null @@ -1,62 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { Comparator } from '../common/rule'; -import { logger } from '../util/logger'; - -const COMPARATORS = new Map boolean>([ - ['number_eq', (a, b) => a === b], - ['number_gt', (a, b) => (a as number) > (b as number)], - ['number_lt', (a, b) => (a as number) < (b as number)], - ['string_eq', (a, b) => a === b], - ['boolean_eq', (a, b) => a === b], -]); - -/** - * A service for evaluating rule conditions. - */ -export class ConditionsService { - /** - * Evaluates a comparison between two arbitrary values. - * @param {unknown} value the first comparison operand - * @param {Comparator} comparator the comparator - * @param {unknown} other the second comparison operand - * @returns {boolean|undefined} the result of the comparison or undefined if - * the comparison operation cannot be performed - */ - evaluate(value: unknown, comparator: Comparator, other: unknown) { - const valueType = typeof value; - const otherType = typeof other; - if (valueType !== otherType) { - logger.error( - `Condition: Trying to compare values of different type: ${valueType} <> ${otherType}` - ); - return undefined; - } - - const compare = COMPARATORS.get(`${valueType}_${comparator}`); - if (!compare) { - logger.error( - `Condition: Cannot compare values of type ${valueType} with comparator ${comparator}` - ); - return undefined; - } else { - return compare(value, other); - } - } -} - -/** - * The default singleton conditions service. - */ -export const conditionsService = new ConditionsService(); diff --git a/server/services/google-auth-service.ts b/server/services/google-auth-service.ts deleted file mode 100644 index cedc14a..0000000 --- a/server/services/google-auth-service.ts +++ /dev/null @@ -1,50 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { OAuth2Client } from 'google-auth-library'; -import { User } from '../common/user'; - -/** - * A helper class for Google authorized API calls. - */ -export class GoogleAuthService { - /** - * Returns an application-authorized OAuth2Client. - * @returns {OAuth2Client} the application-authorized client - */ - getClient() { - const clientSecret = process.env.GOOGLE_CLIENT_SECRET; - const clientId = process.env.GOOGLE_CLIENT_ID; - return new OAuth2Client(clientId, clientSecret); - } - - /** - * Returns a user-authorized OAuth2Client. - * @param {User} user the user for which to authorize. - * @returns {OAuth2Client} the user-authorized client - */ - getAuthorizedClientForUser(user: User) { - const client = this.getClient(); - client.setCredentials({ - access_token: user.credentials.accessToken, - expiry_date: user.credentials.expiry.getTime(), - refresh_token: user.credentials.refreshToken, - }); - return client; - } -} - -/** - * The default singleton google auth service. - */ -export const googleAuthService = new GoogleAuthService(); diff --git a/server/services/rules-service.ts b/server/services/rules-service.ts deleted file mode 100644 index 62b20c3..0000000 --- a/server/services/rules-service.ts +++ /dev/null @@ -1,329 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { TargetAgent, TargetAgentTask } from 'common/target'; -import { add as dateAdd, isPast as isDatePast } from 'date-fns'; -import { ModelSpec } from '../common/common'; -import { Rule, RuleEvaluationResult } from '../common/rule'; -import { - SourceAgentData, - SourceAgentTask, - SourceAgentTaskResult, -} from '../common/source'; -import { logger } from '../util/logger'; -import { agentsService } from './agents-service'; -import { collectionService } from './collections-service'; -import { conditionsService } from './conditions-service'; - -/** - * Manages rules. - */ -export class RulesService { - /** - * Something - * - * @returns {FirebaseCollection} - */ - async listRules() { - return await collectionService.rules.list(); - } - - /** - * @param {ModelSpec} ruleSpec the rule specification to insert - * @returns {Promise} the created rule - */ - async insertRule(ruleSpec: ModelSpec): Promise { - // persist rule - const rules = collectionService.rules; - const rule = await rules.insert(ruleSpec); - - return rule; - } - - /** - * Deletes a rule. - * @param {string} ruleId the rule ID - * @returns {Promise} completes on deletion - */ - async deleteRule(ruleId: string): Promise { - const rules = collectionService.rules; - await rules.delete(ruleId); - } - - /** - * Updates a rule. - * @param {string} id the rule ID - * @param {ModelSpec} ruleSpec the rule data. - * @returns {Promise} the updated rule - */ - async updateRule(id: string, ruleSpec: ModelSpec): Promise { - await this.deleteRule(id); - return await this.insertRule(ruleSpec); - } - - /** - * Evaluates a rule's condition against the source agent data. - * @param {Rule} rule the rule to evaluate - * @param {SourceAgentData} data the data against which to evaluate the rule - * @returns {RuleEvaluationResult} the evaluation results - */ - private evaluateRule( - rule: Rule, - data: SourceAgentData - ): RuleEvaluationResult { - const { condition } = rule; - - if (!(condition.dataPoint in data)) { - logger.error( - `Required data point not in source data ${condition.dataPoint}.` - ); - return { - status: 'failed', - rule: rule, - }; - } - const sourceDataPointValue = data[condition.dataPoint]!; - const evaluationResult = conditionsService.evaluate( - sourceDataPointValue, - condition.comparator, - condition.compareValue - ); - - if (evaluationResult === undefined) { - logger.error(`Condition evaluation failed. for rule: ${rule.id}`); - return { - status: 'failed', - error: `Condition evaluation failed. for rule: ${rule.id}`, - rule: rule, - }; - } - - const targetActions = rule.targets.map((target) => { - const action = evaluationResult - ? target.action - : target.action === 'ACTIVATE' - ? 'DEACTIVATE' - : 'ACTIVATE'; - - return { - agentId: target.agentId, - parameters: target.parameters, - action, - }; - }); - - return { - status: 'success', - targetActions: targetActions, - rule, - }; - } - - /** - * Executes a single source agent task. - * @param {string} agentId the source agent's ID - * @param {SourceAgentTask} task the task to execute - * @returns {Promise} the result of the taks - */ - private async executeSourceAgentTask( - agentId: string, - task: SourceAgentTask - ): Promise { - const agent = agentsService.getSourceAgent(agentId); - if (!agent) { - logger.error(`Cannot run rule for unknown source agent: ${agentId}`); - return { status: 'failed' }; - } - logger.info(`Executing task via agent ${agentId}`); - return agent.executeTask(task); - } - - /** - * Executes a set of target agent tasks. - * @param {TargetAgentTask[]} targetTasks the tasks to execute - * @returns {Promise} completes when all task have been executed - */ - async executeTargetAgentTasks( - targetTasks: TargetAgentTask[] - ): Promise { - let success = true; - const involvedAgentIds = new Set( - ...targetTasks.map((task) => task.agentId) - ); - const involvedAgents: TargetAgent[] = []; - - for (const agentId of involvedAgentIds) { - const agent = agentsService.getTargetAgent(agentId); - if (!agent) { - logger.error( - `Received target agent task for unknown agent: ${agentId}` - ); - } else { - involvedAgents.push(agent); - } - } - - for (const agent of involvedAgents) { - const tasksForAgent = targetTasks.filter( - (task) => task.agentId === agent.id - ); - const results = await agent.executeTasks(tasksForAgent); - results.forEach((result) => { - if (result.status !== 'success') { - success = false; - logger.error(`Target agent task did not succeed: ${agent.id}`); - } - }); - } - - return success; - } - - /** - * Determines if a rule is up for execution. - * @param {Rule} rule the rule to inspect - * @returns {boolean} true if the rule needs execution, false otherwise - */ - private isRuleInNeedOfExecution(rule: Rule) { - // For first time executions lastExecution will not be set - if (rule.latestStatus?.lastExecution) { - logger.debug( - `Rule [${rule.id}] last execution date: ${rule.latestStatus.lastExecution}` - ); - const nextExecutionDate = dateAdd(rule.latestStatus.lastExecution, { - minutes: rule.executionInterval, - }); - logger.debug( - `Rule [${rule.id}] next execution date: ${nextExecutionDate}` - ); - const needsExecution = isDatePast(nextExecutionDate); - if (needsExecution) { - logger.debug(`Rule [${rule.id}] needs execution.`); - } else { - logger.debug(`Rule [${rule.id}] does not need execution.`); - } - - return needsExecution; - } else { - logger.debug(`Rule [${rule.id}] has never run and needs execution.`); - return true; - } - } - - /** - * Run all rules. - */ - async runAll() { - const rules = await rulesService.listRules(); - const users = collectionService.users; - - for (const rule of rules) { - if (!this.isRuleInNeedOfExecution(rule)) { - continue; - } - - const executionDate = new Date(); - const agent = agentsService.getSourceAgent(rule.source.agentId); - if (!agent) { - logger.error( - `Cannot run rule for unknown source agent: ${rule.source.agentId}` - ); - return { status: 'failed' }; - } - - const owner = await users.get(rule.ownerId); - - if (!owner) { - logger.error(`Rule owner does not exist: ${rule.ownerId}`); - continue; - } - - const dataPoints = [rule.condition.dataPoint]; - - const sourceTasks: SourceAgentTask = { - parameters: rule.source.parameters, - ownerId: owner.id, - ownerSettings: owner.settings, - dataPoints, - }; - - // Execute data fetching task. - const taskResult = await this.executeSourceAgentTask( - rule.source.agentId, - sourceTasks - ); - - logger.info(taskResult); - - // Process task failure. - if (taskResult.status !== 'success') { - logger.error(`Source agent task did not succeed: ${rule.id}`); - rule.latestStatus = { - success: false, - lastExecution: executionDate, - error: taskResult.error ?? 'Error while fetching source agent data.', - }; - await collectionService.rules.update(rule.id, rule); - continue; - } - - // Evaluate rules. - const ruleResult = rulesService.evaluateRule(rule, taskResult.data!); - - if (ruleResult.targetActions === undefined) { - logger.info('No target actions defined'); - continue; - } - - // Process rule evaluation failures. - if (ruleResult.status === 'failed') { - rule.latestStatus = { - success: false, - lastExecution: executionDate, - error: - ruleResult.error ?? - `Rule ${rule.id} condition could not be evaluated.`, - }; - - await collectionService.rules.update(rule.id, rule); - } - - const targetTasks = ruleResult.targetActions.map((target) => ({ - agentId: target.agentId, - parameters: target.parameters, - owner: owner, - ownerSettings: owner.settings, - action: target.action, - })); - - logger.info(targetTasks); - - // TODO: defrag tasks to avoid a target agent executing the same or - // even conflicting actions on the same target entity and reduce API - // calls. - const success = await this.executeTargetAgentTasks(targetTasks); - - // Update rule status and last execution - rule.latestStatus = { - success, - lastExecution: executionDate, - }; - - await collectionService.rules.update(rule.id, rule); - } - - return { status: 'done' }; - } -} - -export const rulesService = new RulesService(); diff --git a/server/tsconfig.json b/server/tsconfig.json deleted file mode 100644 index c8a9581..0000000 --- a/server/tsconfig.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "compilerOptions": { - /* Language and Environment */ - "target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, - /* Modules */ - "module": "commonjs" /* Specify what module code is generated. */, - "outDir": "dist" /* Specify an output folder for all emitted files. */, - "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */, - "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, - /* Type Checking */ - "strict": true /* Enable all strict type-checking options. */, - "skipLibCheck": true /* Skip type checking all .d.ts files. */, - "allowSyntheticDefaultImports": true, - "sourceMap": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noImplicitAny": false, - "strictNullChecks": true, - "rootDir": "./", - "composite": true, - "resolveJsonModule": true, - "baseUrl": "." - } -} diff --git a/server/util/error.ts b/server/util/error.ts deleted file mode 100644 index 5ca2d8f..0000000 --- a/server/util/error.ts +++ /dev/null @@ -1,65 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { Request, Response, NextFunction } from 'express'; - -/** - * A error implementation for Express error handling. - * - * This class allows to specify status codes to be passed with the error - * so that Express can respond accordingly. - * - * @param {string} message the error message - * @param {number} statusCode the HTTP status code associated with this error - */ -export class AppError extends Error { - constructor(message: string, readonly statusCode = 500) { - super(message); - Object.setPrototypeOf(this, AppError.prototype); - } -} - -/** - * Implements default error handling for API calls. - * - * Express' default error handler responds with HTML. This handler transforms - * errors into JSON API responses. If the application is running in - * development mode, the full JSON-ified error will be returned, otherwise - * only the error message will be returned. - */ -export function handleGenericError( - err: any, - req: Request, - res: Response, - next: NextFunction -) { - let status: number = 500; - let responseBody: Record = {}; - - if (res.headersSent) { - next(err); - } - if (!(err instanceof Error)) { - err = new Error(JSON.stringify(err)); - } - - if ('statusCode' in err) { - status = err.statusCode; - } - - responseBody.message = err.message; - if (process.env.NODE_ENV === 'development') { - responseBody['stack'] = JSON.stringify(err.stack); - } - res.status(status).json(responseBody); -} diff --git a/server/util/logger.ts b/server/util/logger.ts deleted file mode 100644 index 575ef3c..0000000 --- a/server/util/logger.ts +++ /dev/null @@ -1,73 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import winston from 'winston'; -// Imports the Google Cloud client library for Winston -import { LoggingWinston } from '@google-cloud/logging-winston'; -const { format, transports } = winston; - -const logFormat = format.printf( - (info) => `${info.timestamp} ${info.level} ${info.message} ` -); - -const getTransportsForEnv = () => { - const env = process.env.NODE_ENV; - if (env === 'production') { - // for Prod add stackdriver logging - const loggingWinston = new LoggingWinston(); - return [ - new transports.Console({ - format: format.combine( - format.timestamp({ - format: 'YYYY-MM-DD HH:mm:ss', - }), - format.json() - ), - }), - loggingWinston, - ]; - } - // for all other envs - return [ - new transports.Console({ - format: format.combine( - format.colorize({ message: true, level: true }), - format.timestamp({ - format: 'YYYY-MM-DD HH:mm:ss', - }), - logFormat - ), - }), - ]; -}; - -const getLogLevel = (): string => { - // when Log level is set override environment settings - if (typeof process.env.LOG_LEVEL != 'undefined') { - return process.env.LOG_LEVEL.toLowerCase(); - } - if (process.env.NODE_ENV == 'production') { - return 'info'; - } - return 'debug'; -}; - -export const logger = winston.createLogger({ - level: getLogLevel(), - format: format.combine( - format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), - format.metadata({ fillExcept: ['message', 'level', 'timestamp'] }) - ), - transports: getTransportsForEnv(), - exitOnError: false, -}); diff --git a/setup/post-create.sh b/setup/post-create.sh deleted file mode 100755 index f561dcc..0000000 --- a/setup/post-create.sh +++ /dev/null @@ -1,73 +0,0 @@ -#!/bin/bash - -# Set Project ID -echo "Setting Project ID: ${GOOGLE_CLOUD_PROJECT}" -gcloud config set project ${GOOGLE_CLOUD_PROJECT} - -# Enable Identity-Aware Proxy API -echo "Enabling API: Identity-Aware Proxy..." -gcloud services enable iap.googleapis.com --no-user-output-enabled - -# Enable Cloud Logging API -echo "Enabling API: Cloud Logging..." -gcloud services enable logging.googleapis.com --no-user-output-enabled - -# Enable Firestore API -echo "Enabling API: Firestore..." -gcloud services enable firestore.googleapis.com --no-user-output-enabled - -# Enable Cloud Run API -echo "Enabling API: Cloud Run..." -gcloud services enable run.googleapis.com --no-user-output-enabled - -# Enable App Engine API -echo "Enabling API: App Engine..." -gcloud services enable appengine.googleapis.com --no-user-output-enabled - -# Enable DV360 API -echo "Enabling API: DV360..." -gcloud services enable displayvideo.googleapis.com --no-user-output-enabled - -# Enable Google Ads API -echo "Enabling API: Google Ads..." -gcloud services enable googleads.googleapis.com --no-user-output-enabled - -# Enable Google Maps API (for the UI location autocompletion) -echo "Enabling API: Google Maps..." -gcloud services enable places-backend.googleapis.com --no-user-output-enabled - -# Enable Cloud Scheduler API -echo "Enabling API: Cloud Scheduler..." -gcloud services enable cloudscheduler.googleapis.com --no-user-output-enabled - -# Create App Engine if not exists -echo "Checking for App Engine..." - -gcloud app describe --no-user-output-enabled -q --verbosity="none" -RESULT=$? - -if [ $RESULT != 0 ]; then - echo "Creating App Engine..." - gcloud app create --region ${GOOGLE_CLOUD_REGION} -fi - -# Create Firestore in Native Mode -gcloud firestore databases create --region ${GOOGLE_CLOUD_REGION} --no-user-output-enabled -q --verbosity="none" - -# Create Cloud Scheduler Job -gcloud scheduler jobs create http iftta-rules-run --schedule="*/15 * * * *" --http-method=GET --uri="${SERVICE_URL}/api/rules/run" - -# Generate session secret -SESSION_SECRET=$(openssl rand -hex 32) - -# Build OAuth Callback URL -OAUTH_CALLBACK_URL=${SERVICE_URL}/api/auth/oauthcallback - -# Update environment variables -echo "Updating environment variables..." -gcloud run services update ${K_SERVICE} --region=${GOOGLE_CLOUD_REGION} --no-user-output-enabled --update-env-vars PROJECT_ID=${GOOGLE_CLOUD_PROJECT},SESSION_SECRET=${SESSION_SECRET},OAUTH_CALLBACK_URL=${OAUTH_CALLBACK_URL} - -echo "### Important manual steps ###" -echo "Go to https://console.cloud.google.com/apis/credentials" -echo "Add the following URL to your OAuth Client ID's 'Authorized JavaScript origins':" ${SERVICE_URL} -echo "Add the following URL to your OAuth Client ID's 'Authorized redirect URIs':" ${OAUTH_CALLBACK_URL} diff --git a/src/config.ts b/src/config.ts new file mode 100644 index 0000000..9e6e35c --- /dev/null +++ b/src/config.ts @@ -0,0 +1,39 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export const GLOBALCTX = this; + +export const CONFIG = { + spreadsheetId: null, + sourceNamespace: 'source', + targetNamespace: 'target', + resultNamespace: 'result', + rules: { + sheetName: 'Rules', + startRow: 1, + cols: { + ruleName: 0, + lastUpdate: 1, + status: 2, + activationFormula: 3, + updateInterval: 4, + targetAgent: 5, + targetId: 6, + targetIdType: 7, + }, + }, +}; diff --git a/src/external/ads-script/agent.js b/src/external/ads-script/agent.js new file mode 100644 index 0000000..239e93e --- /dev/null +++ b/src/external/ads-script/agent.js @@ -0,0 +1,217 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +class GoogleAds extends TargetAgent { + name = 'Google Ads'; + requiredParameters = ['id', 'type']; + + /** + * Constructor. + */ + constructor() { + super(); + } + + /** + * Process entity based on evaluation. + * + * @param {Object} params + * @param {boolean} evaluation + */ + process(params, evaluation) { + // Check for missing parameters + /*this.ensureRequiredParameters(params); + + const condition = `Name = '${params.identifier}'`; + this.switchAdGroupStatus(condition, evaluation);*/ + + // Enable/pause the Ad Groups + const adGroupIds = row[CONFIG.feed.columns.adGroupIds] + ? row[CONFIG.feed.columns.adGroupIds] + .split(';') + .map((id) => parseInt(id, 10)) + : []; + const adGroupsByIds = getAdGroupsByIds(adGroupIds); + const adGroupsByLabel = getAdGroupsByLabel( + row[CONFIG.feed.columns.adGroupLabel] + ); + const adGroups = [...adGroupsByIds, ...adGroupsByLabel]; + adGroups.forEach((adGroup) => { + if (enable && !adGroup.isEnabled()) { + Logger.log(`Enabling Ad Group ${adGroup.getId()}`); + adGroup.enable(); + } else if (enable && adGroup.isEnabled()) { + Logger.log(`Ad Group ${adGroup.getId()} already enabled`); + } else if (!enable && adGroup.isEnabled()) { + Logger.log(`Pausing Ad Group ${adGroup.getId()}`); + adGroup.pause(); + } else { + Logger.log(`Ad Group ${adGroup.getId()} already paused`); + } + }); + // Enable/pause the Ads + const adIds = row[CONFIG.feed.columns.adIds] + ? row[CONFIG.feed.columns.adIds] + .split(';') + .map((pair) => pair.split(',').map((id) => parseInt(id, 10))) + : []; + const adsByIds = getAdsByIds(adIds); + const adsByLabel = getAdsByLabel(row[CONFIG.feed.columns.adLabel]); + const ads = [...adsByIds, ...adsByLabel]; + ads.forEach((ad) => { + if (enable && !ad.isEnabled()) { + Logger.log(`Enabling Ad ${ad.getId()}`); + ad.enable(); + } else if (enable && ad.isEnabled()) { + Logger.log(`Ad ${ad.getId()} already enabled`); + } else if (!enable && ad.isEnabled()) { + Logger.log(`Pausing Ad ${ad.getId()}`); + ad.pause(); + } else { + Logger.log(`Ad ${ad.getId()} already paused`); + } + }); + } + + /** + * Check if supposed entity status matches its actual live status. + * + * @param {Object} params + * @param {boolean} evaluation + * @throws {Error} + */ + validate(params, evaluation) {} + + /** + * Enable or pause an AdGroup by its name + * + * @param {string} condition AdGroup name + * @param {boolean} enable If true, then enable, else pause + */ + switchAdGroupStatus(condition, enable) { + const selectors = [ + AdsApp.adGroups(), + AdsApp.videoAdGroups(), + AdsApp.shoppingAdGroups(), + ]; + + for (var i = 0; i < selectors.length; i++) { + const adGroupIter = selectors[i].withCondition(condition).get(); + + if (adGroupIter.hasNext()) { + const adGroup = adGroupIter.next(); + + this.switchEntityStatus(adGroup, enable); + } + } + } + + getAdGroupsByName(adGroupName) {} + + switchEntityStatus(entity, enable) { + if (enable && !entity.isEnabled()) { + entity.enable(); + } else if (enable && !entity.isEnabled()) { + entity.pause(); + } + } + + /** + * Get Ads based on their IDs. + * An ID is a pair of [Ad Group ID, Ad ID] + * + * @param {Array>} + * @returns {Array} + */ + getAdsByIds(ids) { + const ads = []; + const adsIterator = AdsApp.ads().withIds(ids).get(); + + while (adsIterator.hasNext()) { + ads.push(adsIterator.next()); + } + + return ads; + } + + /** + * Get Ad Groups based on their IDs. + * + * @param {Array} + * @returns {Array} + */ + getAdGroupsByIds(ids) { + const adGroups = []; + const adGroupsIterator = AdsApp.adGroups().withIds(ids).get(); + + while (adGroupsIterator.hasNext()) { + adGroups.push(adGroupsIterator.next()); + } + + return adGroups; + } + + /** + * Get Ads by their label. + * + * @param {string} label + * @returns {Array} + */ + getAdsByLabel(label) { + const ads = []; + const labelsIterator = AdsApp.labels() + .withCondition(`label.name = '${label}'`) + .get(); + + if (!labelsIterator.hasNext()) { + return []; + } + + const adsIterator = labelsIterator.next().ads().get(); + + while (adsIterator.hasNext()) { + ads.push(adsIterator.next()); + } + + return ads; + } + + /** + * Get Ad Groups based on their label. + * + * @param {string} label + * @returns {Array} + */ + getAdGroupsByLabel(label) { + const adGroups = []; + const labelsIterator = AdsApp.labels() + .withCondition(`label.name = '${label}'`) + .get(); + + if (!labelsIterator.hasNext()) { + return []; + } + + const adGroupsIterator = labelsIterator.next().adGroups().get(); + + while (adGroupsIterator.hasNext()) { + adGroups.push(adGroupsIterator.next()); + } + + return adGroups; + } +} diff --git a/src/external/ads-script/api.js b/src/external/ads-script/api.js new file mode 100644 index 0000000..a18897f --- /dev/null +++ b/src/external/ads-script/api.js @@ -0,0 +1,111 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export class ApiHelper { + cache = {}; + + /** + * Constructor. + */ + constructor() { + this.cache = {}; + } + + /** + * Call API. + * + * @param {string} url + * @param {string} method + * @param {?GoogleAppsScript.URL_Fetch.HttpHeaders} headers + * @param {?Record} queryParams + * @param {?Object} body + * @returns {Object} + */ + callApi( + url, + headers, + queryParams, + body, + method = 'get', + contentType = 'application/json' + ) { + if (queryParams) { + url = `${url}${this.objectToUrlQuery(url, queryParams)}`; + } + + const params = { + headers: headers ?? {}, + method: method, + muteHttpExceptions: true, + contentType: contentType, + }; + + // Add body if any + if (body) { + // Stringify JSON if applicable + if (contentType === 'application/json') { + body = JSON.stringify(body); + } + + params.payload = body; + } + + const cacheKey = `${url}-${JSON.stringify(params)}`; + if (!(cacheKey in this.cache) || !this.cache[cacheKey]) { + const res = UrlFetchApp.fetch(url, params); + + if (200 != res.getResponseCode() && 204 != res.getResponseCode()) { + Logger.log('HTTP code: ' + res.getResponseCode()); + Logger.log('API error: ' + res.getContentText()); + Logger.log('URL: ' + url); + throw new Error(res.getContentText()); + } + + this.cache[cacheKey] = res.getContentText() + ? JSON.parse(res.getContentText()) + : {}; + } + + return this.cache[cacheKey]; + } + + /** + * Convert object into URL query string. + * + * @param {string} url + * @param {Object|null} obj + * @returns {string} + */ + objectToUrlQuery(url, obj) { + if (!obj || (obj && Object.keys(obj).length === 0)) return ''; + + const prefix = url.includes('?') ? '&' : '?'; + + return prefix.concat( + Object.keys(obj) + .map((key) => { + if (obj[key] instanceof Array) { + const joined = obj[key].join(`&${key}=`); + return joined.length ? `${key}=${joined}` : null; + } + return `${key}=${obj[key]}`; + }) + .filter((param) => param) + .join('&') + ); + } +} diff --git a/src/external/ads-script/base.js b/src/external/ads-script/base.js new file mode 100644 index 0000000..6bc04a5 --- /dev/null +++ b/src/external/ads-script/base.js @@ -0,0 +1,65 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +class TargetAgent extends ApiHelper { + name = ''; + requiredParameters = []; + static instance; + + constructor() { + super(); + } + + process(params, evaluation) {} + + validate(params, evaluation) {} + + /** + * Find missing required parameters exist in object. + * + * @param {!Object} params + * @returns {string} + */ + findMissingRequiredParameter(params) { + const keys = Object.keys(params); + + return this.requiredParameters.find((param) => !keys.includes(param)); + } + + /** + * Ensure all required parameters exist in object. + * + * @param {!Object} params + * @throws {Error} + */ + ensureRequiredParameters(params) { + // Check for missing parameters + const missingParameter = !this.findMissingRequiredParameter(params); + + if (missingParameter) { + throw new Error(`Missing parameter: '${missingParameter}'`); + } + } + + static getInstance() { + if (!this.instance) { + this.instance = new this(); + } + + return this.instance; + } +} diff --git a/src/external/ads-script/config.js b/src/external/ads-script/config.js new file mode 100644 index 0000000..68c7b9a --- /dev/null +++ b/src/external/ads-script/config.js @@ -0,0 +1,34 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +const CONFIG = { + spreadsheetId: '', + rules: { + sheetName: 'Rules', + startRow: 1, + cols: { + ruleName: 0, + lastUpdate: 1, + status: 2, + activationFormula: 3, + updateInterval: 4, + targetAgent: 5, + targetId: 6, + targetIdType: 7, + }, + }, +}; diff --git a/src/external/ads-script/index.js b/src/external/ads-script/index.js new file mode 100644 index 0000000..60c76c2 --- /dev/null +++ b/src/external/ads-script/index.js @@ -0,0 +1,94 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** @type {?ApiSports} */ +let apiHelper; + +/** @type {?SheetsService} */ +let sheetsService; + +/** + * Parse all rules in the feed and, according to mode, + * fetches data from API and/or syncs state with target, respectively. + */ +function main() { + // Get all rows from the sheet + const rows = getSheetsService().getRangeData(CONFIG.rules.sheetName, 1, 1); + + if (rows.length === 0) { + return; + } + + // Extract and parse column headers + const columnHeaders = rows.shift(); + const columnHeaderHelper = new DynamicColumnHeaders(columnHeaders); + + // Handle every row + rows.forEach((row, index) => { + console.log(`Processing row ${index + 1}`); + + let status = ''; + + try { + if (row[CONFIG.rules.cols.targetAgent] !== 'Google Ads') return; + + console.log('Synchronizing...'); + const evaluation = getSheetsService().getCellValue( + CONFIG.rules.sheetName, + index + 1 + CONFIG.rules.startRow, + CONFIG.rules.cols.activationFormula + 1 + ); + + if (evaluation === '') return; + + const targetAgent = GoogleAds.getInstance(); + + targetAgent.process( + row[CONFIG.rules.cols.targetId], + row[CONFIG.rules.cols.targetIdType], + evaluation + ); + + status = `Synchronized (${Utils.getCurrentDateString()})`; + + // Update timestamp + getSheetsService().setCellValue( + index + CONFIG.rules.startRow + 1, + CONFIG.rules.cols.lastUpdate + 1, + String(Date.now()), + CONFIG.rules.sheetName + ); + } catch (err) { + console.log( + `Error (${Utils.getCurrentDateString()}): ${JSON.stringify(err)}` + ); + } + }); +} + +/** + * Returns the SheetsService instance, initializing it if it does not exist yet. + * + * @return {!SheetsService} The initialized SheetsService instance + */ +function getSheetsService() { + if (sheetsService == null) { + sheetsService = new SheetsService(CONFIG.spreadsheetId); + } + + return sheetsService; +} diff --git a/src/external/ads-script/sheets.js b/src/external/ads-script/sheets.js new file mode 100644 index 0000000..b26e202 --- /dev/null +++ b/src/external/ads-script/sheets.js @@ -0,0 +1,88 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +class SheetsService { + constructor(spreadsheetId) { + this.spreadsheet_ = SpreadsheetApp.openById(spreadsheetId); + } + + /** + * Retrieves data from the underlying spreadsheet using the provided range + * parameters and sheet name. + * + * @param {string} sheetName The name of the sheet + * @param {number} startRow The range's start row + * @param {number} startCol The range's start column + * @param {number=} numRows Optional number of rows to retrieve. Defaults to + * all available rows + * @param {number=} numCols Optional number of columns to retrieve. Defaults + * to all available columns + * @return {?Array>} The data found at the specified range + */ + getRangeData(sheetName, startRow, startCol, numRows = 0, numCols = 0) { + const sheet = this.getSpreadsheet().getSheetByName(sheetName); + + // Return empty result if no rows + if (numRows + sheet.getLastRow() - startRow + 1 === 0) { + console.log('nope'); + return [[]]; + } + + console.log( + sheetName, + startRow, + startCol, + numRows, + numCols, + sheet.getLastRow() - startRow + 1, + sheet.getLastColumn() - startCol + 1 + ); + + return sheet + .getRange( + startRow, + startCol, + numRows || sheet.getLastRow() - startRow + 1, + numCols || sheet.getLastColumn() - startCol + 1 + ) + .getValues(); + } + + /** + * Retrieves a cell's value by the given parameters. + * + * @param {string} sheetName The name of the sheet + * @param {number} row The row identifier + * @param {number} col The column identifier + * @return {?Object} The value of the cell + */ + getCellValue(sheetName, row, col) { + const sheet = this.getSpreadsheet().getSheetByName(sheetName); + const cell = sheet.getRange(row, col); + + return cell.getValue(); + } + + /** + * Returns the initialized {@link SpreadsheetApp.Spreadsheet} reference. + * + * @return {?SpreadsheetApp.Spreadsheet} The spreadsheet + */ + getSpreadsheet() { + return this.spreadsheet_; + } +} diff --git a/src/helpers/api.ts b/src/helpers/api.ts new file mode 100644 index 0000000..bde9b84 --- /dev/null +++ b/src/helpers/api.ts @@ -0,0 +1,149 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export class ApiHelper { + private cache: Record = {}; + + /** + * Constructor. + */ + constructor() { + this.cache = {}; + } + + /** + * Call API. + * + * @param {string} url + * @param {?GoogleAppsScript.URL_Fetch.HttpHeaders} headers + * @param {?Record} queryParams + * @param {?Object} body + * @param {string} method + * @param {string} contentType + * @param {boolean} forceCache + * @returns {Object} + */ + callApi( + url: string, + headers?: GoogleAppsScript.URL_Fetch.HttpHeaders, + queryParams?: Record, + body?: Object, + method = 'get', + contentType = 'application/json', + forceCache = false + ) { + if (queryParams) { + url = `${url}${this.objectToUrlQuery(url, queryParams)}`; + } + + const params: { + headers: GoogleAppsScript.URL_Fetch.HttpHeaders; + method: GoogleAppsScript.URL_Fetch.HttpMethod; + muteHttpExceptions: boolean; + contentType?: string; + payload?: Object; + } = { + headers: headers ?? {}, + method: method as GoogleAppsScript.URL_Fetch.HttpMethod, + muteHttpExceptions: true, + contentType: contentType, + }; + + // Add body if any + if (body) { + // Stringify JSON if applicable + if (contentType === 'application/json') { + body = JSON.stringify(body); + } + + params.payload = body; + } + + const cacheKey = `${url}-${JSON.stringify(params)}`; + + if (cacheKey in this.cache && this.cache[cacheKey]) { + console.log( + 'Returning cached result', + JSON.stringify(this.cache[cacheKey]) + ); + return this.cache[cacheKey]; + } + + const resRaw = UrlFetchApp.fetch(url, params); + + if (200 != resRaw.getResponseCode() && 204 != resRaw.getResponseCode()) { + Logger.log('HTTP code: ' + resRaw.getResponseCode()); + Logger.log('API error: ' + resRaw.getContentText()); + Logger.log('URL: ' + url); + throw new Error(resRaw.getContentText()); + } + + const res = resRaw.getContentText() + ? JSON.parse(resRaw.getContentText()) + : {}; + + // Only cache GET and forced cache requests + if (method.toLowerCase() === 'get' || forceCache) { + this.cache[cacheKey] = res; + } + + return res; + + /*if (!(cacheKey in this.cache) || !this.cache[cacheKey]) { + const res = UrlFetchApp.fetch(url, params); + + if (200 != res.getResponseCode() && 204 != res.getResponseCode()) { + Logger.log('HTTP code: ' + res.getResponseCode()); + Logger.log('API error: ' + res.getContentText()); + Logger.log('URL: ' + url); + throw new Error(res.getContentText()); + } + + this.cache[cacheKey] = res.getContentText() + ? JSON.parse(res.getContentText()) + : {}; + } + + return this.cache[cacheKey];*/ + } + + /** + * Convert object into URL query string. + * + * @param {string} url + * @param {Object|null} obj + * @returns {string} + */ + objectToUrlQuery(url: string, obj?: object) { + if (!obj || (obj && Object.keys(obj).length === 0)) return ''; + + const prefix = url.includes('?') ? '&' : '?'; + + return prefix.concat( + Object.keys(obj) + .map((key) => { + if ((obj as any)[key] instanceof Array) { + const joined = (obj as any)[key].join(`&${key}=`); + return joined.length ? `${key}=${joined}` : null; + } + return `${key}=${(obj as any)[key]}`; + }) + .filter((param) => param) + .join('&') + ); + } +} diff --git a/src/helpers/auth.ts b/src/helpers/auth.ts new file mode 100644 index 0000000..66de169 --- /dev/null +++ b/src/helpers/auth.ts @@ -0,0 +1,93 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export interface ServiceAccount { + type: 'this.serviceAccount'; + project_id: string; + private_key_id: string; + private_key: string; + client_email: string; + client_id: string; + auth_uri: 'https://accounts.google.com/o/oauth2/auth'; + token_uri: 'https://oauth2.googleapis.com/token'; + auth_provider_x509_cert_url: 'https://www.googleapis.com/oauth2/v1/certs'; + client_x509_cert_url: string; + user_email: string; +} + +/** + * This is a wrapper class for handling authentification to DV360 API. + * This class can be used to auth also to other Google APIs. + */ +export class Auth { + serviceAccount: ServiceAccount; + /** + * Set the OAuth configuration. + * In order to authorise your DV360 API calls you can: + * 1. Use the same Google account as you open the spreadsheet. + * If you chose this approach, you don't need to do pass account. + * 2. Use a service account. + * This is a service account in JSON format from your GCP project. + * How to get a service account credentials from GCP: + * https://cloud.google.com/iam/docs/service-accounts + * + * Service account credentials should be specified in the following JSON format: + * { + * "type": "this.serviceAccount", + * "project_id": "...", + * "private_key_id": "...", + * "private_key": "...", + * "client_email": "...@...gserviceaccount.com", + * "client_id": "...", + * "auth_uri": "https://accounts.google.com/o/oauth2/auth", + * "token_uri": "https://oauth2.googleapis.com/token", + * "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + * "client_x509_cert_url": "..." + * } + * + * @param {?Object} account The service account or empty + */ + constructor(account?: Object) { + this.serviceAccount = account as ServiceAccount; + } + + /** + * Get Auth Token for OAuth authorisation for your service account. + * You need this token in order to authorise your DV360 API requests. + * See more: https://github.com/gsuitedevs/apps-script-oauth2/blob/master/README.md + * See more: https://developers.google.com/apps-script/reference/script/script-app#getOAuthToken() + * + * @returns {string} OAuth Token + */ + getAuthToken() { + if (!this.serviceAccount || !('private_key' in this.serviceAccount)) { + return ScriptApp.getOAuthToken(); + } + + const service = OAuth2.createService('Service Account') + .setTokenUrl('https://accounts.google.com/o/oauth2/token') + .setPrivateKey(this.serviceAccount.private_key) + .setIssuer(this.serviceAccount.client_email) + .setSubject(this.serviceAccount.user_email) + .setPropertyStore(PropertiesService.getScriptProperties()) + .setParam('access_type', 'offline') + .setScope('https://www.googleapis.com/auth/display-video'); + + service.reset(); + return service.getAccessToken(); + } +} diff --git a/src/helpers/dynamic-column-headers.ts b/src/helpers/dynamic-column-headers.ts new file mode 100644 index 0000000..157f667 --- /dev/null +++ b/src/helpers/dynamic-column-headers.ts @@ -0,0 +1,94 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { JPath } from './jpath'; + +export class DynamicColumnHeaders { + headers: Array; + static namespaceSeparator = ':'; + + /** + * Constructor. + * + * @param {Array} headers + */ + constructor(headers: Array) { + this.headers = headers; + } + + /** + * Maps values of cells in a row to their respective + * header for a given namespace. + * With no namespace provided, it returns values for ALL namespaces + * and nests the results under each namespace as property. + * Per default it will nest results under the respective group, which is '0' + * if none exists. + * + * @param {Array} row + * @param {string} namespace + * @param {string} separator + * @param {boolean} includeGroup + * @returns {Record} + */ + getMappedValues( + row: Array, + namespace: string | undefined = undefined, + includeGroup: boolean = true + ): Record { + let res = {}; + + row.forEach((cell, index) => { + const exp = new RegExp( + `^${namespace ?? '\\w+'}(?:\\.\\d)*${ + DynamicColumnHeaders.namespaceSeparator + }` + ); + + if (exp.test(this.headers[index])) { + const prefixAndPath = this.headers[index].split( + DynamicColumnHeaders.namespaceSeparator + ); + const namespaceAndGroupArr = prefixAndPath[0].split('.'); + const group = namespaceAndGroupArr[1] ?? '0'; + + // Only include namespace in path when extracting for ALL namespaces + const path = `${namespace ? '' : `${namespaceAndGroupArr[0]}.`}${ + includeGroup ? `${group}.` : '' + }${prefixAndPath[1]}`; + + res = JPath.setValue(res, path, cell); + } + }); + + return res; + } + + /** + * Returns the index of the first header to have the given namespace. + * + * @param {string} namespace + * @returns {number} + */ + getFirstColWithNamespace(namespace: string) { + const exp = new RegExp( + `^${namespace ?? '\\w+'}(?:\\.\\d)*${ + DynamicColumnHeaders.namespaceSeparator + }` + ); + return this.headers.findIndex((header) => exp.test(header)); + } +} diff --git a/src/helpers/jpath.ts b/src/helpers/jpath.ts new file mode 100644 index 0000000..4f21e06 --- /dev/null +++ b/src/helpers/jpath.ts @@ -0,0 +1,105 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export class JPath { + /** + * Get Object entry value for the provided path. + * + * @param {string} path Format "..." + * @param {Object} json JSON or JavaScript Object + * @returns {string} Value from JSON or null if value does not exist + */ + static getValue(path: string, json: Object) { + let tmpJson: Record = json; + let val = null; + + for (const part of path.split('.')) { + if (part.startsWith('!')) { + return this.getAgregatedValue(part.substring(1), tmpJson); + } + + let tmpVal; + const intVal = parseInt(part); + if (intVal && intVal in tmpJson) { + tmpVal = tmpJson[intVal]; + } else if (tmpJson.hasOwnProperty(part)) { + tmpVal = tmpJson[part]; + } else { + break; + } + + const typeOf = typeof tmpVal; + if ('string' == typeOf || 'number' == typeOf) { + return tmpVal; + } else { + tmpJson = tmpVal; + } + } + + return val; + } + + /** + * Get aggregated value (e.g. MAX, MIN, etc.) from JSON entry values. + * + * @param {string} aggFunction Aggregation function (now only MIN and MAX function are supported) + * @param {Object} json JSON or JavaScript Object + * @returns {number} Agregated value from JSON + */ + static getAgregatedValue(aggFunction: string, json: Object) { + switch (aggFunction.toLowerCase()) { + case 'min': + return Math.min.apply(Math, Object.values(json)); + + case 'max': + return Math.max.apply(Math, Object.values(json)); + + default: + throw `Aggregation function "${aggFunction}" is not supported`; + } + } + + /** + * Set Object property at specified path. + * + * @param {Record} obj + * @param {string} pathString + * @param {string|number} value + * @returns {Record} + */ + static setValue( + obj: Record, + pathString: string, + value: string | number + ) { + let curr = obj; + const path = pathString.split('.'); + + path.forEach((key, index) => { + if (index + 1 === path.length) { + curr[key] = value; + } else { + if (!(key in curr)) { + curr[key] = {}; + } + curr = curr[key]; + } + }); + + return obj; + } +} diff --git a/src/helpers/sheets.ts b/src/helpers/sheets.ts new file mode 100644 index 0000000..cd3fa6c --- /dev/null +++ b/src/helpers/sheets.ts @@ -0,0 +1,169 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Helper class to wrap calls to Sheets API. + * Sheets API Read/Write usually works faster then reading and writing from/to + * spreadsheet directly. + */ +export class SheetsService { + defaultMode: string; + spreadsheet_: GoogleAppsScript.Spreadsheet.Spreadsheet; + + /** + * Constructor. + * + * @param {string} spreadsheetId + */ + constructor(spreadsheetId?: string) { + let spreadsheet; + + if (spreadsheetId) { + try { + spreadsheet = SpreadsheetApp.openById(spreadsheetId); + } catch (e) { + console.error(e); + throw new Error( + `Unable to identify spreadsheet with provided ID: ${spreadsheetId}!` + ); + } + } else { + spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); + } + + /** @private @const {?SpreadsheetApp.Spreadsheet} */ + this.spreadsheet_ = spreadsheet; + + /** @type {string} */ + this.defaultMode = 'FORMULA'; + } + + /** + * Writes the given values in the specified sheet and range. + * + * @param {string} sheetName The name of the sheet + * @param {number} row The range's start row + * @param {number} col The range's start col + * @param {?Array>} values The values to write + */ + setValuesInDefinedRange( + sheetName: string, + row: number, + col: number, + values: Array> + ) { + const sheet = this.getSpreadsheet().getSheetByName(sheetName); + + if (!sheet) return; + + if (values[0]) { + sheet + .getRange(row, col, values.length, values[0].length) + .setValues(values); + } + } + + /** + * Retrieves data from the underlying spreadsheet using the provided range + * parameters and sheet name. + * + * @param {string} sheetName The name of the sheet + * @param {number} startRow The range's start row + * @param {number} startCol The range's start column + * @param {number=} numRows Optional number of rows to retrieve. Defaults to + * all available rows + * @param {number=} numCols Optional number of columns to retrieve. Defaults + * to all available columns + * @return {?Array>} The data found at the specified range + */ + getRangeData( + sheetName: string, + startRow: number, + startCol: number, + numRows = 0, + numCols = 0 + ) { + const sheet = this.getSpreadsheet().getSheetByName(sheetName); + + // Return empty result if no rows + if (!sheet || numRows + sheet.getLastRow() - startRow + 1 === 0) { + return [[]]; + } + + return sheet + .getRange( + startRow, + startCol, + numRows || sheet.getLastRow() - startRow + 1, + numCols || sheet.getLastColumn() - startCol + 1 + ) + .getValues(); + } + + /** + * Retrieves a cell's value by the given parameters. + * + * @param {string} sheetName The name of the sheet + * @param {number} row The row identifier + * @param {number} col The column identifier + * @return {?Object} The value of the cell + */ + getCellValue(sheetName: string, row: number, col: number) { + const sheet = this.getSpreadsheet().getSheetByName(sheetName); + + return sheet ? sheet.getRange(row, col).getValue() : null; + } + + /** + * Sets a cell's value by the given parameters. + * + * @param {number} row The row identifier + * @param {number} col The column identifier + * @param {string} val The value to set + * @param {?string=} sheetName The name of the sheet to use. Uses the + * sheet the user currently has open (active sheet) if not given + */ + setCellValue(row: number, col: number, val: string, sheetName?: string) { + const sheet = sheetName + ? this.getSpreadsheet().getSheetByName(sheetName) + : this.getSpreadsheet().getActiveSheet(); + + if (!sheet) return; + + sheet.getRange(row, col).setValue(val); + } + + /** + * Spreadsheet API has quota of requests per minute, so each next retry will + * be done after this wait time. Wait time will be increased progressively. + * + * @param {number} i Current number of retries + * @returns {number} Number of seconds + */ + getWaitTimeInSeconds(i: number) { + return (i > 3 ? 10 : 5) * (i + 1); + } + + /** + * Returns the initialized {@link SpreadsheetApp.Spreadsheet} reference. + * + * @return {?SpreadsheetApp.Spreadsheet} The spreadsheet + */ + getSpreadsheet() { + return this.spreadsheet_; + } +} diff --git a/src/helpers/utils.ts b/src/helpers/utils.ts new file mode 100644 index 0000000..b7e1b46 --- /dev/null +++ b/src/helpers/utils.ts @@ -0,0 +1,31 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export class Utils { + /** + * Get current date and time as string. + * + * @return {string} + */ + static getCurrentDateString() { + return new Date() + .toISOString() + .replace('T', ' ') + .replace('Z', '') + .replace(/\.\d*/, ''); + } +} diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..4be4466 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,369 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { CONFIG, GLOBALCTX } from './config'; +import { ApiHelper } from './helpers/api'; +import { DynamicColumnHeaders } from './helpers/dynamic-column-headers'; +import { JPath } from './helpers/jpath'; +import { SheetsService } from './helpers/sheets'; +import { Utils } from './helpers/utils'; +import { TargetAgent } from './target-agents/base'; +import { AVAILABLE_AGENTS } from './target-agents/index'; + +// TODO: Remove me! +function teamHasWonInPastXDays(fixtures: any, params: any) { + return fixtures.response.some((item: any) => { + return ( + item.fixture.status.short === 'FT' && + ((item.teams.home.id == params.teamId && + item.teams.home.winner === true) || + (item.teams.away.id == params.teamId && + item.teams.away.winner === true)) && + item.fixture.timestamp * 1000 > params.lookAroundDays + ); + }); +} + +// TODO: Remove me! +function teamIsPlayingWithinNextXDays(fixtures: any, params: any) { + const now = new Date(); + const maxFuture = new Date(now.valueOf()).setDate( + now.getDate() + params.lookAroundDays + ); + + return fixtures.response.some((item: any) => { + return ( + item.fixture.timestamp * 1000 > now.getTime() && + item.fixture.timestamp * 1000 < maxFuture + ); + }); +} + +enum MODE { + FETCH = 0, + SYNC = 1, + FETCH_AND_SYNC = 2, +} + +/** @type {?SheetsService} */ +let sheetsService: SheetsService; + +/** @type {Record} */ +let targetAgents: Record = {}; + +/** + * Add custom menu item into the Spreadsheet menu. + */ +function onOpen() { + const ui = SpreadsheetApp.getUi(); + ui.createMenu('IFTTA') + .addItem('Fetch', 'fetch') + .addItem('Sync', 'sync') + .addItem('FetchAndSync', 'fetchAndSync') + .addItem('Validate', 'validate') + .addToUi(); +} + +/** + * Call main() with mode 'FETCH'. + */ +function fetch() { + main(MODE.FETCH); +} + +/** + * Call main() with mode 'SYNC'. + */ +function sync() { + main(MODE.SYNC); +} + +/** + * Call main() with mode 'FETCH_AND_SYNC'. + */ +function fetchAndSync() { + main(MODE.FETCH_AND_SYNC); +} + +/** + * Parse all rules in the feed and, according to mode, + * fetches data from API and/or syncs state with target, respectively. + * + * @param {string} mode + */ +function main(mode: MODE) { + // Get all rows from the sheet + const rows = getSheetsService().getRangeData(CONFIG.rules.sheetName, 1, 1); + + if (rows.length === 0) { + return; + } + + // Extract and parse column headers + const columnHeaders = rows.shift() as Array; + const columnHeaderHelper = new DynamicColumnHeaders(columnHeaders); + + const apiHelper = new ApiHelper(); + + // Handle every row + rows.forEach((row: Array, index: number) => { + console.log(`Processing row ${index + 1}`); + + // Check if update is due + let lastUpdate = Number(row[CONFIG.rules.cols.lastUpdate]); + const updateInterval = Number(row[CONFIG.rules.cols.updateInterval]); + let status = ''; + + if ( + updateInterval > 0 && + Date.now() < lastUpdate + updateInterval * 3600 * 1000 + ) { + console.log('Update not due.'); + return; + } + + try { + // Fetch + if (mode === MODE.FETCH || mode === MODE.FETCH_AND_SYNC) { + console.log('Fetching data from API...'); + + const sourceParams = columnHeaderHelper.getMappedValues( + row, + CONFIG.sourceNamespace + ); + + for (const group in sourceParams) { + const source = sourceParams[group]; + + console.log('calling api'); + console.log('url', source.url); + console.log('headers', JSON.stringify(source.headers)); + console.log('params', JSON.stringify(source.params)); + + const res = apiHelper.callApi( + source.url, + source.headers, + source.params + ); + + row = updateRowWithResultData(columnHeaders, row, res, group); + + const resultsHeaderStartCol = + columnHeaderHelper.getFirstColWithNamespace(CONFIG.resultNamespace); + + const results = row.slice(resultsHeaderStartCol); + + getSheetsService().setValuesInDefinedRange( + CONFIG.rules.sheetName, + index + CONFIG.rules.startRow + 1, + resultsHeaderStartCol + 1, + [results] + ); + + status = `Fetched (${Utils.getCurrentDateString()})`; + } + } + + // Sync + if (mode === MODE.SYNC || mode === MODE.FETCH_AND_SYNC) { + console.log('Synchronizing...'); + const evaluation = getSheetsService().getCellValue( + CONFIG.rules.sheetName, + index + 1 + CONFIG.rules.startRow, + CONFIG.rules.cols.activationFormula + 1 + ); + + if (evaluation === '') return; + + const params = columnHeaderHelper.getMappedValues( + row, + CONFIG.targetNamespace, + false + ); + + const targetAgent = getTargetAgent(row[CONFIG.rules.cols.targetAgent]); + + targetAgent.process( + row[CONFIG.rules.cols.targetId], + row[CONFIG.rules.cols.targetIdType], + evaluation, + params + ); + + status = `Synchronized (${Utils.getCurrentDateString()})`; + + // Update timestamp + getSheetsService().setCellValue( + index + CONFIG.rules.startRow + 1, + CONFIG.rules.cols.lastUpdate + 1, + String(Date.now()), + CONFIG.rules.sheetName + ); + } + } catch (err) { + status = `Error (${Utils.getCurrentDateString()}): ${JSON.stringify( + err + )}`; + } finally { + // Update status + getSheetsService().setCellValue( + index + CONFIG.rules.startRow + 1, + CONFIG.rules.cols.status + 1, + status, + CONFIG.rules.sheetName + ); + } + }); +} + +/** + * Validate that the Sheet and target entities are in sync. + */ +function validate() { + const errors: Array = []; + + // Get all rows from the sheet + const rows = getSheetsService().getRangeData(CONFIG.rules.sheetName, 1, 1); + + // Extract and parse column headers + const columnHeaders = rows.shift() as Array; + const columnHeaderHelper = new DynamicColumnHeaders(columnHeaders); + + // Handle every row + rows.forEach((row: Array, index: number) => { + try { + const evaluation = getSheetsService().getCellValue( + CONFIG.rules.sheetName, + index + CONFIG.rules.startRow + 1, + CONFIG.rules.cols.activationFormula + 1 + ); + + if (evaluation === '') return; + + const params = columnHeaderHelper.getMappedValues( + row, + CONFIG.targetNamespace + ); + + getTargetAgent(row[CONFIG.rules.cols.targetAgent]).validate( + row[CONFIG.rules.cols.targetId], + row[CONFIG.rules.cols.targetIdType], + evaluation, + params + ); + } catch (err) { + errors.push(JSON.stringify((err as Error).message)); + } + }); + + if (errors.length) { + throw errors.join('\n'); + } +} + +/** + * Update row with data from API according to path in header. + * + * @param {Array} headers + * @param {Array} row + * @param {Object} data + * @param {string} group + * @returns {string} + */ +function updateRowWithResultData( + headers: Array, + row: Array, + data: Object, + group: string +) { + row = row.map((cell, index) => { + const exp = new RegExp( + `^${CONFIG.resultNamespace}(?:\\.${group})*${DynamicColumnHeaders.namespaceSeparator}` + ); + + if (exp.test(headers[index])) { + const path = headers[index].split( + DynamicColumnHeaders.namespaceSeparator + )[1]; + + if (path.startsWith('!CUSTOM')) { + const functionName = path.split('.')[1]; + + if (GLOBALCTX && GLOBALCTX[functionName]) { + const columnHeaderHelper = new DynamicColumnHeaders(headers); + + const customParams = columnHeaderHelper.getMappedValues( + row, + functionName, + false + ); + + // Update cell value using custom function + return (GLOBALCTX as any)[functionName](data, customParams); + } + } else { + // Update cell value from result using JPath + return JPath.getValue(path, data); + } + } + + // Leave cell value untouched + return cell; + }); + + return row; +} + +/** + * Dynamically ('lazy') load and return target agent instances. + * This is done to avoid ReferenceErrors on direct access due to wrong file order + * + * @param {string} targetName + * @returns {TargetAgent} + * @throws {Error} + */ +function getTargetAgent(agentName: string) { + if (agentName in targetAgents) { + return targetAgents[agentName]; + } + + const agent = AVAILABLE_AGENTS.find( + (agent) => agent.friendlyName === agentName + ); + + if (!agent) { + throw new Error(`Unknown target agent: '${agentName}'`); + } + + targetAgents[agentName] = agent.getInstance(); + + return targetAgents[agentName]; +} + +/** + * Return the SheetsService instance, initializing it if it does not exist yet. + * + * @returns {!SheetsService} The initialized SheetsService instance + */ +function getSheetsService() { + if (sheetsService === undefined) { + const spreadsheetId = CONFIG.spreadsheetId || undefined; + sheetsService = new SheetsService(spreadsheetId); + } + + return sheetsService; +} diff --git a/src/target-agents/agent.sample.ts b/src/target-agents/agent.sample.ts new file mode 100644 index 0000000..807cae7 --- /dev/null +++ b/src/target-agents/agent.sample.ts @@ -0,0 +1,62 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { TargetAgent } from './base'; + +interface Parameters { + token: string; // required + advertiserId?: string; // optional +} + +export class Sample extends TargetAgent { + static friendlyName = 'Sample'; + requiredParameters: Array = ['token']; + + /** + * Process entity based on evaluation. + * + * @param {string} identifier + * @param {string} type + * @param {boolean} evaluation + * @param {Parameters} params Additional parameters + */ + process( + identifier: string, + type: string, + evaluation: boolean, + params: Parameters + ) { + // Check for missing parameters + this.ensureRequiredParameters(params); + } + + /** + * Check if supposed entity status matches its actual live status. + * + * @param {string} identifier + * @param {string} type + * @param {boolean} evaluation + * @param {Parameters} params Additional parameters + * @throws {Error} + */ + validate( + identifier: string, + type: string, + evaluation: boolean, + params: Parameters + ) {} +} diff --git a/src/target-agents/base.ts b/src/target-agents/base.ts new file mode 100644 index 0000000..2726c5b --- /dev/null +++ b/src/target-agents/base.ts @@ -0,0 +1,84 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ApiHelper } from '../helpers/api'; + +export class TargetAgent extends ApiHelper { + public static friendlyName: string = ''; + protected requiredParameters: Array = []; + static instance: TargetAgent; + + protected constructor() { + super(); + } + + process( + identifier: string, + type: string, + evaluation: boolean, + params: Object + ) {} + + validate( + identifier: string, + type: string, + evaluation: boolean, + params: Object + ) {} + + /** + * Find missing required parameters exist in object. + * + * @param {!Object} params + * @returns {string} + */ + private findMissingRequiredParameter(params: Object) { + const keys = Object.keys(params); + + return this.requiredParameters.find((param) => !keys.includes(param)); + } + + /** + * Ensure all required parameters exist in object. + * + * @param {!Object} params + * @throws {Error} + */ + protected ensureRequiredParameters(params: Object) { + // Check for missing parameters + const missingParameter = this.findMissingRequiredParameter( + params as Object + ); + + if (missingParameter) { + throw new Error(`Missing parameter: '${missingParameter}'`); + } + } + + /** + * Get agent singleton instance. + * + * @returns {TargetAgent} + */ + public static getInstance() { + if (!this.instance) { + this.instance = new this(); + } + + return this.instance; + } +} diff --git a/src/target-agents/dv360.ts b/src/target-agents/dv360.ts new file mode 100644 index 0000000..9706b90 --- /dev/null +++ b/src/target-agents/dv360.ts @@ -0,0 +1,282 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Auth } from '../helpers/auth'; +import { TargetAgent } from './base'; + +enum DV360_ENTITY_STATUS { + ACTIVE = 'ENTITY_STATUS_ACTIVE', + PAUSED = 'ENTITY_STATUS_PAUSED', +} + +enum DV360_ENTITY_TYPE { + LINE_ITEM = 'LINE_ITEM', + INSERTION_ORDER = 'INSERTION_ORDER', +} + +interface Entity { + entityStatus: DV360_ENTITY_STATUS; +} + +interface Parameters { + advertiserId: string; + serviceAccount?: string; +} + +/** + * DV360 API Wrapper class. Implements DV360 API calls. + */ +export class DV360 extends TargetAgent { + static friendlyName = 'DV360'; + authToken?: string; + baseUrl: string; + requiredParameters = ['id', 'type', 'advertiserId']; + + /** + * Set the DV360 wrapper configuration + */ + constructor() { + super(); + + /** + * DV360 Write API Endpoint Prefix + * See more: https://developers.google.com/display-video/api/reference/rest + */ + this.baseUrl = 'https://displayvideo.googleapis.com/v1'; + } + + /** + * Process entity based on evaluation. + * + * @param {string} identifier + * @param {DV360_ENTITY_TYPE} type + * @param {boolean} evaluation + * @param {Parameters} params Additional parameters + */ + process( + identifier: string, + type: DV360_ENTITY_TYPE, + evaluation: boolean, + params: Parameters + ) { + // Check for missing parameters + this.ensureRequiredParameters(params); + + const auth = new Auth(params.serviceAccount ?? undefined); + this.authToken = auth.getAuthToken(); + + console.log('Switching', identifier, type, evaluation); + + if (type === DV360_ENTITY_TYPE.LINE_ITEM) { + this.switchLIStatus(params.advertiserId, identifier, evaluation); + } else if (type === DV360_ENTITY_TYPE.INSERTION_ORDER) { + this.switchIOStatus(params.advertiserId, identifier, evaluation); + } + } + + /** + * Check if supposed entity status matches its actual live status. + * + * @param {string} identifier + * @param {DV360_ENTITY_TYPE} type + * @param {boolean} evaluation + * @param {Parameters} params Additional parameters + * @throws {Error} + */ + validate( + identifier: string, + type: DV360_ENTITY_TYPE, + evaluation: boolean, + params: Parameters + ) { + // Check for missing parameters + this.ensureRequiredParameters(params); + + const auth = new Auth(params.serviceAccount ?? undefined); + this.authToken = auth.getAuthToken(); + + let status; + + if (type === DV360_ENTITY_TYPE.LINE_ITEM) { + status = this.isLIActive(params.advertiserId, identifier); + } else if (type === DV360_ENTITY_TYPE.INSERTION_ORDER) { + status = this.isIOActive(params.advertiserId, identifier); + } + + if (evaluation !== status) { + throw Error( + `Status for ${identifier} (${type}) should be ${evaluation} but is ${status}` + ); + } + } + + /** + * Make an HTTP API request to the DV360 API. + * + * @param {string} url - API endpoint to be requested + * @param {string?} method - HTTP method, e.g. GET, PATCH, etc. + * @param {Object|undefined} payload - What should be updated + * @returns {JSON} Result of the operation + */ + private fetchUrl(url: string, method = 'get', payload?: Object | undefined) { + const headers = { + Authorization: `Bearer ${this.authToken}`, + Accept: '*/*', + }; + + return this.callApi(url, headers, undefined, payload, method); + } + + /** + * Change DV360 entity status (Active/Paused) for the specified ID. + * See more: https://developers.google.com/display-video/api/reference/rest/v1/advertisers.lineItems + * See more: https://developers.google.com/display-video/api/reference/rest/v1/advertisers.insertionOrders + * + * @param {string} advertiserId DV360 Advertiser ID + * @param {string} entityId DV360 Line Item/Insertion Order ID + * @param {boolean} turnOn Activate on 'true', deactivate on 'false' + * @param {string} entity + */ + private switchEntityStatus( + advertiserId: string, + entityId: string, + turnOn: boolean, + entity: string + ) { + const newStatus = turnOn + ? DV360_ENTITY_STATUS.ACTIVE + : DV360_ENTITY_STATUS.PAUSED; + const updateMask = { + entityStatus: newStatus, + }; + + const url = `${this.baseUrl}/advertisers/${advertiserId}/${entity}/${entityId}?updateMask=entityStatus`; + + this.fetchUrl(url, 'patch', updateMask); + + Logger.log( + `* [DV360:switch ${entity}]: DONE, ID: ${entityId} new status ${newStatus}` + ); + } + + /** + * Change Insertion Order status (Active/Paused) for the specified IO ID. + * + * @param {string} advertiserId DV360 Advertiser ID + * @param {string} insertionOrderId DV360 Line Item ID + * @param {boolean} turnOn Activate IO on 'true', deactivate on 'false' + */ + private switchIOStatus( + advertiserId: string, + insertionOrderId: string, + turnOn: boolean + ) { + this.switchEntityStatus( + advertiserId, + insertionOrderId, + turnOn, + 'insertionOrders' + ); + } + + /** + * Change Line Item status (Active/Paused) for the specified LI ID. + * + * @param {string} advertiserId - DV360 Advertiser ID + * @param {string} lineItemId - DV360 Line Item ID + * @param {boolean} turnOn - Activate LI on 'true', deactivate on 'false' + */ + private switchLIStatus( + advertiserId: string, + lineItemId: string, + turnOn: boolean + ) { + const newStatus = this.switchEntityStatus( + advertiserId, + lineItemId, + turnOn, + 'lineItems' + ); + } + + /** + * Get DV360 entity for the specified ID. + * See more: https://developers.google.com/display-video/api/reference/rest/v1/advertisers.lineItems + * See more: https://developers.google.com/display-video/api/reference/rest/v1/advertisers.insertionOrders + * + * @param {string} advertiserId DV360 Advertiser ID + * @param {string} entityId DV360 Line Item/Insertion Order ID + * @param {string} entity Entity (e.g. lineItems/insertionOrders), see API refernece + * @returns {Entity} Entity object + */ + private getEntity( + advertiserId: string, + entityId: string, + entity: string + ): Entity { + const url = `${this.baseUrl}/advertisers/${advertiserId}/${entity}/${entityId}`; + + return this.fetchUrl(url) as Entity; + } + + /** + * Get DV360 entity for the specified ID. + * See more: https://developers.google.com/display-video/api/reference/rest/v1/advertisers.lineItems + * See more: https://developers.google.com/display-video/api/reference/rest/v1/advertisers.insertionOrders + * + * @param {number} advertiserId DV360 Advertiser ID + * @param {number} entityId DV360 Line Item/Insertion Order ID + * @param {string} entity Entity (e.g. lineItems/insertionOrders), see API refernece + * @returns {DV360_ENTITY_STATUS} Entity status + */ + private getEntityStatus( + advertiserId: string, + entityId: string, + entity: string + ): DV360_ENTITY_STATUS { + const e = this.getEntity(advertiserId, entityId, entity); + return e.entityStatus; + } + + /** + * Return true if the entity is active else false. + * + * @param {string} advertiserId DV360 Advertiser ID + * @param {string} lineItemId DV360 Line Item ID + * @returns {boolean} + */ + private isLIActive(advertiserId: string, lineItemId: string) { + return ( + DV360_ENTITY_STATUS.ACTIVE == + this.getEntityStatus(advertiserId, lineItemId, 'lineItems') + ); + } + + /** + * Return true if the entity is active else false. + * + * @param {string} advertiserId DV360 Advertiser ID + * @param {string} insertionOrderId DV360 Insertion Order ID + * @returns {boolean} + */ + private isIOActive(advertiserId: string, insertionOrderId: string) { + return ( + DV360_ENTITY_STATUS.ACTIVE == + this.getEntityStatus(advertiserId, insertionOrderId, 'insertionOrders') + ); + } +} diff --git a/src/target-agents/google-ads.ts b/src/target-agents/google-ads.ts new file mode 100644 index 0000000..1c94362 --- /dev/null +++ b/src/target-agents/google-ads.ts @@ -0,0 +1,431 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Auth, ServiceAccount } from '../helpers/auth'; +import { TargetAgent } from './base'; + +export enum GOOGLE_ADS_SELECTOR_TYPE { + AD_ID = 'AD_ID', + AD_LABEL = 'AD_LABEL', + AD_GROUP_ID = 'AD_GROUP_ID', + AD_GROUP_LABEL = 'AD_GROUP_LABEL', +} + +enum GOOGLE_ADS_ENTITY_STATUS { + ENABLED = 'ENABLED', + PAUSED = 'PAUSED', +} + +interface Parameters { + customerId: string; + developerToken: string; + serviceAccount?: ServiceAccount; +} + +export class GoogleAds extends TargetAgent { + static friendlyName = 'Google Ads'; + authToken?: string; + developerToken?: string; + baseUrl: string; + requiredParameters: Array = [ + 'customerId', + 'developerToken', + ]; + + constructor() { + super(); + + this.baseUrl = 'https://googleads.googleapis.com/v13'; + } + + /** + * Process entity based on evaluation. + * + * @param {string} identifier + * @param {GOOGLE_ADS_SELECTOR_TYPE} type + * @param {boolean} evaluation + * @param {Parameters} params Additional parameters + */ + process( + identifier: string, + type: GOOGLE_ADS_SELECTOR_TYPE, + evaluation: boolean, + params: Parameters + ) { + // Check for missing parameters + this.ensureRequiredParameters(params); + + const auth = new Auth(params.serviceAccount ?? undefined); + this.authToken = auth.getAuthToken(); + + this.developerToken = params.developerToken; + + const status = evaluation + ? GOOGLE_ADS_ENTITY_STATUS.ENABLED + : GOOGLE_ADS_ENTITY_STATUS.PAUSED; + + if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_ID) { + console.log(`Updating status of Ad ${identifier} to '${status}'`); + this.updateAdStatusById_( + params.customerId, + identifier.split(',').map((id) => Number(id)), + status + ); + } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_LABEL) { + this.updateAdStatusByLabel_(params.customerId, identifier, status); + } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_GROUP_ID) { + this.updateAdGroupStatusById_( + params.customerId, + identifier.split(',').map((id) => Number(id)), + status + ); + } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_GROUP_LABEL) { + console.log( + `Updating status of AdGroup by label '${identifier}' to '${status}'` + ); + this.updateAdGroupStatusByLabel_(params.customerId, identifier, status); + } + } + + /** + * Check if supposed entity status matches its actual live status. + * + * @param {string} identifier + * @param {GOOGLE_ADS_SELECTOR_TYPE} type + * @param {boolean} evaluation + * @param {Parameters} params Additional parameters + * @throws {Error} + */ + validate( + identifier: string, + type: GOOGLE_ADS_SELECTOR_TYPE, + evaluation: boolean, + params: Parameters + ) { + const auth = new Auth(params.serviceAccount ?? undefined); + this.authToken = auth.getAuthToken(); + + this.developerToken = params.developerToken; + } + + /** + * Update entity status. + * + * @param {string} path + * @param {string} resourceName + * @param {string} status + */ + private updateEntityStatus_( + path: string, + resourceName: string, + status: string + ) { + const payload = { + operations: [ + { + updateMask: 'status', + update: { + resourceName: resourceName, + status: status, + }, + }, + ], + }; + + const res = this.fetchUrl_(path, 'POST', payload); + } + + /** + * Make an HTTP API request to the Ads API. + * + * @param {string} url - API endpoint to be requested + * @param {string?} method - HTTP method, e.g. GET, PATCH, etc. + * @param {Object|undefined} payload - What should be updated + * @param {boolean} forceCache + * @returns {JSON} Result of the operation + */ + private fetchUrl_( + path: string, + method = 'get', + payload: Object, + forceCache: boolean = false + ) { + const headers = { + Authorization: `Bearer ${this.authToken}`, + Accept: '*/*', + 'developer-token': this.developerToken ?? '', + }; + + const url = `${this.baseUrl}/${path}`; + return this.callApi( + url, + headers, + undefined, + payload, + method, + undefined, + forceCache + ); + } + + /** + * Update Ad status by ID(s). + * + * @param {string} customerId + * @param {Array} ids + * @param {string} status + */ + private updateAdStatusById_( + customerId: string, + ids: Array, + status: string + ) { + const ads = this.getAdsById_(customerId, ids); + const path = `customers/${customerId}/adGroupAds:mutate`; + + for (const ad of ads) { + this.updateEntityStatus_(path, ad, status); + } + } + + /** + * Update AdGroup status by ID(s). + * + * @param {string} customerId + * @param {Array} ids + * @param {string} status + */ + private updateAdGroupStatusById_( + customerId: string, + ids: Array, + status: string + ) { + const adGroups = this.getAdGroupsById_(customerId, ids); + const path = `customers/${customerId}/adGroup:mutate`; + + for (const adGroup of adGroups) { + this.updateEntityStatus_(path, adGroup, status); + } + } + + /** + * Update Ad status by label. + * + * @param {string} customerId + * @param {string} label + * @param {string} status + */ + private updateAdStatusByLabel_( + customerId: string, + label: string, + status: string + ) { + const ads = this.getAdsByLabel_(customerId, label); + const path = `customers/${customerId}/adGroupAds:mutate`; + + for (const ad of ads) { + this.updateEntityStatus_(path, ad, status); + } + } + + /** + * Update AdGroup status by label. + * + * @param {string} customerId + * @param {string} label + * @param {string} status + */ + private updateAdGroupStatusByLabel_( + customerId: string, + label: string, + status: string + ) { + const adGroups = this.getAdGroupsByLabel_(customerId, label); + + const path = `customers/${customerId}/adGroups:mutate`; + + for (const adGroup of adGroups) { + this.updateEntityStatus_(path, adGroup, status); + } + } + + /** + * Get Ads status by ID(s). + * + * @param {string} customerId + * @param {Array} ids + * @returns {Array} + */ + getAdsById_(customerId: any, ids: Array): Array { + const query = ` + SELECT + ad_group_ad.ad.id + FROM ad_group_ad + WHERE + ad_group_ad.ad.id IN (${ids.join(',')}) + `; + + const payload = { + query, + }; + + const path = `customers/${customerId}/googleAds:search`; + const res = this.fetchUrl_(path, 'POST', payload, true) as Record< + string, + Array> + >; + + return res.results.map((result: any) => result.adGroupAd.resourceName); + } + + /** + * Get AdGroups status by ID(s). + * + * @param {string} customerId + * @param {Array} ids + * @returns {Array} + */ + private getAdGroupsById_( + customerId: string, + ids: Array + ): Array { + const query = ` + SELECT + ad_group.id + FROM ad_group + WHERE + ad_group.id IN (${ids.join(',')}) + `; + + const payload = { + query, + }; + + const path = `customers/${customerId}/googleAds:search`; + const res = this.fetchUrl_(path, 'POST', payload, true) as any; + + return res.results.map((result: any) => result.adGroup.resourceName); + } + + /** + * Get Ads resource names by labels. + * + * @param {string} customerId + * @param {Array} ids + * @returns {Array} + */ + private getAdsByLabel_(customerId: any, label: string): Array { + const labelResource = this.getAdLabelByName_(customerId, label); + + const query = ` + SELECT + ad_group_ad.ad.id + FROM ad_group_ad + WHERE + ad_group_ad.labels CONTAINS ANY ('${labelResource}') + `; + + const payload = { + query, + }; + + const path = `customers/${customerId}/googleAds:search`; + const res = this.fetchUrl_(path, 'POST', payload, true) as any; + + return res.results.map((result: any) => result.adGroupAd.resourceName); + } + + /** + * Get Ad label by name. + * + * @param {string} customerId + * @param {string} labelName + * @returns {string} + */ + private getAdLabelByName_(customerId: string, labelName: string) { + const query = ` + SELECT + label.resource_name + FROM ad_group_ad_label + WHERE + label.name = '${labelName}' + `; + + const payload = { + query, + }; + + const path = `customers/${customerId}/googleAds:search`; + const res = this.fetchUrl_(path, 'POST', payload, true) as any; + + return res.results[0].label.resourceName; + } + + /** + * Get AdGroups resource names by labels. + * + * @param {string} customerId + * @param {Array} ids + * @returns {Array} + */ + private getAdGroupsByLabel_(customerId: any, label: string): Array { + const labelResource = this.getAdGroupLabelByName_(customerId, label); + + const query = ` + SELECT + ad_group.id + FROM ad_group + WHERE + ad_group.labels CONTAINS ANY ('${labelResource}') + `; + + const payload = { + query, + }; + + const path = `customers/${customerId}/googleAds:search`; + const res = this.fetchUrl_(path, 'POST', payload, true) as any; + + return res.results.map((result: any) => result.adGroup.resourceName); + } + + /** + * Get AdGroup label by name. + * + * @param {string} customerId + * @param {string} labelName + * @returns {string} + */ + private getAdGroupLabelByName_(customerId: string, labelName: string) { + const query = ` + SELECT + label.resource_name + FROM ad_group_label + WHERE + label.name = '${labelName}' + `; + + const payload = { + query, + }; + + const path = `customers/${customerId}/googleAds:search`; + const res = this.fetchUrl_(path, 'POST', payload, true) as any; + + return res.results[0].label.resourceName; + } +} diff --git a/src/target-agents/index.ts b/src/target-agents/index.ts new file mode 100644 index 0000000..cb49b4e --- /dev/null +++ b/src/target-agents/index.ts @@ -0,0 +1,21 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { DV360 } from './dv360'; +import { GoogleAds } from './google-ads'; + +export const AVAILABLE_AGENTS = [DV360, GoogleAds]; diff --git a/src/test/api.test.ts b/src/test/api.test.ts new file mode 100644 index 0000000..bfd3d13 --- /dev/null +++ b/src/test/api.test.ts @@ -0,0 +1,32 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ApiHelper } from '../helpers/api'; + +test('Convert object into correct URL query string', () => { + const params = { + one: 1, + two: 2, + three: [4, 5], + }; + + const helper = new ApiHelper(); + + const query = helper.objectToUrlQuery('', params); + + expect(query).toEqual('?one=1&two=2&three=4&three=5'); +}); diff --git a/src/test/dynamic-column-headers.test.ts b/src/test/dynamic-column-headers.test.ts new file mode 100644 index 0000000..26dacd9 --- /dev/null +++ b/src/test/dynamic-column-headers.test.ts @@ -0,0 +1,148 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { DynamicColumnHeaders } from '../helpers/dynamic-column-headers'; + +const headers = [ + 'One', + 'Two', + 'source:headers.x-api-key', + 'source:headers.x-debug', + 'source:params.lat', + 'source:params.lng', + 'custom:variable', + 'result:data.test', +]; + +const headersMultipleGroups = [ + 'One', + 'Two', + 'source.1:headers.x-api-key', + 'source.2:headers.x-debug', + 'source.1:params.lat', + 'source.2:params.lng', + 'custom:variable', + 'result:data.test', +]; + +const row = ['1', '2', 'abc123', 'hello', '12.34', '45.67']; + +test('Get mapped values for namespace', () => { + const columnHeaderHelper = new DynamicColumnHeaders(headers); + const mappedValues = columnHeaderHelper.getMappedValues(row, 'source'); + + const expected = { + '0': { + headers: { + 'x-api-key': 'abc123', + 'x-debug': 'hello', + }, + params: { + lat: '12.34', + lng: '45.67', + }, + }, + }; + + expect(mappedValues).toStrictEqual(expected); +}); + +test('Get mapped values for namespace without groups included', () => { + const columnHeaderHelper = new DynamicColumnHeaders(headers); + const mappedValues = columnHeaderHelper.getMappedValues(row, 'source', false); + + const expected = { + headers: { + 'x-api-key': 'abc123', + 'x-debug': 'hello', + }, + params: { + lat: '12.34', + lng: '45.67', + }, + }; + + expect(mappedValues).toStrictEqual(expected); +}); + +test('Get mapped values for namespace with multiple groups', () => { + const columnHeaderHelper = new DynamicColumnHeaders(headersMultipleGroups); + const mappedValues = columnHeaderHelper.getMappedValues(row, 'source'); + + const expected = { + '1': { + headers: { + 'x-api-key': 'abc123', + }, + params: { + lat: '12.34', + }, + }, + '2': { + headers: { + 'x-debug': 'hello', + }, + params: { + lng: '45.67', + }, + }, + }; + + expect(mappedValues).toStrictEqual(expected); +}); + +test('Get mapped values for all namespaces and multiple groups', () => { + const columnHeaderHelper = new DynamicColumnHeaders(headersMultipleGroups); + const mappedValues = columnHeaderHelper.getMappedValues(row); + + const expected = { + source: { + '1': { + headers: { + 'x-api-key': 'abc123', + }, + params: { + lat: '12.34', + }, + }, + '2': { + headers: { + 'x-debug': 'hello', + }, + params: { + lng: '45.67', + }, + }, + }, + }; + + expect(mappedValues).toStrictEqual(expected); +}); + +test('Return -1 for first column with namespace for none existing namespace', () => { + const columnHeaderHelper = new DynamicColumnHeaders(headers); + const index = columnHeaderHelper.getFirstColWithNamespace('res'); + + expect(index).toBe(-1); +}); + +test('Find first column with namespace', () => { + const columnHeaderHelper = new DynamicColumnHeaders(headers); + const index = columnHeaderHelper.getFirstColWithNamespace('result'); + + expect(index).toBe(7); +}); diff --git a/src/test/jpath.test.ts b/src/test/jpath.test.ts new file mode 100644 index 0000000..f38622d --- /dev/null +++ b/src/test/jpath.test.ts @@ -0,0 +1,84 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { JPath } from '../helpers/jpath'; + +test('Set value in correct location in empty object', () => { + const path = 'header.api-key'; + const value = 'abc123'; + const obj = {}; + const expected = { + header: { + 'api-key': 'abc123', + }, + }; + + const res = JPath.setValue(obj, path, value); + + expect(res).toEqual(expected); +}); + +test('Set value in correct location with existing properties', () => { + const path = 'header.api-key'; + const value = 'abc123'; + const obj = { + test: 1, + header: { + token: 'secret', + }, + }; + const expected = { + test: 1, + header: { + token: 'secret', + 'api-key': 'abc123', + }, + }; + + const res = JPath.setValue(obj, path, value); + + expect(res).toEqual(expected); +}); + +test('Extract value from JSON', () => { + const data = { + one: { + two: 2, + }, + }; + const res = JPath.getValue('one.two', data); + + expect(res).toBe(2); +}); + +test('Extract aggregated value from JSON (min)', () => { + const data = { + one: [1, 2, 3], + }; + const res = JPath.getValue('one.!MIN', data); + + expect(res).toBe(1); +}); + +test('Extract aggregated value from JSON (max)', () => { + const data = { + one: [1, 2, 3], + }; + const res = JPath.getValue('one.!MAX', data); + + expect(res).toBe(3); +}); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..08ea316 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,103 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2020", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + "lib": ["es2020"], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "es2020", /* Specify what module code is generated. */ + "rootDir": "src/", /* Specify the root folder within your source files. */ + // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + "outDir": "./build", /* Specify an output folder for all emitted files. */ + "removeComments": false, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +} From 0183214e9fbda0cea847f43b24e611b8733807db Mon Sep 17 00:00:00 2001 From: paranerd Date: Mon, 6 Mar 2023 20:00:53 +0100 Subject: [PATCH 06/84] Improved validation log output --- src/index.ts | 30 ++++++--- src/target-agents/agent.sample.ts | 6 +- src/target-agents/base.ts | 4 +- src/target-agents/dv360.ts | 9 +-- src/target-agents/google-ads.ts | 107 ++++++++++++++++++++++++------ 5 files changed, 120 insertions(+), 36 deletions(-) diff --git a/src/index.ts b/src/index.ts index 4be4466..6e9b36d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -121,7 +121,7 @@ function main(mode: MODE) { // Handle every row rows.forEach((row: Array, index: number) => { - console.log(`Processing row ${index + 1}`); + console.log(`Processing row ${index + 1}/${rows.length}`); // Check if update is due let lastUpdate = Number(row[CONFIG.rules.cols.lastUpdate]); @@ -234,7 +234,7 @@ function main(mode: MODE) { * Validate that the Sheet and target entities are in sync. */ function validate() { - const errors: Array = []; + let errors: Array = []; // Get all rows from the sheet const rows = getSheetsService().getRangeData(CONFIG.rules.sheetName, 1, 1); @@ -245,6 +245,7 @@ function validate() { // Handle every row rows.forEach((row: Array, index: number) => { + console.log(`Validating row ${index + 1}/${rows.length}`); try { const evaluation = getSheetsService().getCellValue( CONFIG.rules.sheetName, @@ -256,22 +257,33 @@ function validate() { const params = columnHeaderHelper.getMappedValues( row, - CONFIG.targetNamespace + CONFIG.targetNamespace, + false ); - getTargetAgent(row[CONFIG.rules.cols.targetAgent]).validate( - row[CONFIG.rules.cols.targetId], - row[CONFIG.rules.cols.targetIdType], - evaluation, - params + errors = errors.concat( + getTargetAgent(row[CONFIG.rules.cols.targetAgent]).validate( + row[CONFIG.rules.cols.targetId], + row[CONFIG.rules.cols.targetIdType], + evaluation, + params + ) ); } catch (err) { errors.push(JSON.stringify((err as Error).message)); } }); + // Log results + console.log(); + console.log('### Validation Results ###'); + console.log(`Valid rows: ${rows.length - errors.length}/${rows.length}`); + if (errors.length) { - throw errors.join('\n'); + console.log(); + console.log('Result details:'); + + errors.forEach((error) => console.log(error)); } } diff --git a/src/target-agents/agent.sample.ts b/src/target-agents/agent.sample.ts index 807cae7..f3d755c 100644 --- a/src/target-agents/agent.sample.ts +++ b/src/target-agents/agent.sample.ts @@ -51,12 +51,14 @@ export class Sample extends TargetAgent { * @param {string} type * @param {boolean} evaluation * @param {Parameters} params Additional parameters - * @throws {Error} + * @returns {Array}‚ */ validate( identifier: string, type: string, evaluation: boolean, params: Parameters - ) {} + ) { + return []; + } } diff --git a/src/target-agents/base.ts b/src/target-agents/base.ts index 2726c5b..84c8f08 100644 --- a/src/target-agents/base.ts +++ b/src/target-agents/base.ts @@ -38,7 +38,9 @@ export class TargetAgent extends ApiHelper { type: string, evaluation: boolean, params: Object - ) {} + ): Array { + throw new Error('Method not implemented.'); + } /** * Find missing required parameters exist in object. diff --git a/src/target-agents/dv360.ts b/src/target-agents/dv360.ts index 9706b90..f8f4c2f 100644 --- a/src/target-agents/dv360.ts +++ b/src/target-agents/dv360.ts @@ -79,8 +79,6 @@ export class DV360 extends TargetAgent { const auth = new Auth(params.serviceAccount ?? undefined); this.authToken = auth.getAuthToken(); - console.log('Switching', identifier, type, evaluation); - if (type === DV360_ENTITY_TYPE.LINE_ITEM) { this.switchLIStatus(params.advertiserId, identifier, evaluation); } else if (type === DV360_ENTITY_TYPE.INSERTION_ORDER) { @@ -95,7 +93,7 @@ export class DV360 extends TargetAgent { * @param {DV360_ENTITY_TYPE} type * @param {boolean} evaluation * @param {Parameters} params Additional parameters - * @throws {Error} + * @returns {Array} */ validate( identifier: string, @@ -110,6 +108,7 @@ export class DV360 extends TargetAgent { this.authToken = auth.getAuthToken(); let status; + const errors = []; if (type === DV360_ENTITY_TYPE.LINE_ITEM) { status = this.isLIActive(params.advertiserId, identifier); @@ -118,10 +117,12 @@ export class DV360 extends TargetAgent { } if (evaluation !== status) { - throw Error( + errors.push( `Status for ${identifier} (${type}) should be ${evaluation} but is ${status}` ); } + + return errors; } /** diff --git a/src/target-agents/google-ads.ts b/src/target-agents/google-ads.ts index 1c94362..9704d84 100644 --- a/src/target-agents/google-ads.ts +++ b/src/target-agents/google-ads.ts @@ -36,6 +36,11 @@ interface Parameters { serviceAccount?: ServiceAccount; } +interface Entity { + resourceName: string; + status: GOOGLE_ADS_ENTITY_STATUS; +} + export class GoogleAds extends TargetAgent { static friendlyName = 'Google Ads'; authToken?: string; @@ -101,6 +106,8 @@ export class GoogleAds extends TargetAgent { } } + areAdsEnabled() {} + /** * Check if supposed entity status matches its actual live status. * @@ -108,7 +115,7 @@ export class GoogleAds extends TargetAgent { * @param {GOOGLE_ADS_SELECTOR_TYPE} type * @param {boolean} evaluation * @param {Parameters} params Additional parameters - * @throws {Error} + * @returns {Array} */ validate( identifier: string, @@ -120,26 +127,62 @@ export class GoogleAds extends TargetAgent { this.authToken = auth.getAuthToken(); this.developerToken = params.developerToken; + + const expectedStatus = evaluation + ? GOOGLE_ADS_ENTITY_STATUS.ENABLED + : GOOGLE_ADS_ENTITY_STATUS.PAUSED; + let entitiesToBeChecked: Array = []; + const errors: Array = []; + + if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_ID) { + entitiesToBeChecked = entitiesToBeChecked.concat( + this.getAdsById_( + params.customerId, + identifier.split(',').map((id) => Number(id)) + ) + ); + } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_LABEL) { + entitiesToBeChecked = entitiesToBeChecked.concat( + this.getAdsByLabel_(params.customerId, identifier) + ); + } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_GROUP_ID) { + entitiesToBeChecked = entitiesToBeChecked.concat( + this.getAdGroupsById_( + params.customerId, + identifier.split(',').map((id) => Number(id)) + ) + ); + } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_GROUP_LABEL) { + entitiesToBeChecked = entitiesToBeChecked.concat( + this.getAdGroupsByLabel_(params.customerId, identifier) + ); + } + + for (const entity of entitiesToBeChecked) { + if (entity.status !== expectedStatus) { + errors.push( + `Status for ${identifier} (${type}) should be ${expectedStatus} but is ${entity.status}` + ); + } + } + + return errors; } /** * Update entity status. * * @param {string} path - * @param {string} resourceName + * @param {Entity} entity * @param {string} status */ - private updateEntityStatus_( - path: string, - resourceName: string, - status: string - ) { + private updateEntityStatus_(path: string, entity: Entity, status: string) { const payload = { operations: [ { updateMask: 'status', update: { - resourceName: resourceName, + resourceName: entity.resourceName, status: status, }, }, @@ -270,10 +313,11 @@ export class GoogleAds extends TargetAgent { * @param {Array} ids * @returns {Array} */ - getAdsById_(customerId: any, ids: Array): Array { + getAdsById_(customerId: any, ids: Array): Array { const query = ` SELECT - ad_group_ad.ad.id + ad_group_ad.ad.id, + ad_group_ad.status FROM ad_group_ad WHERE ad_group_ad.ad.id IN (${ids.join(',')}) @@ -289,7 +333,12 @@ export class GoogleAds extends TargetAgent { Array> >; - return res.results.map((result: any) => result.adGroupAd.resourceName); + return res.results.map((result: any) => { + return { + resourceName: result.adGroupAd.resourceName, + status: result.adGroupAd.status, + }; + }); } /** @@ -302,10 +351,11 @@ export class GoogleAds extends TargetAgent { private getAdGroupsById_( customerId: string, ids: Array - ): Array { + ): Array { const query = ` SELECT - ad_group.id + ad_group.id, + ad_group.status FROM ad_group WHERE ad_group.id IN (${ids.join(',')}) @@ -318,7 +368,12 @@ export class GoogleAds extends TargetAgent { const path = `customers/${customerId}/googleAds:search`; const res = this.fetchUrl_(path, 'POST', payload, true) as any; - return res.results.map((result: any) => result.adGroup.resourceName); + return res.results.map((result: any) => { + return { + resourceName: result.adGroup.resourceName, + status: result.adGroup.status, + }; + }); } /** @@ -328,12 +383,13 @@ export class GoogleAds extends TargetAgent { * @param {Array} ids * @returns {Array} */ - private getAdsByLabel_(customerId: any, label: string): Array { + private getAdsByLabel_(customerId: any, label: string): Array { const labelResource = this.getAdLabelByName_(customerId, label); const query = ` SELECT - ad_group_ad.ad.id + ad_group_ad.ad.id, + ad_group_ad.status FROM ad_group_ad WHERE ad_group_ad.labels CONTAINS ANY ('${labelResource}') @@ -346,7 +402,12 @@ export class GoogleAds extends TargetAgent { const path = `customers/${customerId}/googleAds:search`; const res = this.fetchUrl_(path, 'POST', payload, true) as any; - return res.results.map((result: any) => result.adGroupAd.resourceName); + return res.results.map((result: any) => { + return { + resourceName: result.adGroupAd.resourceName, + status: result.adGroupAd.status, + }; + }); } /** @@ -382,12 +443,13 @@ export class GoogleAds extends TargetAgent { * @param {Array} ids * @returns {Array} */ - private getAdGroupsByLabel_(customerId: any, label: string): Array { + private getAdGroupsByLabel_(customerId: any, label: string): Array { const labelResource = this.getAdGroupLabelByName_(customerId, label); const query = ` SELECT - ad_group.id + ad_group.id, + ad_group.status FROM ad_group WHERE ad_group.labels CONTAINS ANY ('${labelResource}') @@ -400,7 +462,12 @@ export class GoogleAds extends TargetAgent { const path = `customers/${customerId}/googleAds:search`; const res = this.fetchUrl_(path, 'POST', payload, true) as any; - return res.results.map((result: any) => result.adGroup.resourceName); + return res.results.map((result: any) => { + return { + resultName: result.adGroup.resourceName, + status: result.adGroup.status, + }; + }); } /** From 4fbdb4b6b659e1b0e81b2b61cb12db6111eb08ef Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 7 Mar 2023 10:43:41 +0100 Subject: [PATCH 07/84] Added tests and removed debug code --- src/index.ts | 29 ----- src/target-agents/dv360.ts | 101 +++++++-------- src/target-agents/google-ads.ts | 6 +- src/test/dv360.test.ts | 69 +++++++++++ src/test/google-ads.test.ts | 210 ++++++++++++++++++++++++++++++++ 5 files changed, 323 insertions(+), 92 deletions(-) create mode 100644 src/test/dv360.test.ts create mode 100644 src/test/google-ads.test.ts diff --git a/src/index.ts b/src/index.ts index 6e9b36d..24d84c1 100644 --- a/src/index.ts +++ b/src/index.ts @@ -24,35 +24,6 @@ import { Utils } from './helpers/utils'; import { TargetAgent } from './target-agents/base'; import { AVAILABLE_AGENTS } from './target-agents/index'; -// TODO: Remove me! -function teamHasWonInPastXDays(fixtures: any, params: any) { - return fixtures.response.some((item: any) => { - return ( - item.fixture.status.short === 'FT' && - ((item.teams.home.id == params.teamId && - item.teams.home.winner === true) || - (item.teams.away.id == params.teamId && - item.teams.away.winner === true)) && - item.fixture.timestamp * 1000 > params.lookAroundDays - ); - }); -} - -// TODO: Remove me! -function teamIsPlayingWithinNextXDays(fixtures: any, params: any) { - const now = new Date(); - const maxFuture = new Date(now.valueOf()).setDate( - now.getDate() + params.lookAroundDays - ); - - return fixtures.response.some((item: any) => { - return ( - item.fixture.timestamp * 1000 > now.getTime() && - item.fixture.timestamp * 1000 < maxFuture - ); - }); -} - enum MODE { FETCH = 0, SYNC = 1, diff --git a/src/target-agents/dv360.ts b/src/target-agents/dv360.ts index f8f4c2f..4d2ea6e 100644 --- a/src/target-agents/dv360.ts +++ b/src/target-agents/dv360.ts @@ -18,12 +18,12 @@ import { Auth } from '../helpers/auth'; import { TargetAgent } from './base'; -enum DV360_ENTITY_STATUS { +export enum DV360_ENTITY_STATUS { ACTIVE = 'ENTITY_STATUS_ACTIVE', PAUSED = 'ENTITY_STATUS_PAUSED', } -enum DV360_ENTITY_TYPE { +export enum DV360_ENTITY_TYPE { LINE_ITEM = 'LINE_ITEM', INSERTION_ORDER = 'INSERTION_ORDER', } @@ -44,7 +44,7 @@ export class DV360 extends TargetAgent { static friendlyName = 'DV360'; authToken?: string; baseUrl: string; - requiredParameters = ['id', 'type', 'advertiserId']; + requiredParameters = ['advertiserId']; /** * Set the DV360 wrapper configuration @@ -80,9 +80,9 @@ export class DV360 extends TargetAgent { this.authToken = auth.getAuthToken(); if (type === DV360_ENTITY_TYPE.LINE_ITEM) { - this.switchLIStatus(params.advertiserId, identifier, evaluation); + this.switchLIStatus_(params.advertiserId, identifier, evaluation); } else if (type === DV360_ENTITY_TYPE.INSERTION_ORDER) { - this.switchIOStatus(params.advertiserId, identifier, evaluation); + this.switchIOStatus_(params.advertiserId, identifier, evaluation); } } @@ -111,9 +111,9 @@ export class DV360 extends TargetAgent { const errors = []; if (type === DV360_ENTITY_TYPE.LINE_ITEM) { - status = this.isLIActive(params.advertiserId, identifier); + status = this.isLIActive_(params.advertiserId, identifier); } else if (type === DV360_ENTITY_TYPE.INSERTION_ORDER) { - status = this.isIOActive(params.advertiserId, identifier); + status = this.isIOActive_(params.advertiserId, identifier); } if (evaluation !== status) { @@ -133,7 +133,7 @@ export class DV360 extends TargetAgent { * @param {Object|undefined} payload - What should be updated * @returns {JSON} Result of the operation */ - private fetchUrl(url: string, method = 'get', payload?: Object | undefined) { + private fetchUrl_(url: string, method = 'get', payload?: Object | undefined) { const headers = { Authorization: `Bearer ${this.authToken}`, Accept: '*/*', @@ -152,7 +152,7 @@ export class DV360 extends TargetAgent { * @param {boolean} turnOn Activate on 'true', deactivate on 'false' * @param {string} entity */ - private switchEntityStatus( + private switchEntityStatus_( advertiserId: string, entityId: string, turnOn: boolean, @@ -167,50 +167,50 @@ export class DV360 extends TargetAgent { const url = `${this.baseUrl}/advertisers/${advertiserId}/${entity}/${entityId}?updateMask=entityStatus`; - this.fetchUrl(url, 'patch', updateMask); + this.fetchUrl_(url, 'patch', updateMask); - Logger.log( + console.log( `* [DV360:switch ${entity}]: DONE, ID: ${entityId} new status ${newStatus}` ); } /** - * Change Insertion Order status (Active/Paused) for the specified IO ID. + * Change Line Item status (Active/Paused) for the specified LI ID. * - * @param {string} advertiserId DV360 Advertiser ID - * @param {string} insertionOrderId DV360 Line Item ID - * @param {boolean} turnOn Activate IO on 'true', deactivate on 'false' + * @param {string} advertiserId - DV360 Advertiser ID + * @param {string} lineItemId - DV360 Line Item ID + * @param {boolean} turnOn - Activate LI on 'true', deactivate on 'false' */ - private switchIOStatus( + private switchLIStatus_( advertiserId: string, - insertionOrderId: string, + lineItemId: string, turnOn: boolean ) { - this.switchEntityStatus( + const newStatus = this.switchEntityStatus_( advertiserId, - insertionOrderId, + lineItemId, turnOn, - 'insertionOrders' + 'lineItems' ); } /** - * Change Line Item status (Active/Paused) for the specified LI ID. + * Change Insertion Order status (Active/Paused) for the specified IO ID. * - * @param {string} advertiserId - DV360 Advertiser ID - * @param {string} lineItemId - DV360 Line Item ID - * @param {boolean} turnOn - Activate LI on 'true', deactivate on 'false' + * @param {string} advertiserId DV360 Advertiser ID + * @param {string} insertionOrderId DV360 Line Item ID + * @param {boolean} turnOn Activate IO on 'true', deactivate on 'false' */ - private switchLIStatus( + private switchIOStatus_( advertiserId: string, - lineItemId: string, + insertionOrderId: string, turnOn: boolean ) { - const newStatus = this.switchEntityStatus( + this.switchEntityStatus_( advertiserId, - lineItemId, + insertionOrderId, turnOn, - 'lineItems' + 'insertionOrders' ); } @@ -224,33 +224,14 @@ export class DV360 extends TargetAgent { * @param {string} entity Entity (e.g. lineItems/insertionOrders), see API refernece * @returns {Entity} Entity object */ - private getEntity( + private getEntity_( advertiserId: string, entityId: string, entity: string ): Entity { const url = `${this.baseUrl}/advertisers/${advertiserId}/${entity}/${entityId}`; - return this.fetchUrl(url) as Entity; - } - - /** - * Get DV360 entity for the specified ID. - * See more: https://developers.google.com/display-video/api/reference/rest/v1/advertisers.lineItems - * See more: https://developers.google.com/display-video/api/reference/rest/v1/advertisers.insertionOrders - * - * @param {number} advertiserId DV360 Advertiser ID - * @param {number} entityId DV360 Line Item/Insertion Order ID - * @param {string} entity Entity (e.g. lineItems/insertionOrders), see API refernece - * @returns {DV360_ENTITY_STATUS} Entity status - */ - private getEntityStatus( - advertiserId: string, - entityId: string, - entity: string - ): DV360_ENTITY_STATUS { - const e = this.getEntity(advertiserId, entityId, entity); - return e.entityStatus; + return this.fetchUrl_(url) as Entity; } /** @@ -260,11 +241,10 @@ export class DV360 extends TargetAgent { * @param {string} lineItemId DV360 Line Item ID * @returns {boolean} */ - private isLIActive(advertiserId: string, lineItemId: string) { - return ( - DV360_ENTITY_STATUS.ACTIVE == - this.getEntityStatus(advertiserId, lineItemId, 'lineItems') - ); + private isLIActive_(advertiserId: string, lineItemId: string) { + const entity = this.getEntity_(advertiserId, lineItemId, 'lineItems'); + + return DV360_ENTITY_STATUS.ACTIVE == entity.entityStatus; } /** @@ -274,10 +254,13 @@ export class DV360 extends TargetAgent { * @param {string} insertionOrderId DV360 Insertion Order ID * @returns {boolean} */ - private isIOActive(advertiserId: string, insertionOrderId: string) { - return ( - DV360_ENTITY_STATUS.ACTIVE == - this.getEntityStatus(advertiserId, insertionOrderId, 'insertionOrders') + private isIOActive_(advertiserId: string, insertionOrderId: string) { + const entity = this.getEntity_( + advertiserId, + insertionOrderId, + 'insertionOrders' ); + + return DV360_ENTITY_STATUS.ACTIVE == entity.entityStatus; } } diff --git a/src/target-agents/google-ads.ts b/src/target-agents/google-ads.ts index 9704d84..2682f4a 100644 --- a/src/target-agents/google-ads.ts +++ b/src/target-agents/google-ads.ts @@ -25,7 +25,7 @@ export enum GOOGLE_ADS_SELECTOR_TYPE { AD_GROUP_LABEL = 'AD_GROUP_LABEL', } -enum GOOGLE_ADS_ENTITY_STATUS { +export enum GOOGLE_ADS_ENTITY_STATUS { ENABLED = 'ENABLED', PAUSED = 'PAUSED', } @@ -106,8 +106,6 @@ export class GoogleAds extends TargetAgent { } } - areAdsEnabled() {} - /** * Check if supposed entity status matches its actual live status. * @@ -313,7 +311,7 @@ export class GoogleAds extends TargetAgent { * @param {Array} ids * @returns {Array} */ - getAdsById_(customerId: any, ids: Array): Array { + private getAdsById_(customerId: any, ids: Array): Array { const query = ` SELECT ad_group_ad.ad.id, diff --git a/src/test/dv360.test.ts b/src/test/dv360.test.ts new file mode 100644 index 0000000..12c2818 --- /dev/null +++ b/src/test/dv360.test.ts @@ -0,0 +1,69 @@ +import { Auth } from '../helpers/auth'; +import { DV360, DV360_ENTITY_TYPE } from '../target-agents/dv360'; + +describe('DV360 Target Agent', () => { + const params = { + advertiserId: '1', + }; + + describe('process', () => { + beforeEach(() => { + jest.spyOn(Auth.prototype, 'getAuthToken').mockReturnValue(''); + }); + + it('Updates Line Item correctly', () => { + const dv360 = new DV360(); + + // Set up spies + jest.spyOn(DV360.prototype as any, 'fetchUrl_').mockReturnValue(null); + + const switchLIStatusSpy = jest.spyOn( + DV360.prototype as any, + 'switchLIStatus_' + ); + + const switchEntityStatusSpy = jest.spyOn( + DV360.prototype as any, + 'switchEntityStatus_' + ); + + // Call function + dv360.process('1234', DV360_ENTITY_TYPE.LINE_ITEM, true, params); + + // Evaluate + expect(switchLIStatusSpy).toHaveBeenCalledWith('1', '1234', true); + expect(switchEntityStatusSpy).toHaveBeenCalledWith( + '1', + '1234', + true, + 'lineItems' + ); + }); + }); + + describe('validate', () => { + it('Validates Line Items status match correctly', () => { + const dv360 = new DV360(); + + const lineItem = { + entityStatus: 'ENTITY_STATUS_ACTIVE', + }; + + // Set up spies + jest.spyOn(DV360.prototype as any, 'fetchUrl_').mockReturnValue(lineItem); + const isLIActiveSpy = jest.spyOn(DV360.prototype as any, 'isLIActive_'); + const getEntitySpy = jest.spyOn(DV360.prototype as any, 'getEntity_'); + const fetchUrlSpy = jest.spyOn(DV360.prototype as any, 'fetchUrl_'); + + // Call function + dv360.validate('1234', DV360_ENTITY_TYPE.LINE_ITEM, true, params); + + // Evaluate + expect(isLIActiveSpy).toHaveBeenCalledWith('1', '1234'); + expect(getEntitySpy).toHaveBeenCalledWith('1', '1234', 'lineItems'); + expect(fetchUrlSpy).toHaveBeenCalledWith( + 'https://displayvideo.googleapis.com/v1/advertisers/1/lineItems/1234' + ); + }); + }); +}); diff --git a/src/test/google-ads.test.ts b/src/test/google-ads.test.ts new file mode 100644 index 0000000..30a2f9d --- /dev/null +++ b/src/test/google-ads.test.ts @@ -0,0 +1,210 @@ +import { ApiHelper } from '../helpers/api'; +import { Auth } from '../helpers/auth'; +import { + GoogleAds, + GOOGLE_ADS_ENTITY_STATUS, + GOOGLE_ADS_SELECTOR_TYPE, +} from '../target-agents/google-ads'; + +describe('Google Ads Target Agent', () => { + const params = { + customerId: '1', + developerToken: 'token', + }; + + const singleAdByIdRaw = { + results: [ + { + adGroupAd: { + resourceName: 'customers/1/adGroupAds/1111~1234', + status: 'ENABLED', + ad: { + resourceName: 'customers/1/ads/1234', + id: '1234', + }, + }, + }, + ], + fieldMask: 'adGroupAd.ad.id,adGroupAd.status', + }; + + const singleAdById = { + resourceName: 'customers/1/adGroupAds/1111~1234', + status: 'ENABLED', + }; + + const multipleAdsByIdRaw = { + results: [ + { + adGroupAd: { + resourceName: 'customers/1/adGroupAds/1111~1234', + status: 'ENABLED', + ad: { + resourceName: 'customers/1/ads/1234', + id: '1234', + }, + }, + }, + ], + fieldMask: 'adGroupAd.ad.id,adGroupAd.status', + }; + + describe('process', () => { + beforeEach(() => { + jest.spyOn(Auth.prototype, 'getAuthToken').mockReturnValue(''); + }); + + it('Updates Ad correctly with single ID', () => { + const ads = new GoogleAds(); + + // Set up spies + const fetchUrlSpy = jest.spyOn(GoogleAds.prototype as any, 'fetchUrl_'); + + jest + .spyOn(GoogleAds.prototype as any, 'fetchUrl_') + .mockReturnValue(singleAdByIdRaw); + + const updateAdStatusByIdSpy = jest.spyOn( + GoogleAds.prototype as any, + 'updateAdStatusById_' + ); + + const updateEntityStatusSpy = jest.spyOn( + GoogleAds.prototype as any, + 'updateEntityStatus_' + ); + + const getAdsByIdSpy = jest.spyOn( + GoogleAds.prototype as any, + 'getAdsById_' + ); + + // Call function + ads.process('1234', GOOGLE_ADS_SELECTOR_TYPE.AD_ID, true, params); + + // Evaluate + expect(updateAdStatusByIdSpy).toHaveBeenCalledWith( + '1', + [1234], + GOOGLE_ADS_ENTITY_STATUS.ENABLED + ); + + expect(getAdsByIdSpy).toHaveBeenCalledWith('1', [1234]); + + expect(updateEntityStatusSpy).toHaveBeenCalledWith( + 'customers/1/adGroupAds:mutate', + singleAdById, + GOOGLE_ADS_ENTITY_STATUS.ENABLED + ); + + expect(fetchUrlSpy).toHaveBeenCalledTimes(2); + }); + + it('Updates Ads correctly with multiple IDs', () => { + const ads = new GoogleAds(); + + // Set up spies + const fetchUrlSpy = jest.spyOn(GoogleAds.prototype as any, 'fetchUrl_'); + + jest + .spyOn(GoogleAds.prototype as any, 'fetchUrl_') + .mockReturnValue(singleAdByIdRaw); + + const updateAdStatusByIdSpy = jest.spyOn( + GoogleAds.prototype as any, + 'updateAdStatusById_' + ); + + const updateEntityStatusSpy = jest.spyOn( + GoogleAds.prototype as any, + 'updateEntityStatus_' + ); + + const getAdsByIdSpy = jest.spyOn( + GoogleAds.prototype as any, + 'getAdsById_' + ); + + // Call function + ads.process('1234,2345', GOOGLE_ADS_SELECTOR_TYPE.AD_ID, true, params); + + // Evaluate + expect(updateAdStatusByIdSpy).toHaveBeenCalledWith( + '1', + [1234, 2345], + GOOGLE_ADS_ENTITY_STATUS.ENABLED + ); + + expect(getAdsByIdSpy).toHaveBeenCalledWith('1', [1234, 2345]); + + expect(updateEntityStatusSpy).toHaveBeenCalledWith( + 'customers/1/adGroupAds:mutate', + singleAdById, + GOOGLE_ADS_ENTITY_STATUS.ENABLED + ); + + expect(fetchUrlSpy).toHaveBeenCalledTimes(4); + }); + }); + + describe('validate', () => { + it('Validates Ad status match correctly', () => { + const ads = new GoogleAds(); + + // Set up spies + jest + .spyOn(ApiHelper.prototype, 'callApi') + .mockReturnValue(singleAdByIdRaw); + + jest.spyOn(Auth.prototype, 'getAuthToken').mockReturnValue(''); + + const getAdsByIdSpy = jest.spyOn( + GoogleAds.prototype as any, + 'getAdsById_' + ); + + // Call function + const res = ads.validate( + '1234', + GOOGLE_ADS_SELECTOR_TYPE.AD_ID, + true, + params + ); + + // Evaluate + expect(getAdsByIdSpy).toHaveBeenCalled(); + expect(res).toEqual([]); + }); + + it('Validates Ad status mismatch correctly', () => { + const ads = new GoogleAds(); + + // Set up spies + jest + .spyOn(ApiHelper.prototype, 'callApi') + .mockReturnValue(singleAdByIdRaw); + jest.spyOn(Auth.prototype, 'getAuthToken').mockReturnValue(''); + + const getAdsByIdSpy = jest.spyOn( + GoogleAds.prototype as any, + 'getAdsById_' + ); + + // Call function + const res = ads.validate( + '1234', + GOOGLE_ADS_SELECTOR_TYPE.AD_ID, + false, + params + ); + + // Evaluate + const expected = [ + `Status for 1234 (AD_ID) should be PAUSED but is ENABLED`, + ]; + + expect(getAdsByIdSpy).toHaveBeenCalled(); + expect(res).toEqual(expected); + }); + }); +}); From dc1abcad58cdb43e8e6a3be65163cb5f0adcd66a Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 7 Mar 2023 11:10:00 +0100 Subject: [PATCH 08/84] Re-added licence header in README --- README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.md b/README.md index 0c2a8fa..07e22aa 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,16 @@ + + [![build](https://img.shields.io/badge/build-passing-brightgreen?style=flat&logo=github)](https://github.com/google/if-this-then-ad) [![GitHub tag (latest SemVer)](https://img.shields.io/github/v/tag/google/if-this-then-ad?label=release&logo=github)](https://github.com/google/if-this-then-ad) [![GitHub last commit](https://img.shields.io/github/last-commit/google/if-this-then-ad)](https://github.com/google/if-this-then-ad/commits) From 894d831d64f24c52f8638cbfbdd17969b2d426b7 Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 7 Mar 2023 11:53:10 +0100 Subject: [PATCH 09/84] Updated rollup config to only include licence banner --- rollup.config.mjs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/rollup.config.mjs b/rollup.config.mjs index 01737df..a6a1ccb 100644 --- a/rollup.config.mjs +++ b/rollup.config.mjs @@ -22,11 +22,27 @@ export default { output: { dir: 'dist', format: 'esm', + banner: `/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */`, }, plugins: [ preventTreeShakingPlugin(), nodeResolve({ extensions }), - cleanup({ comments: 'all' }), + cleanup({ comments: 'none' }), ], context: 'this', }; From 974466e3f83e5f1f4d318ecfd113367840b75099 Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 7 Mar 2023 12:02:03 +0100 Subject: [PATCH 10/84] Introduced AUTH_MODE --- src/helpers/auth.ts | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/helpers/auth.ts b/src/helpers/auth.ts index 66de169..e1c7973 100644 --- a/src/helpers/auth.ts +++ b/src/helpers/auth.ts @@ -29,21 +29,28 @@ export interface ServiceAccount { user_email: string; } +export enum AUTH_MODE { + USER = 'USER', + SERVICE_ACCOUNT = 'SERVICE_ACCOUNT', +} + /** * This is a wrapper class for handling authentification to DV360 API. * This class can be used to auth also to other Google APIs. */ export class Auth { serviceAccount: ServiceAccount; + authMode: AUTH_MODE; + /** * Set the OAuth configuration. * In order to authorise your DV360 API calls you can: * 1. Use the same Google account as you open the spreadsheet. - * If you chose this approach, you don't need to do pass account. + * For this approach, you don't need to do pass a service account. * 2. Use a service account. - * This is a service account in JSON format from your GCP project. - * How to get a service account credentials from GCP: - * https://cloud.google.com/iam/docs/service-accounts + * This is a service account in JSON format from your GCP project. + * How to get a service account credentials from GCP: + * https://cloud.google.com/iam/docs/service-accounts * * Service account credentials should be specified in the following JSON format: * { @@ -62,20 +69,27 @@ export class Auth { * @param {?Object} account The service account or empty */ constructor(account?: Object) { + this.authMode = account ? AUTH_MODE.SERVICE_ACCOUNT : AUTH_MODE.USER; this.serviceAccount = account as ServiceAccount; } /** - * Get Auth Token for OAuth authorisation for your service account. - * You need this token in order to authorise your DV360 API requests. + * Get Auth Token for OAuth authorization for your service account. + * You need this token in order to authorize API requests. * See more: https://github.com/gsuitedevs/apps-script-oauth2/blob/master/README.md * See more: https://developers.google.com/apps-script/reference/script/script-app#getOAuthToken() * * @returns {string} OAuth Token + * @throws {Error} */ getAuthToken() { - if (!this.serviceAccount || !('private_key' in this.serviceAccount)) { + if (this.authMode === AUTH_MODE.USER) { return ScriptApp.getOAuthToken(); + } else if ( + !this.serviceAccount || + !('private_key' in this.serviceAccount) + ) { + throw new Error('No or invalid service account provided'); } const service = OAuth2.createService('Service Account') From 4f81ea82b4daab499413a077f1ddd19f34f6f08e Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 7 Mar 2023 13:26:08 +0100 Subject: [PATCH 11/84] Sample -> SampleAgent --- src/target-agents/agent.sample.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/target-agents/agent.sample.ts b/src/target-agents/agent.sample.ts index f3d755c..a3d23aa 100644 --- a/src/target-agents/agent.sample.ts +++ b/src/target-agents/agent.sample.ts @@ -22,7 +22,7 @@ interface Parameters { advertiserId?: string; // optional } -export class Sample extends TargetAgent { +export class SampleAgent extends TargetAgent { static friendlyName = 'Sample'; requiredParameters: Array = ['token']; From 5d3b159563c20cfe41a12df38d9d2260a064b3ad Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 7 Mar 2023 14:17:02 +0100 Subject: [PATCH 12/84] Removed trailing underscore to indicate private properties --- src/helpers/sheets.ts | 6 +-- src/target-agents/dv360.ts | 41 ++++++++++-------- src/target-agents/google-ads.ts | 74 ++++++++++++++++----------------- src/test/dv360.test.ts | 17 ++++---- src/test/google-ads.test.ts | 24 +++++------ 5 files changed, 86 insertions(+), 76 deletions(-) diff --git a/src/helpers/sheets.ts b/src/helpers/sheets.ts index cd3fa6c..3c903b4 100644 --- a/src/helpers/sheets.ts +++ b/src/helpers/sheets.ts @@ -22,7 +22,7 @@ */ export class SheetsService { defaultMode: string; - spreadsheet_: GoogleAppsScript.Spreadsheet.Spreadsheet; + spreadsheet: GoogleAppsScript.Spreadsheet.Spreadsheet; /** * Constructor. @@ -46,7 +46,7 @@ export class SheetsService { } /** @private @const {?SpreadsheetApp.Spreadsheet} */ - this.spreadsheet_ = spreadsheet; + this.spreadsheet = spreadsheet; /** @type {string} */ this.defaultMode = 'FORMULA'; @@ -164,6 +164,6 @@ export class SheetsService { * @return {?SpreadsheetApp.Spreadsheet} The spreadsheet */ getSpreadsheet() { - return this.spreadsheet_; + return this.spreadsheet; } } diff --git a/src/target-agents/dv360.ts b/src/target-agents/dv360.ts index 4d2ea6e..f163d67 100644 --- a/src/target-agents/dv360.ts +++ b/src/target-agents/dv360.ts @@ -80,9 +80,13 @@ export class DV360 extends TargetAgent { this.authToken = auth.getAuthToken(); if (type === DV360_ENTITY_TYPE.LINE_ITEM) { - this.switchLIStatus_(params.advertiserId, identifier, evaluation); + this.switchLineItemStatus(params.advertiserId, identifier, evaluation); } else if (type === DV360_ENTITY_TYPE.INSERTION_ORDER) { - this.switchIOStatus_(params.advertiserId, identifier, evaluation); + this.switchInsertionOrderStatus( + params.advertiserId, + identifier, + evaluation + ); } } @@ -111,9 +115,9 @@ export class DV360 extends TargetAgent { const errors = []; if (type === DV360_ENTITY_TYPE.LINE_ITEM) { - status = this.isLIActive_(params.advertiserId, identifier); + status = this.isLineItemActive(params.advertiserId, identifier); } else if (type === DV360_ENTITY_TYPE.INSERTION_ORDER) { - status = this.isIOActive_(params.advertiserId, identifier); + status = this.isInsertionOrderActive(params.advertiserId, identifier); } if (evaluation !== status) { @@ -133,7 +137,7 @@ export class DV360 extends TargetAgent { * @param {Object|undefined} payload - What should be updated * @returns {JSON} Result of the operation */ - private fetchUrl_(url: string, method = 'get', payload?: Object | undefined) { + private fetchUrl(url: string, method = 'get', payload?: Object | undefined) { const headers = { Authorization: `Bearer ${this.authToken}`, Accept: '*/*', @@ -152,7 +156,7 @@ export class DV360 extends TargetAgent { * @param {boolean} turnOn Activate on 'true', deactivate on 'false' * @param {string} entity */ - private switchEntityStatus_( + private switchEntityStatus( advertiserId: string, entityId: string, turnOn: boolean, @@ -167,7 +171,7 @@ export class DV360 extends TargetAgent { const url = `${this.baseUrl}/advertisers/${advertiserId}/${entity}/${entityId}?updateMask=entityStatus`; - this.fetchUrl_(url, 'patch', updateMask); + this.fetchUrl(url, 'patch', updateMask); console.log( `* [DV360:switch ${entity}]: DONE, ID: ${entityId} new status ${newStatus}` @@ -181,12 +185,12 @@ export class DV360 extends TargetAgent { * @param {string} lineItemId - DV360 Line Item ID * @param {boolean} turnOn - Activate LI on 'true', deactivate on 'false' */ - private switchLIStatus_( + private switchLineItemStatus( advertiserId: string, lineItemId: string, turnOn: boolean ) { - const newStatus = this.switchEntityStatus_( + const newStatus = this.switchEntityStatus( advertiserId, lineItemId, turnOn, @@ -201,12 +205,12 @@ export class DV360 extends TargetAgent { * @param {string} insertionOrderId DV360 Line Item ID * @param {boolean} turnOn Activate IO on 'true', deactivate on 'false' */ - private switchIOStatus_( + private switchInsertionOrderStatus( advertiserId: string, insertionOrderId: string, turnOn: boolean ) { - this.switchEntityStatus_( + this.switchEntityStatus( advertiserId, insertionOrderId, turnOn, @@ -224,14 +228,14 @@ export class DV360 extends TargetAgent { * @param {string} entity Entity (e.g. lineItems/insertionOrders), see API refernece * @returns {Entity} Entity object */ - private getEntity_( + private getEntity( advertiserId: string, entityId: string, entity: string ): Entity { const url = `${this.baseUrl}/advertisers/${advertiserId}/${entity}/${entityId}`; - return this.fetchUrl_(url) as Entity; + return this.fetchUrl(url) as Entity; } /** @@ -241,8 +245,8 @@ export class DV360 extends TargetAgent { * @param {string} lineItemId DV360 Line Item ID * @returns {boolean} */ - private isLIActive_(advertiserId: string, lineItemId: string) { - const entity = this.getEntity_(advertiserId, lineItemId, 'lineItems'); + private isLineItemActive(advertiserId: string, lineItemId: string) { + const entity = this.getEntity(advertiserId, lineItemId, 'lineItems'); return DV360_ENTITY_STATUS.ACTIVE == entity.entityStatus; } @@ -254,8 +258,11 @@ export class DV360 extends TargetAgent { * @param {string} insertionOrderId DV360 Insertion Order ID * @returns {boolean} */ - private isIOActive_(advertiserId: string, insertionOrderId: string) { - const entity = this.getEntity_( + private isInsertionOrderActive( + advertiserId: string, + insertionOrderId: string + ) { + const entity = this.getEntity( advertiserId, insertionOrderId, 'insertionOrders' diff --git a/src/target-agents/google-ads.ts b/src/target-agents/google-ads.ts index 2682f4a..1f1c34f 100644 --- a/src/target-agents/google-ads.ts +++ b/src/target-agents/google-ads.ts @@ -85,15 +85,15 @@ export class GoogleAds extends TargetAgent { if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_ID) { console.log(`Updating status of Ad ${identifier} to '${status}'`); - this.updateAdStatusById_( + this.updateAdStatusById( params.customerId, identifier.split(',').map((id) => Number(id)), status ); } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_LABEL) { - this.updateAdStatusByLabel_(params.customerId, identifier, status); + this.updateAdStatusByLabel(params.customerId, identifier, status); } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_GROUP_ID) { - this.updateAdGroupStatusById_( + this.updateAdGroupStatusById( params.customerId, identifier.split(',').map((id) => Number(id)), status @@ -102,7 +102,7 @@ export class GoogleAds extends TargetAgent { console.log( `Updating status of AdGroup by label '${identifier}' to '${status}'` ); - this.updateAdGroupStatusByLabel_(params.customerId, identifier, status); + this.updateAdGroupStatusByLabel(params.customerId, identifier, status); } } @@ -134,25 +134,25 @@ export class GoogleAds extends TargetAgent { if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_ID) { entitiesToBeChecked = entitiesToBeChecked.concat( - this.getAdsById_( + this.getAdsById( params.customerId, identifier.split(',').map((id) => Number(id)) ) ); } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_LABEL) { entitiesToBeChecked = entitiesToBeChecked.concat( - this.getAdsByLabel_(params.customerId, identifier) + this.getAdsByLabel(params.customerId, identifier) ); } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_GROUP_ID) { entitiesToBeChecked = entitiesToBeChecked.concat( - this.getAdGroupsById_( + this.getAdGroupsById( params.customerId, identifier.split(',').map((id) => Number(id)) ) ); } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_GROUP_LABEL) { entitiesToBeChecked = entitiesToBeChecked.concat( - this.getAdGroupsByLabel_(params.customerId, identifier) + this.getAdGroupsByLabel(params.customerId, identifier) ); } @@ -174,7 +174,7 @@ export class GoogleAds extends TargetAgent { * @param {Entity} entity * @param {string} status */ - private updateEntityStatus_(path: string, entity: Entity, status: string) { + private updateEntityStatus(path: string, entity: Entity, status: string) { const payload = { operations: [ { @@ -187,7 +187,7 @@ export class GoogleAds extends TargetAgent { ], }; - const res = this.fetchUrl_(path, 'POST', payload); + const res = this.fetchUrl(path, 'POST', payload); } /** @@ -199,7 +199,7 @@ export class GoogleAds extends TargetAgent { * @param {boolean} forceCache * @returns {JSON} Result of the operation */ - private fetchUrl_( + private fetchUrl( path: string, method = 'get', payload: Object, @@ -230,16 +230,16 @@ export class GoogleAds extends TargetAgent { * @param {Array} ids * @param {string} status */ - private updateAdStatusById_( + private updateAdStatusById( customerId: string, ids: Array, status: string ) { - const ads = this.getAdsById_(customerId, ids); + const ads = this.getAdsById(customerId, ids); const path = `customers/${customerId}/adGroupAds:mutate`; for (const ad of ads) { - this.updateEntityStatus_(path, ad, status); + this.updateEntityStatus(path, ad, status); } } @@ -250,16 +250,16 @@ export class GoogleAds extends TargetAgent { * @param {Array} ids * @param {string} status */ - private updateAdGroupStatusById_( + private updateAdGroupStatusById( customerId: string, ids: Array, status: string ) { - const adGroups = this.getAdGroupsById_(customerId, ids); + const adGroups = this.getAdGroupsById(customerId, ids); const path = `customers/${customerId}/adGroup:mutate`; for (const adGroup of adGroups) { - this.updateEntityStatus_(path, adGroup, status); + this.updateEntityStatus(path, adGroup, status); } } @@ -270,16 +270,16 @@ export class GoogleAds extends TargetAgent { * @param {string} label * @param {string} status */ - private updateAdStatusByLabel_( + private updateAdStatusByLabel( customerId: string, label: string, status: string ) { - const ads = this.getAdsByLabel_(customerId, label); + const ads = this.getAdsByLabel(customerId, label); const path = `customers/${customerId}/adGroupAds:mutate`; for (const ad of ads) { - this.updateEntityStatus_(path, ad, status); + this.updateEntityStatus(path, ad, status); } } @@ -290,17 +290,17 @@ export class GoogleAds extends TargetAgent { * @param {string} label * @param {string} status */ - private updateAdGroupStatusByLabel_( + private updateAdGroupStatusByLabel( customerId: string, label: string, status: string ) { - const adGroups = this.getAdGroupsByLabel_(customerId, label); + const adGroups = this.getAdGroupsByLabel(customerId, label); const path = `customers/${customerId}/adGroups:mutate`; for (const adGroup of adGroups) { - this.updateEntityStatus_(path, adGroup, status); + this.updateEntityStatus(path, adGroup, status); } } @@ -311,7 +311,7 @@ export class GoogleAds extends TargetAgent { * @param {Array} ids * @returns {Array} */ - private getAdsById_(customerId: any, ids: Array): Array { + private getAdsById(customerId: any, ids: Array): Array { const query = ` SELECT ad_group_ad.ad.id, @@ -326,7 +326,7 @@ export class GoogleAds extends TargetAgent { }; const path = `customers/${customerId}/googleAds:search`; - const res = this.fetchUrl_(path, 'POST', payload, true) as Record< + const res = this.fetchUrl(path, 'POST', payload, true) as Record< string, Array> >; @@ -346,7 +346,7 @@ export class GoogleAds extends TargetAgent { * @param {Array} ids * @returns {Array} */ - private getAdGroupsById_( + private getAdGroupsById( customerId: string, ids: Array ): Array { @@ -364,7 +364,7 @@ export class GoogleAds extends TargetAgent { }; const path = `customers/${customerId}/googleAds:search`; - const res = this.fetchUrl_(path, 'POST', payload, true) as any; + const res = this.fetchUrl(path, 'POST', payload, true) as any; return res.results.map((result: any) => { return { @@ -381,8 +381,8 @@ export class GoogleAds extends TargetAgent { * @param {Array} ids * @returns {Array} */ - private getAdsByLabel_(customerId: any, label: string): Array { - const labelResource = this.getAdLabelByName_(customerId, label); + private getAdsByLabel(customerId: any, label: string): Array { + const labelResource = this.getAdLabelByName(customerId, label); const query = ` SELECT @@ -398,7 +398,7 @@ export class GoogleAds extends TargetAgent { }; const path = `customers/${customerId}/googleAds:search`; - const res = this.fetchUrl_(path, 'POST', payload, true) as any; + const res = this.fetchUrl(path, 'POST', payload, true) as any; return res.results.map((result: any) => { return { @@ -415,7 +415,7 @@ export class GoogleAds extends TargetAgent { * @param {string} labelName * @returns {string} */ - private getAdLabelByName_(customerId: string, labelName: string) { + private getAdLabelByName(customerId: string, labelName: string) { const query = ` SELECT label.resource_name @@ -429,7 +429,7 @@ export class GoogleAds extends TargetAgent { }; const path = `customers/${customerId}/googleAds:search`; - const res = this.fetchUrl_(path, 'POST', payload, true) as any; + const res = this.fetchUrl(path, 'POST', payload, true) as any; return res.results[0].label.resourceName; } @@ -441,8 +441,8 @@ export class GoogleAds extends TargetAgent { * @param {Array} ids * @returns {Array} */ - private getAdGroupsByLabel_(customerId: any, label: string): Array { - const labelResource = this.getAdGroupLabelByName_(customerId, label); + private getAdGroupsByLabel(customerId: any, label: string): Array { + const labelResource = this.getAdGroupLabelByName(customerId, label); const query = ` SELECT @@ -458,7 +458,7 @@ export class GoogleAds extends TargetAgent { }; const path = `customers/${customerId}/googleAds:search`; - const res = this.fetchUrl_(path, 'POST', payload, true) as any; + const res = this.fetchUrl(path, 'POST', payload, true) as any; return res.results.map((result: any) => { return { @@ -475,7 +475,7 @@ export class GoogleAds extends TargetAgent { * @param {string} labelName * @returns {string} */ - private getAdGroupLabelByName_(customerId: string, labelName: string) { + private getAdGroupLabelByName(customerId: string, labelName: string) { const query = ` SELECT label.resource_name @@ -489,7 +489,7 @@ export class GoogleAds extends TargetAgent { }; const path = `customers/${customerId}/googleAds:search`; - const res = this.fetchUrl_(path, 'POST', payload, true) as any; + const res = this.fetchUrl(path, 'POST', payload, true) as any; return res.results[0].label.resourceName; } diff --git a/src/test/dv360.test.ts b/src/test/dv360.test.ts index 12c2818..09115ce 100644 --- a/src/test/dv360.test.ts +++ b/src/test/dv360.test.ts @@ -15,16 +15,16 @@ describe('DV360 Target Agent', () => { const dv360 = new DV360(); // Set up spies - jest.spyOn(DV360.prototype as any, 'fetchUrl_').mockReturnValue(null); + jest.spyOn(DV360.prototype as any, 'fetchUrl').mockReturnValue(null); const switchLIStatusSpy = jest.spyOn( DV360.prototype as any, - 'switchLIStatus_' + 'switchLineItemStatus' ); const switchEntityStatusSpy = jest.spyOn( DV360.prototype as any, - 'switchEntityStatus_' + 'switchEntityStatus' ); // Call function @@ -50,10 +50,13 @@ describe('DV360 Target Agent', () => { }; // Set up spies - jest.spyOn(DV360.prototype as any, 'fetchUrl_').mockReturnValue(lineItem); - const isLIActiveSpy = jest.spyOn(DV360.prototype as any, 'isLIActive_'); - const getEntitySpy = jest.spyOn(DV360.prototype as any, 'getEntity_'); - const fetchUrlSpy = jest.spyOn(DV360.prototype as any, 'fetchUrl_'); + jest.spyOn(DV360.prototype as any, 'fetchUrl').mockReturnValue(lineItem); + const isLIActiveSpy = jest.spyOn( + DV360.prototype as any, + 'isLineItemActive' + ); + const getEntitySpy = jest.spyOn(DV360.prototype as any, 'getEntity'); + const fetchUrlSpy = jest.spyOn(DV360.prototype as any, 'fetchUrl'); // Call function dv360.validate('1234', DV360_ENTITY_TYPE.LINE_ITEM, true, params); diff --git a/src/test/google-ads.test.ts b/src/test/google-ads.test.ts index 30a2f9d..72b6e89 100644 --- a/src/test/google-ads.test.ts +++ b/src/test/google-ads.test.ts @@ -58,25 +58,25 @@ describe('Google Ads Target Agent', () => { const ads = new GoogleAds(); // Set up spies - const fetchUrlSpy = jest.spyOn(GoogleAds.prototype as any, 'fetchUrl_'); + const fetchUrlSpy = jest.spyOn(GoogleAds.prototype as any, 'fetchUrl'); jest - .spyOn(GoogleAds.prototype as any, 'fetchUrl_') + .spyOn(GoogleAds.prototype as any, 'fetchUrl') .mockReturnValue(singleAdByIdRaw); const updateAdStatusByIdSpy = jest.spyOn( GoogleAds.prototype as any, - 'updateAdStatusById_' + 'updateAdStatusById' ); const updateEntityStatusSpy = jest.spyOn( GoogleAds.prototype as any, - 'updateEntityStatus_' + 'updateEntityStatus' ); const getAdsByIdSpy = jest.spyOn( GoogleAds.prototype as any, - 'getAdsById_' + 'getAdsById' ); // Call function @@ -104,25 +104,25 @@ describe('Google Ads Target Agent', () => { const ads = new GoogleAds(); // Set up spies - const fetchUrlSpy = jest.spyOn(GoogleAds.prototype as any, 'fetchUrl_'); + const fetchUrlSpy = jest.spyOn(GoogleAds.prototype as any, 'fetchUrl'); jest - .spyOn(GoogleAds.prototype as any, 'fetchUrl_') + .spyOn(GoogleAds.prototype as any, 'fetchUrl') .mockReturnValue(singleAdByIdRaw); const updateAdStatusByIdSpy = jest.spyOn( GoogleAds.prototype as any, - 'updateAdStatusById_' + 'updateAdStatusById' ); const updateEntityStatusSpy = jest.spyOn( GoogleAds.prototype as any, - 'updateEntityStatus_' + 'updateEntityStatus' ); const getAdsByIdSpy = jest.spyOn( GoogleAds.prototype as any, - 'getAdsById_' + 'getAdsById' ); // Call function @@ -160,7 +160,7 @@ describe('Google Ads Target Agent', () => { const getAdsByIdSpy = jest.spyOn( GoogleAds.prototype as any, - 'getAdsById_' + 'getAdsById' ); // Call function @@ -187,7 +187,7 @@ describe('Google Ads Target Agent', () => { const getAdsByIdSpy = jest.spyOn( GoogleAds.prototype as any, - 'getAdsById_' + 'getAdsById' ); // Call function From aa0c0343ec97ae491235c6b7e93bff7e94714c39 Mon Sep 17 00:00:00 2001 From: paranerd Date: Wed, 8 Mar 2023 14:35:17 +0100 Subject: [PATCH 13/84] Addressing PR comments --- src/external/ads-script/agent.js | 72 ++++++++--------- src/external/ads-script/api.js | 111 -------------------------- src/external/ads-script/base.js | 65 --------------- src/external/ads-script/index.js | 14 +--- src/helpers/api.ts | 1 + src/helpers/dynamic-column-headers.ts | 10 +-- src/helpers/jpath.ts | 2 +- src/index.ts | 18 ++--- src/target-agents/agent.sample.ts | 2 +- src/target-agents/base.ts | 4 +- src/target-agents/dv360.ts | 26 +++--- src/target-agents/google-ads.ts | 49 ++++++------ src/test/google-ads.test.ts | 6 +- 13 files changed, 96 insertions(+), 284 deletions(-) delete mode 100644 src/external/ads-script/api.js delete mode 100644 src/external/ads-script/base.js diff --git a/src/external/ads-script/agent.js b/src/external/ads-script/agent.js index 239e93e..8c482b9 100644 --- a/src/external/ads-script/agent.js +++ b/src/external/ads-script/agent.js @@ -15,41 +15,42 @@ * limitations under the License. */ -class GoogleAds extends TargetAgent { - name = 'Google Ads'; - requiredParameters = ['id', 'type']; - - /** - * Constructor. - */ - constructor() { - super(); - } - +class GoogleAds { /** * Process entity based on evaluation. * - * @param {Object} params + * @param {string} identifier + * @param {string} type * @param {boolean} evaluation */ - process(params, evaluation) { - // Check for missing parameters - /*this.ensureRequiredParameters(params); - - const condition = `Name = '${params.identifier}'`; + process(identifier, type, evaluation) { + /*const condition = `Name = '${params.identifier}'`; this.switchAdGroupStatus(condition, evaluation);*/ + let ads = []; + let adGroups = []; + + if (type === 'AD_ID') { + const adIds = identifier + .split(';') + .map((pair) => pair.split(',').map((id) => parseInt(id, 10))); + ads = ads.concat(this.getAdsByIds(adIds)); + } else if (type === 'AD_LABEL') { + ads = ads.concat(getAdsByLabel(identifier)); + } else if (type === 'AD_GROUP_ID') { + const adGroupIds = identifier.split(',').map((id) => Number(id)); + adGroups = adGroups.concat(this.getAdGroupsByIds(adGroupIds)); + } else if (type === 'AD_GROUP_LABEL') { + adGroups = adGroups.concat(getAdGroupsByLabel(identifier)); + } + // Enable/pause the Ad Groups - const adGroupIds = row[CONFIG.feed.columns.adGroupIds] - ? row[CONFIG.feed.columns.adGroupIds] - .split(';') - .map((id) => parseInt(id, 10)) - : []; + /*const adGroupIds = identifier.split(';').map((id) => parseInt(id, 10)); const adGroupsByIds = getAdGroupsByIds(adGroupIds); const adGroupsByLabel = getAdGroupsByLabel( row[CONFIG.feed.columns.adGroupLabel] ); - const adGroups = [...adGroupsByIds, ...adGroupsByLabel]; + const adGroups = [...adGroupsByIds, ...adGroupsByLabel];*/ adGroups.forEach((adGroup) => { if (enable && !adGroup.isEnabled()) { Logger.log(`Enabling Ad Group ${adGroup.getId()}`); @@ -64,14 +65,14 @@ class GoogleAds extends TargetAgent { } }); // Enable/pause the Ads - const adIds = row[CONFIG.feed.columns.adIds] + /*const adIds = row[CONFIG.feed.columns.adIds] ? row[CONFIG.feed.columns.adIds] .split(';') .map((pair) => pair.split(',').map((id) => parseInt(id, 10))) : []; const adsByIds = getAdsByIds(adIds); const adsByLabel = getAdsByLabel(row[CONFIG.feed.columns.adLabel]); - const ads = [...adsByIds, ...adsByLabel]; + const ads = [...adsByIds, ...adsByLabel];*/ ads.forEach((ad) => { if (enable && !ad.isEnabled()) { Logger.log(`Enabling Ad ${ad.getId()}`); @@ -90,11 +91,12 @@ class GoogleAds extends TargetAgent { /** * Check if supposed entity status matches its actual live status. * - * @param {Object} params + * @param {string} identifier + * @param {string} type * @param {boolean} evaluation - * @throws {Error} + * @returns {string[]} */ - validate(params, evaluation) {} + validate(identifier, type, evaluation) {} /** * Enable or pause an AdGroup by its name @@ -120,8 +122,6 @@ class GoogleAds extends TargetAgent { } } - getAdGroupsByName(adGroupName) {} - switchEntityStatus(entity, enable) { if (enable && !entity.isEnabled()) { entity.enable(); @@ -134,8 +134,8 @@ class GoogleAds extends TargetAgent { * Get Ads based on their IDs. * An ID is a pair of [Ad Group ID, Ad ID] * - * @param {Array>} - * @returns {Array} + * @param {string[][]} + * @returns {Ad[]} */ getAdsByIds(ids) { const ads = []; @@ -151,8 +151,8 @@ class GoogleAds extends TargetAgent { /** * Get Ad Groups based on their IDs. * - * @param {Array} - * @returns {Array} + * @param {string[]} + * @returns {AdGroup[]} */ getAdGroupsByIds(ids) { const adGroups = []; @@ -169,7 +169,7 @@ class GoogleAds extends TargetAgent { * Get Ads by their label. * * @param {string} label - * @returns {Array} + * @returns {Ad[]} */ getAdsByLabel(label) { const ads = []; @@ -194,7 +194,7 @@ class GoogleAds extends TargetAgent { * Get Ad Groups based on their label. * * @param {string} label - * @returns {Array} + * @returns {AdGroup[]} */ getAdGroupsByLabel(label) { const adGroups = []; diff --git a/src/external/ads-script/api.js b/src/external/ads-script/api.js deleted file mode 100644 index a18897f..0000000 --- a/src/external/ads-script/api.js +++ /dev/null @@ -1,111 +0,0 @@ -/** - * @license - * Copyright 2023 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export class ApiHelper { - cache = {}; - - /** - * Constructor. - */ - constructor() { - this.cache = {}; - } - - /** - * Call API. - * - * @param {string} url - * @param {string} method - * @param {?GoogleAppsScript.URL_Fetch.HttpHeaders} headers - * @param {?Record} queryParams - * @param {?Object} body - * @returns {Object} - */ - callApi( - url, - headers, - queryParams, - body, - method = 'get', - contentType = 'application/json' - ) { - if (queryParams) { - url = `${url}${this.objectToUrlQuery(url, queryParams)}`; - } - - const params = { - headers: headers ?? {}, - method: method, - muteHttpExceptions: true, - contentType: contentType, - }; - - // Add body if any - if (body) { - // Stringify JSON if applicable - if (contentType === 'application/json') { - body = JSON.stringify(body); - } - - params.payload = body; - } - - const cacheKey = `${url}-${JSON.stringify(params)}`; - if (!(cacheKey in this.cache) || !this.cache[cacheKey]) { - const res = UrlFetchApp.fetch(url, params); - - if (200 != res.getResponseCode() && 204 != res.getResponseCode()) { - Logger.log('HTTP code: ' + res.getResponseCode()); - Logger.log('API error: ' + res.getContentText()); - Logger.log('URL: ' + url); - throw new Error(res.getContentText()); - } - - this.cache[cacheKey] = res.getContentText() - ? JSON.parse(res.getContentText()) - : {}; - } - - return this.cache[cacheKey]; - } - - /** - * Convert object into URL query string. - * - * @param {string} url - * @param {Object|null} obj - * @returns {string} - */ - objectToUrlQuery(url, obj) { - if (!obj || (obj && Object.keys(obj).length === 0)) return ''; - - const prefix = url.includes('?') ? '&' : '?'; - - return prefix.concat( - Object.keys(obj) - .map((key) => { - if (obj[key] instanceof Array) { - const joined = obj[key].join(`&${key}=`); - return joined.length ? `${key}=${joined}` : null; - } - return `${key}=${obj[key]}`; - }) - .filter((param) => param) - .join('&') - ); - } -} diff --git a/src/external/ads-script/base.js b/src/external/ads-script/base.js deleted file mode 100644 index 6bc04a5..0000000 --- a/src/external/ads-script/base.js +++ /dev/null @@ -1,65 +0,0 @@ -/** - * @license - * Copyright 2023 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -class TargetAgent extends ApiHelper { - name = ''; - requiredParameters = []; - static instance; - - constructor() { - super(); - } - - process(params, evaluation) {} - - validate(params, evaluation) {} - - /** - * Find missing required parameters exist in object. - * - * @param {!Object} params - * @returns {string} - */ - findMissingRequiredParameter(params) { - const keys = Object.keys(params); - - return this.requiredParameters.find((param) => !keys.includes(param)); - } - - /** - * Ensure all required parameters exist in object. - * - * @param {!Object} params - * @throws {Error} - */ - ensureRequiredParameters(params) { - // Check for missing parameters - const missingParameter = !this.findMissingRequiredParameter(params); - - if (missingParameter) { - throw new Error(`Missing parameter: '${missingParameter}'`); - } - } - - static getInstance() { - if (!this.instance) { - this.instance = new this(); - } - - return this.instance; - } -} diff --git a/src/external/ads-script/index.js b/src/external/ads-script/index.js index 60c76c2..410ec0d 100644 --- a/src/external/ads-script/index.js +++ b/src/external/ads-script/index.js @@ -15,9 +15,6 @@ * limitations under the License. */ -/** @type {?ApiSports} */ -let apiHelper; - /** @type {?SheetsService} */ let sheetsService; @@ -41,6 +38,7 @@ function main() { rows.forEach((row, index) => { console.log(`Processing row ${index + 1}`); + const ads = new GoogleAds(); let status = ''; try { @@ -55,15 +53,13 @@ function main() { if (evaluation === '') return; - const targetAgent = GoogleAds.getInstance(); - - targetAgent.process( + ads.process( row[CONFIG.rules.cols.targetId], row[CONFIG.rules.cols.targetIdType], evaluation ); - status = `Synchronized (${Utils.getCurrentDateString()})`; + status = `Synchronized`; // Update timestamp getSheetsService().setCellValue( @@ -73,9 +69,7 @@ function main() { CONFIG.rules.sheetName ); } catch (err) { - console.log( - `Error (${Utils.getCurrentDateString()}): ${JSON.stringify(err)}` - ); + console.log(`Error: ${JSON.stringify(err)}`); } }); } diff --git a/src/helpers/api.ts b/src/helpers/api.ts index bde9b84..2ccac8e 100644 --- a/src/helpers/api.ts +++ b/src/helpers/api.ts @@ -89,6 +89,7 @@ export class ApiHelper { Logger.log('HTTP code: ' + resRaw.getResponseCode()); Logger.log('API error: ' + resRaw.getContentText()); Logger.log('URL: ' + url); + Logger.log('Parameters: ' + JSON.stringify(params)); throw new Error(resRaw.getContentText()); } diff --git a/src/helpers/dynamic-column-headers.ts b/src/helpers/dynamic-column-headers.ts index 157f667..ed6abeb 100644 --- a/src/helpers/dynamic-column-headers.ts +++ b/src/helpers/dynamic-column-headers.ts @@ -18,15 +18,15 @@ import { JPath } from './jpath'; export class DynamicColumnHeaders { - headers: Array; + headers: string[]; static namespaceSeparator = ':'; /** * Constructor. * - * @param {Array} headers + * @param {string[]} headers */ - constructor(headers: Array) { + constructor(headers: string[]) { this.headers = headers; } @@ -38,14 +38,14 @@ export class DynamicColumnHeaders { * Per default it will nest results under the respective group, which is '0' * if none exists. * - * @param {Array} row + * @param {string[]} row * @param {string} namespace * @param {string} separator * @param {boolean} includeGroup * @returns {Record} */ getMappedValues( - row: Array, + row: string[], namespace: string | undefined = undefined, includeGroup: boolean = true ): Record { diff --git a/src/helpers/jpath.ts b/src/helpers/jpath.ts index 4f21e06..153764e 100644 --- a/src/helpers/jpath.ts +++ b/src/helpers/jpath.ts @@ -19,7 +19,7 @@ export class JPath { /** * Get Object entry value for the provided path. * - * @param {string} path Format "..." + * @param {string} path Format '...' * @param {Object} json JSON or JavaScript Object * @returns {string} Value from JSON or null if value does not exist */ diff --git a/src/index.ts b/src/index.ts index 24d84c1..23fc914 100644 --- a/src/index.ts +++ b/src/index.ts @@ -85,13 +85,13 @@ function main(mode: MODE) { } // Extract and parse column headers - const columnHeaders = rows.shift() as Array; + const columnHeaders = rows.shift() as string[]; const columnHeaderHelper = new DynamicColumnHeaders(columnHeaders); const apiHelper = new ApiHelper(); // Handle every row - rows.forEach((row: Array, index: number) => { + rows.forEach((row: string[], index: number) => { console.log(`Processing row ${index + 1}/${rows.length}`); // Check if update is due @@ -205,17 +205,17 @@ function main(mode: MODE) { * Validate that the Sheet and target entities are in sync. */ function validate() { - let errors: Array = []; + let errors: string[] = []; // Get all rows from the sheet const rows = getSheetsService().getRangeData(CONFIG.rules.sheetName, 1, 1); // Extract and parse column headers - const columnHeaders = rows.shift() as Array; + const columnHeaders = rows.shift() as string[]; const columnHeaderHelper = new DynamicColumnHeaders(columnHeaders); // Handle every row - rows.forEach((row: Array, index: number) => { + rows.forEach((row: string[], index: number) => { console.log(`Validating row ${index + 1}/${rows.length}`); try { const evaluation = getSheetsService().getCellValue( @@ -261,15 +261,15 @@ function validate() { /** * Update row with data from API according to path in header. * - * @param {Array} headers - * @param {Array} row + * @param {string[]} headers + * @param {string[]} row * @param {Object} data * @param {string} group * @returns {string} */ function updateRowWithResultData( - headers: Array, - row: Array, + headers: string[], + row: string[], data: Object, group: string ) { diff --git a/src/target-agents/agent.sample.ts b/src/target-agents/agent.sample.ts index a3d23aa..4d815c9 100644 --- a/src/target-agents/agent.sample.ts +++ b/src/target-agents/agent.sample.ts @@ -51,7 +51,7 @@ export class SampleAgent extends TargetAgent { * @param {string} type * @param {boolean} evaluation * @param {Parameters} params Additional parameters - * @returns {Array}‚ + * @returns {string[]}‚ */ validate( identifier: string, diff --git a/src/target-agents/base.ts b/src/target-agents/base.ts index 84c8f08..79ce4fe 100644 --- a/src/target-agents/base.ts +++ b/src/target-agents/base.ts @@ -19,7 +19,7 @@ import { ApiHelper } from '../helpers/api'; export class TargetAgent extends ApiHelper { public static friendlyName: string = ''; - protected requiredParameters: Array = []; + protected requiredParameters: string[] = []; static instance: TargetAgent; protected constructor() { @@ -38,7 +38,7 @@ export class TargetAgent extends ApiHelper { type: string, evaluation: boolean, params: Object - ): Array { + ): string[] { throw new Error('Method not implemented.'); } diff --git a/src/target-agents/dv360.ts b/src/target-agents/dv360.ts index f163d67..a7161f2 100644 --- a/src/target-agents/dv360.ts +++ b/src/target-agents/dv360.ts @@ -80,13 +80,9 @@ export class DV360 extends TargetAgent { this.authToken = auth.getAuthToken(); if (type === DV360_ENTITY_TYPE.LINE_ITEM) { - this.switchLineItemStatus(params.advertiserId, identifier, evaluation); + this.setLineItemStatus(params.advertiserId, identifier, evaluation); } else if (type === DV360_ENTITY_TYPE.INSERTION_ORDER) { - this.switchInsertionOrderStatus( - params.advertiserId, - identifier, - evaluation - ); + this.setInsertionOrderStatus(params.advertiserId, identifier, evaluation); } } @@ -97,7 +93,7 @@ export class DV360 extends TargetAgent { * @param {DV360_ENTITY_TYPE} type * @param {boolean} evaluation * @param {Parameters} params Additional parameters - * @returns {Array} + * @returns {string[]} */ validate( identifier: string, @@ -153,16 +149,16 @@ export class DV360 extends TargetAgent { * * @param {string} advertiserId DV360 Advertiser ID * @param {string} entityId DV360 Line Item/Insertion Order ID - * @param {boolean} turnOn Activate on 'true', deactivate on 'false' + * @param {boolean} status Activate on 'true', deactivate on 'false' * @param {string} entity */ - private switchEntityStatus( + private setEntityStatus( advertiserId: string, entityId: string, - turnOn: boolean, + status: boolean, entity: string ) { - const newStatus = turnOn + const newStatus = status ? DV360_ENTITY_STATUS.ACTIVE : DV360_ENTITY_STATUS.PAUSED; const updateMask = { @@ -185,12 +181,12 @@ export class DV360 extends TargetAgent { * @param {string} lineItemId - DV360 Line Item ID * @param {boolean} turnOn - Activate LI on 'true', deactivate on 'false' */ - private switchLineItemStatus( + private setLineItemStatus( advertiserId: string, lineItemId: string, turnOn: boolean ) { - const newStatus = this.switchEntityStatus( + const newStatus = this.setEntityStatus( advertiserId, lineItemId, turnOn, @@ -205,12 +201,12 @@ export class DV360 extends TargetAgent { * @param {string} insertionOrderId DV360 Line Item ID * @param {boolean} turnOn Activate IO on 'true', deactivate on 'false' */ - private switchInsertionOrderStatus( + private setInsertionOrderStatus( advertiserId: string, insertionOrderId: string, turnOn: boolean ) { - this.switchEntityStatus( + this.setEntityStatus( advertiserId, insertionOrderId, turnOn, diff --git a/src/target-agents/google-ads.ts b/src/target-agents/google-ads.ts index 1f1c34f..3bad74e 100644 --- a/src/target-agents/google-ads.ts +++ b/src/target-agents/google-ads.ts @@ -87,7 +87,7 @@ export class GoogleAds extends TargetAgent { console.log(`Updating status of Ad ${identifier} to '${status}'`); this.updateAdStatusById( params.customerId, - identifier.split(',').map((id) => Number(id)), + identifier.split(';').map((id) => String(id)), status ); } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_LABEL) { @@ -95,7 +95,7 @@ export class GoogleAds extends TargetAgent { } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_GROUP_ID) { this.updateAdGroupStatusById( params.customerId, - identifier.split(',').map((id) => Number(id)), + identifier.split(';').map((id) => String(id)), status ); } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_GROUP_LABEL) { @@ -113,7 +113,7 @@ export class GoogleAds extends TargetAgent { * @param {GOOGLE_ADS_SELECTOR_TYPE} type * @param {boolean} evaluation * @param {Parameters} params Additional parameters - * @returns {Array} + * @returns {string[]} */ validate( identifier: string, @@ -129,14 +129,14 @@ export class GoogleAds extends TargetAgent { const expectedStatus = evaluation ? GOOGLE_ADS_ENTITY_STATUS.ENABLED : GOOGLE_ADS_ENTITY_STATUS.PAUSED; - let entitiesToBeChecked: Array = []; - const errors: Array = []; + let entitiesToBeChecked: Entity[] = []; + const errors: string[] = []; if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_ID) { entitiesToBeChecked = entitiesToBeChecked.concat( this.getAdsById( params.customerId, - identifier.split(',').map((id) => Number(id)) + identifier.split(',').map((id) => String(id)) ) ); } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_LABEL) { @@ -147,7 +147,7 @@ export class GoogleAds extends TargetAgent { entitiesToBeChecked = entitiesToBeChecked.concat( this.getAdGroupsById( params.customerId, - identifier.split(',').map((id) => Number(id)) + identifier.split(',').map((id) => String(id)) ) ); } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_GROUP_LABEL) { @@ -227,12 +227,12 @@ export class GoogleAds extends TargetAgent { * Update Ad status by ID(s). * * @param {string} customerId - * @param {Array} ids + * @param {string[]} ids * @param {string} status */ private updateAdStatusById( customerId: string, - ids: Array, + ids: string[], status: string ) { const ads = this.getAdsById(customerId, ids); @@ -247,12 +247,12 @@ export class GoogleAds extends TargetAgent { * Update AdGroup status by ID(s). * * @param {string} customerId - * @param {Array} ids + * @param {string[]} ids * @param {string} status */ private updateAdGroupStatusById( customerId: string, - ids: Array, + ids: string[], status: string ) { const adGroups = this.getAdGroupsById(customerId, ids); @@ -308,10 +308,10 @@ export class GoogleAds extends TargetAgent { * Get Ads status by ID(s). * * @param {string} customerId - * @param {Array} ids - * @returns {Array} + * @param {string[]} ids + * @returns {string[]} */ - private getAdsById(customerId: any, ids: Array): Array { + private getAdsById(customerId: any, ids: string[]): Entity[] { const query = ` SELECT ad_group_ad.ad.id, @@ -343,13 +343,10 @@ export class GoogleAds extends TargetAgent { * Get AdGroups status by ID(s). * * @param {string} customerId - * @param {Array} ids - * @returns {Array} + * @param {string[]} ids + * @returns {Entity[]} */ - private getAdGroupsById( - customerId: string, - ids: Array - ): Array { + private getAdGroupsById(customerId: string, ids: string[]): Entity[] { const query = ` SELECT ad_group.id, @@ -378,10 +375,10 @@ export class GoogleAds extends TargetAgent { * Get Ads resource names by labels. * * @param {string} customerId - * @param {Array} ids - * @returns {Array} + * @param {string} label + * @returns {Entity[]} */ - private getAdsByLabel(customerId: any, label: string): Array { + private getAdsByLabel(customerId: any, label: string): Entity[] { const labelResource = this.getAdLabelByName(customerId, label); const query = ` @@ -438,10 +435,10 @@ export class GoogleAds extends TargetAgent { * Get AdGroups resource names by labels. * * @param {string} customerId - * @param {Array} ids - * @returns {Array} + * @param {string} label + * @returns {Entity[]} */ - private getAdGroupsByLabel(customerId: any, label: string): Array { + private getAdGroupsByLabel(customerId: any, label: string): Entity[] { const labelResource = this.getAdGroupLabelByName(customerId, label); const query = ` diff --git a/src/test/google-ads.test.ts b/src/test/google-ads.test.ts index 72b6e89..96ffdcd 100644 --- a/src/test/google-ads.test.ts +++ b/src/test/google-ads.test.ts @@ -85,7 +85,7 @@ describe('Google Ads Target Agent', () => { // Evaluate expect(updateAdStatusByIdSpy).toHaveBeenCalledWith( '1', - [1234], + ['1234'], GOOGLE_ADS_ENTITY_STATUS.ENABLED ); @@ -126,12 +126,12 @@ describe('Google Ads Target Agent', () => { ); // Call function - ads.process('1234,2345', GOOGLE_ADS_SELECTOR_TYPE.AD_ID, true, params); + ads.process('1234;2345', GOOGLE_ADS_SELECTOR_TYPE.AD_ID, true, params); // Evaluate expect(updateAdStatusByIdSpy).toHaveBeenCalledWith( '1', - [1234, 2345], + ['1234', '2345'], GOOGLE_ADS_ENTITY_STATUS.ENABLED ); From bcddd6f627ce84b19590f25591909a0b9a5c0ce9 Mon Sep 17 00:00:00 2001 From: paranerd Date: Mon, 6 Mar 2023 11:18:45 +0100 Subject: [PATCH 14/84] Built IFTTA v2 --- client/src/assets/.gitkeep => .claspignore | 0 .eslintignore | 2 + client/.eslintrc.js => .eslintrc.js | 12 +- .gitignore | 13 +- .dockerignore => .prettierignore | 2 +- client/.prettierrc => .prettierrc | 0 Dockerfile | 38 - README.md | 366 +- add-licence-headers.sh | 52 - app.json | 46 - appsscript.json | 28 + client/.browserslistrc | 16 - client/.editorconfig | 16 - client/.gitignore | 48 - client/README.md | 40 - client/angular.json | 117 - client/karma.conf.js | 57 - client/package-lock.json | 24535 ---------------- client/package.json | 57 - client/src/app/app-routing.module.ts | 61 - client/src/app/app.component.html | 70 - client/src/app/app.component.scss | 47 - client/src/app/app.component.spec.ts | 46 - client/src/app/app.component.ts | 64 - client/src/app/app.module.ts | 108 - .../add-rule/add-rule.component.html | 301 - .../add-rule/add-rule.component.scss | 78 - .../add-rule/add-rule.component.spec.ts | 37 - .../components/add-rule/add-rule.component.ts | 300 - .../app/components/dash/dash.component.html | 47 - .../app/components/dash/dash.component.scss | 49 - .../components/dash/dash.component.spec.ts | 37 - .../src/app/components/dash/dash.component.ts | 69 - .../googleads-selector.component.html | 98 - .../googleads-selector.component.scss | 56 - .../googleads-selector.component.spec.ts | 37 - .../googleads-selector.component.ts | 154 - .../components/header/header.component.html | 82 - .../components/header/header.component.scss | 82 - .../header/header.component.spec.ts | 37 - .../app/components/header/header.component.ts | 60 - .../location-auto-complete/config.ts | 16 - .../location-auto-complete.component.html | 26 - .../location-auto-complete.component.scss | 21 - .../location-auto-complete.component.spec.ts | 37 - .../location-auto-complete.component.ts | 353 - .../app/components/login/login.component.html | 21 - .../app/components/login/login.component.scss | 46 - .../components/login/login.component.spec.ts | 37 - .../app/components/login/login.component.ts | 63 - .../missing-settings-dialog.component.html | 36 - .../missing-settings-dialog.component.scss | 13 - .../missing-settings-dialog.component.spec.ts | 37 - .../missing-settings-dialog.component.ts | 47 - .../rules-status/rules.status.component.html | 79 - .../rules-status/rules.status.component.scss | 65 - .../rules.status.component.spec.ts | 37 - .../rules-status/rules.status.component.ts | 111 - .../app/components/rules/rules.component.html | 124 - .../app/components/rules/rules.component.scss | 51 - .../components/rules/rules.component.spec.ts | 37 - .../app/components/rules/rules.component.ts | 155 - .../target-selector.component.html | 81 - .../target-selector.component.scss | 25 - .../target-selector.component.spec.ts | 37 - .../target-selector.component.ts | 289 - .../user-settings.component.html | 54 - .../user-settings.component.scss | 34 - .../user-settings.component.spec.ts | 37 - .../user-settings/user-settings.component.ts | 193 - .../app/interceptors/auth.interceptor.spec.ts | 29 - .../src/app/interceptors/auth.interceptor.ts | 92 - client/src/app/interceptors/index.ts | 23 - client/src/app/interfaces/api.ts | 20 - client/src/app/interfaces/common.ts | 65 - client/src/app/interfaces/rule.ts | 94 - client/src/app/interfaces/source.ts | 151 - client/src/app/interfaces/target.ts | 79 - client/src/app/interfaces/user.ts | 33 - .../models/dynamic-data-source.model.spec.ts | 20 - .../app/models/dynamic-data-source.model.ts | 155 - .../app/models/dynamic-database.model.spec.ts | 20 - .../src/app/models/dynamic-database.model.ts | 154 - .../src/app/models/entity-node.model.spec.ts | 20 - client/src/app/models/entity-node.model.ts | 53 - .../interval-format.pipe.spec.ts | 21 - .../interval-format/interval-format.pipe.ts | 37 - .../string-replace.pipe.spec.ts | 21 - .../string-replace/string-replace.pipe.ts | 33 - client/src/app/services/agents.service.ts | 68 - client/src/app/services/auth.guard.spec.ts | 29 - client/src/app/services/auth.guard.ts | 65 - client/src/app/services/auth.service.spec.ts | 29 - client/src/app/services/auth.service.ts | 103 - client/src/app/services/rules.service.ts | 86 - client/src/app/services/user.service.spec.ts | 29 - client/src/app/services/user.service.ts | 116 - client/src/app/store/index.ts | 45 - client/src/assets/img/ads.png | Bin 11317 -> 0 bytes .../btn_google_signin_dark_disabled_web.png | Bin 2308 -> 0 bytes .../img/btn_google_signin_dark_focus_web.png | Bin 4185 -> 0 bytes .../img/btn_google_signin_dark_normal_web.png | Bin 3983 -> 0 bytes .../btn_google_signin_dark_pressed_web.png | Bin 4236 -> 0 bytes client/src/assets/img/dv360.png | Bin 4512 -> 0 bytes client/src/assets/img/iftta-banner.png | Bin 36435 -> 0 bytes client/src/assets/style/normalize.scss | 364 - client/src/assets/style/reset.scss | 55 - client/src/assets/style/responsive.scss | 177 - client/src/environments/environment.prod.ts | 17 - client/src/environments/environment.ts | 30 - client/src/favicon.ico | Bin 15406 -> 0 bytes client/src/index.html | 29 - client/src/main.ts | 26 - client/src/polyfills.ts | 66 - client/src/proxy.conf.json | 9 - client/src/styles.scss | 57 - client/src/test.ts | 39 - client/tsconfig.app.json | 15 - client/tsconfig.json | 32 - client/tsconfig.spec.json | 18 - cloudbuild.yaml | 67 - git/pre-commit | 67 - img/api-notation-agg.png | Bin 0 -> 69369 bytes img/api-notation.png | Bin 0 -> 69935 bytes img/dynamic-column-notation-headers-2.png | Bin 0 -> 26601 bytes img/dynamic-column-notation-headers.png | Bin 0 -> 28652 bytes img/dynamic-column-notation-params.png | Bin 0 -> 26628 bytes ...ynamic-column-notation-result-agg-json.png | Bin 0 -> 136813 bytes img/dynamic-column-notation-result-agg.png | Bin 0 -> 22352 bytes img/dynamic-column-notation-result-json.png | Bin 0 -> 135024 bytes img/dynamic-column-notation-result.png | Bin 0 -> 26821 bytes imgs/demo-video.png | Bin 49026 -> 0 bytes jest.config.js | 5 + license-headers/html | 12 - license-headers/js | 12 - license-headers/md | 12 - license-headers/scss | 12 - license-headers/ts | 12 - license-headers/yaml | 13 - server/package-lock.json => package-lock.json | 12330 ++++---- package.json | 32 + rollup.config.mjs | 32 + server/.eslintignore | 6 - server/.eslintrc.js | 42 - server/.example_env | 11 - server/.prettierignore | 11 - server/.prettierrc | 4 - .../source-agents/ambee/ambee-agent.test.ts | 175 - .../agents/source-agents/ambee/ambee-agent.ts | 151 - .../open-weather/open-weather-agent.test.ts | 201 - .../open-weather/open-weather-agent.ts | 135 - .../source-agents/simple-source-agent.ts | 162 - .../dv360-ads/dv360-agent.test.ts | 460 - .../target-agents/dv360-ads/dv360-agent.ts | 298 - .../dv360-ads/dv360-api-client.test.ts | 425 - .../dv360-ads/dv360-api-client.ts | 357 - .../google-ads/google-ads-agent.test.ts | 238 - .../google-ads/google-ads-agent.ts | 243 - server/app.ts | 122 - server/auth/google-auth.ts | 290 - server/collections/firebase-collection.ts | 285 - server/collections/users-collection.ts | 31 - server/common/common.ts | 53 - server/common/rule.ts | 94 - server/common/source.ts | 151 - server/common/target.ts | 79 - server/common/user.ts | 34 - server/controllers/account-controller.ts | 90 - server/controllers/agents-controller.ts | 72 - server/controllers/auth-controller.ts | 128 - server/controllers/rules-controller.ts | 156 - server/docs/README.md | 26 - .../docs/imgs/agent-dv360-ads-interface.png | Bin 439578 -> 0 bytes .../docs/imgs/agent-openweather-interface.png | Bin 192073 -> 0 bytes .../imgs/iftta-client-server-architecture.png | Bin 197520 -> 0 bytes server/docs/refresh-token.json | 4 - server/docs/rule-payload.json | 46 - server/index.ts | 27 - server/jest.config.js | 22 - server/package.json | 86 - server/public/.gitkeep | 0 server/routes/index.ts | 103 - server/services/agents-service.ts | 84 - server/services/collections-service.ts | 61 - server/services/conditions-service.test.ts | 71 - server/services/conditions-service.ts | 62 - server/services/google-auth-service.ts | 50 - server/services/rules-service.ts | 329 - server/tsconfig.json | 24 - server/util/error.ts | 65 - server/util/logger.ts | 73 - setup/post-create.sh | 73 - src/config.ts | 39 + src/external/ads-script/agent.js | 217 + src/external/ads-script/api.js | 111 + src/external/ads-script/base.js | 65 + src/external/ads-script/config.js | 34 + src/external/ads-script/index.js | 94 + src/external/ads-script/sheets.js | 88 + src/helpers/api.ts | 149 + src/helpers/auth.ts | 93 + src/helpers/dynamic-column-headers.ts | 94 + src/helpers/jpath.ts | 105 + src/helpers/sheets.ts | 169 + src/helpers/utils.ts | 31 + src/index.ts | 369 + src/target-agents/agent.sample.ts | 62 + src/target-agents/base.ts | 84 + src/target-agents/dv360.ts | 282 + src/target-agents/google-ads.ts | 431 + src/target-agents/index.ts | 21 + src/test/api.test.ts | 32 + src/test/dynamic-column-headers.test.ts | 148 + src/test/jpath.test.ts | 84 + tsconfig.json | 103 + 215 files changed, 8778 insertions(+), 44594 deletions(-) rename client/src/assets/.gitkeep => .claspignore (100%) create mode 100644 .eslintignore rename client/.eslintrc.js => .eslintrc.js (68%) rename .dockerignore => .prettierignore (68%) rename client/.prettierrc => .prettierrc (100%) delete mode 100644 Dockerfile delete mode 100755 add-licence-headers.sh delete mode 100644 app.json create mode 100644 appsscript.json delete mode 100644 client/.browserslistrc delete mode 100644 client/.editorconfig delete mode 100644 client/.gitignore delete mode 100644 client/README.md delete mode 100644 client/angular.json delete mode 100644 client/karma.conf.js delete mode 100644 client/package-lock.json delete mode 100644 client/package.json delete mode 100644 client/src/app/app-routing.module.ts delete mode 100644 client/src/app/app.component.html delete mode 100644 client/src/app/app.component.scss delete mode 100644 client/src/app/app.component.spec.ts delete mode 100644 client/src/app/app.component.ts delete mode 100644 client/src/app/app.module.ts delete mode 100644 client/src/app/components/add-rule/add-rule.component.html delete mode 100644 client/src/app/components/add-rule/add-rule.component.scss delete mode 100644 client/src/app/components/add-rule/add-rule.component.spec.ts delete mode 100644 client/src/app/components/add-rule/add-rule.component.ts delete mode 100644 client/src/app/components/dash/dash.component.html delete mode 100644 client/src/app/components/dash/dash.component.scss delete mode 100644 client/src/app/components/dash/dash.component.spec.ts delete mode 100644 client/src/app/components/dash/dash.component.ts delete mode 100644 client/src/app/components/googleads-selector/googleads-selector.component.html delete mode 100644 client/src/app/components/googleads-selector/googleads-selector.component.scss delete mode 100644 client/src/app/components/googleads-selector/googleads-selector.component.spec.ts delete mode 100644 client/src/app/components/googleads-selector/googleads-selector.component.ts delete mode 100644 client/src/app/components/header/header.component.html delete mode 100644 client/src/app/components/header/header.component.scss delete mode 100644 client/src/app/components/header/header.component.spec.ts delete mode 100644 client/src/app/components/header/header.component.ts delete mode 100644 client/src/app/components/location-auto-complete/config.ts delete mode 100644 client/src/app/components/location-auto-complete/location-auto-complete.component.html delete mode 100644 client/src/app/components/location-auto-complete/location-auto-complete.component.scss delete mode 100644 client/src/app/components/location-auto-complete/location-auto-complete.component.spec.ts delete mode 100644 client/src/app/components/location-auto-complete/location-auto-complete.component.ts delete mode 100644 client/src/app/components/login/login.component.html delete mode 100644 client/src/app/components/login/login.component.scss delete mode 100644 client/src/app/components/login/login.component.spec.ts delete mode 100644 client/src/app/components/login/login.component.ts delete mode 100644 client/src/app/components/missing-settings-dialog/missing-settings-dialog.component.html delete mode 100644 client/src/app/components/missing-settings-dialog/missing-settings-dialog.component.scss delete mode 100644 client/src/app/components/missing-settings-dialog/missing-settings-dialog.component.spec.ts delete mode 100644 client/src/app/components/missing-settings-dialog/missing-settings-dialog.component.ts delete mode 100644 client/src/app/components/rules-status/rules.status.component.html delete mode 100644 client/src/app/components/rules-status/rules.status.component.scss delete mode 100644 client/src/app/components/rules-status/rules.status.component.spec.ts delete mode 100644 client/src/app/components/rules-status/rules.status.component.ts delete mode 100644 client/src/app/components/rules/rules.component.html delete mode 100644 client/src/app/components/rules/rules.component.scss delete mode 100644 client/src/app/components/rules/rules.component.spec.ts delete mode 100644 client/src/app/components/rules/rules.component.ts delete mode 100644 client/src/app/components/target-selector/target-selector.component.html delete mode 100644 client/src/app/components/target-selector/target-selector.component.scss delete mode 100644 client/src/app/components/target-selector/target-selector.component.spec.ts delete mode 100644 client/src/app/components/target-selector/target-selector.component.ts delete mode 100644 client/src/app/components/user-settings/user-settings.component.html delete mode 100644 client/src/app/components/user-settings/user-settings.component.scss delete mode 100644 client/src/app/components/user-settings/user-settings.component.spec.ts delete mode 100644 client/src/app/components/user-settings/user-settings.component.ts delete mode 100644 client/src/app/interceptors/auth.interceptor.spec.ts delete mode 100644 client/src/app/interceptors/auth.interceptor.ts delete mode 100644 client/src/app/interceptors/index.ts delete mode 100644 client/src/app/interfaces/api.ts delete mode 100644 client/src/app/interfaces/common.ts delete mode 100644 client/src/app/interfaces/rule.ts delete mode 100644 client/src/app/interfaces/source.ts delete mode 100644 client/src/app/interfaces/target.ts delete mode 100644 client/src/app/interfaces/user.ts delete mode 100644 client/src/app/models/dynamic-data-source.model.spec.ts delete mode 100644 client/src/app/models/dynamic-data-source.model.ts delete mode 100644 client/src/app/models/dynamic-database.model.spec.ts delete mode 100644 client/src/app/models/dynamic-database.model.ts delete mode 100644 client/src/app/models/entity-node.model.spec.ts delete mode 100644 client/src/app/models/entity-node.model.ts delete mode 100644 client/src/app/pipes/interval-format/interval-format.pipe.spec.ts delete mode 100644 client/src/app/pipes/interval-format/interval-format.pipe.ts delete mode 100644 client/src/app/pipes/string-replace/string-replace.pipe.spec.ts delete mode 100644 client/src/app/pipes/string-replace/string-replace.pipe.ts delete mode 100644 client/src/app/services/agents.service.ts delete mode 100644 client/src/app/services/auth.guard.spec.ts delete mode 100644 client/src/app/services/auth.guard.ts delete mode 100644 client/src/app/services/auth.service.spec.ts delete mode 100644 client/src/app/services/auth.service.ts delete mode 100644 client/src/app/services/rules.service.ts delete mode 100644 client/src/app/services/user.service.spec.ts delete mode 100644 client/src/app/services/user.service.ts delete mode 100644 client/src/app/store/index.ts delete mode 100644 client/src/assets/img/ads.png delete mode 100644 client/src/assets/img/btn_google_signin_dark_disabled_web.png delete mode 100644 client/src/assets/img/btn_google_signin_dark_focus_web.png delete mode 100644 client/src/assets/img/btn_google_signin_dark_normal_web.png delete mode 100644 client/src/assets/img/btn_google_signin_dark_pressed_web.png delete mode 100644 client/src/assets/img/dv360.png delete mode 100644 client/src/assets/img/iftta-banner.png delete mode 100644 client/src/assets/style/normalize.scss delete mode 100644 client/src/assets/style/reset.scss delete mode 100644 client/src/assets/style/responsive.scss delete mode 100644 client/src/environments/environment.prod.ts delete mode 100644 client/src/environments/environment.ts delete mode 100644 client/src/favicon.ico delete mode 100644 client/src/index.html delete mode 100644 client/src/main.ts delete mode 100644 client/src/polyfills.ts delete mode 100644 client/src/proxy.conf.json delete mode 100644 client/src/styles.scss delete mode 100644 client/src/test.ts delete mode 100644 client/tsconfig.app.json delete mode 100644 client/tsconfig.json delete mode 100644 client/tsconfig.spec.json delete mode 100644 cloudbuild.yaml delete mode 100755 git/pre-commit create mode 100644 img/api-notation-agg.png create mode 100644 img/api-notation.png create mode 100644 img/dynamic-column-notation-headers-2.png create mode 100644 img/dynamic-column-notation-headers.png create mode 100644 img/dynamic-column-notation-params.png create mode 100644 img/dynamic-column-notation-result-agg-json.png create mode 100644 img/dynamic-column-notation-result-agg.png create mode 100644 img/dynamic-column-notation-result-json.png create mode 100644 img/dynamic-column-notation-result.png delete mode 100644 imgs/demo-video.png create mode 100644 jest.config.js delete mode 100644 license-headers/html delete mode 100644 license-headers/js delete mode 100644 license-headers/md delete mode 100644 license-headers/scss delete mode 100644 license-headers/ts delete mode 100644 license-headers/yaml rename server/package-lock.json => package-lock.json (52%) create mode 100644 package.json create mode 100644 rollup.config.mjs delete mode 100644 server/.eslintignore delete mode 100644 server/.eslintrc.js delete mode 100644 server/.example_env delete mode 100644 server/.prettierignore delete mode 100644 server/.prettierrc delete mode 100644 server/agents/source-agents/ambee/ambee-agent.test.ts delete mode 100644 server/agents/source-agents/ambee/ambee-agent.ts delete mode 100644 server/agents/source-agents/open-weather/open-weather-agent.test.ts delete mode 100644 server/agents/source-agents/open-weather/open-weather-agent.ts delete mode 100644 server/agents/source-agents/simple-source-agent.ts delete mode 100644 server/agents/target-agents/dv360-ads/dv360-agent.test.ts delete mode 100644 server/agents/target-agents/dv360-ads/dv360-agent.ts delete mode 100644 server/agents/target-agents/dv360-ads/dv360-api-client.test.ts delete mode 100644 server/agents/target-agents/dv360-ads/dv360-api-client.ts delete mode 100644 server/agents/target-agents/google-ads/google-ads-agent.test.ts delete mode 100644 server/agents/target-agents/google-ads/google-ads-agent.ts delete mode 100644 server/app.ts delete mode 100644 server/auth/google-auth.ts delete mode 100644 server/collections/firebase-collection.ts delete mode 100644 server/collections/users-collection.ts delete mode 100644 server/common/common.ts delete mode 100644 server/common/rule.ts delete mode 100644 server/common/source.ts delete mode 100644 server/common/target.ts delete mode 100644 server/common/user.ts delete mode 100644 server/controllers/account-controller.ts delete mode 100644 server/controllers/agents-controller.ts delete mode 100644 server/controllers/auth-controller.ts delete mode 100644 server/controllers/rules-controller.ts delete mode 100644 server/docs/README.md delete mode 100644 server/docs/imgs/agent-dv360-ads-interface.png delete mode 100644 server/docs/imgs/agent-openweather-interface.png delete mode 100644 server/docs/imgs/iftta-client-server-architecture.png delete mode 100644 server/docs/refresh-token.json delete mode 100644 server/docs/rule-payload.json delete mode 100644 server/index.ts delete mode 100644 server/jest.config.js delete mode 100644 server/package.json delete mode 100644 server/public/.gitkeep delete mode 100644 server/routes/index.ts delete mode 100644 server/services/agents-service.ts delete mode 100644 server/services/collections-service.ts delete mode 100644 server/services/conditions-service.test.ts delete mode 100644 server/services/conditions-service.ts delete mode 100644 server/services/google-auth-service.ts delete mode 100644 server/services/rules-service.ts delete mode 100644 server/tsconfig.json delete mode 100644 server/util/error.ts delete mode 100644 server/util/logger.ts delete mode 100755 setup/post-create.sh create mode 100644 src/config.ts create mode 100644 src/external/ads-script/agent.js create mode 100644 src/external/ads-script/api.js create mode 100644 src/external/ads-script/base.js create mode 100644 src/external/ads-script/config.js create mode 100644 src/external/ads-script/index.js create mode 100644 src/external/ads-script/sheets.js create mode 100644 src/helpers/api.ts create mode 100644 src/helpers/auth.ts create mode 100644 src/helpers/dynamic-column-headers.ts create mode 100644 src/helpers/jpath.ts create mode 100644 src/helpers/sheets.ts create mode 100644 src/helpers/utils.ts create mode 100644 src/index.ts create mode 100644 src/target-agents/agent.sample.ts create mode 100644 src/target-agents/base.ts create mode 100644 src/target-agents/dv360.ts create mode 100644 src/target-agents/google-ads.ts create mode 100644 src/target-agents/index.ts create mode 100644 src/test/api.test.ts create mode 100644 src/test/dynamic-column-headers.test.ts create mode 100644 src/test/jpath.test.ts create mode 100644 tsconfig.json diff --git a/client/src/assets/.gitkeep b/.claspignore similarity index 100% rename from client/src/assets/.gitkeep rename to .claspignore diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..3675648 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,2 @@ +node_modules/* +build/* diff --git a/client/.eslintrc.js b/.eslintrc.js similarity index 68% rename from client/.eslintrc.js rename to .eslintrc.js index aa3ab71..7265f31 100644 --- a/client/.eslintrc.js +++ b/.eslintrc.js @@ -1,15 +1,15 @@ module.exports = { env: { browser: true, - es2021: true, + es2020: true, }, - extends: ['google', 'prettier'], - parser: '@typescript-eslint/parser', + extends: ['standard-with-typescript', 'google', 'prettier'], + overrides: [], parserOptions: { - ecmaVersion: 13, + ecmaVersion: 'latest', sourceType: 'module', }, - plugins: ['@typescript-eslint', 'prettier'], + plugins: ['prettier'], rules: { 'valid-jsdoc': [ 2, @@ -31,5 +31,7 @@ module.exports = { trailingComma: 'es5', }, ], + 'no-unused-vars': 'off', + '@typescript-eslint/no-unused-vars': 'error', }, }; diff --git a/.gitignore b/.gitignore index 4ade552..37b761e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,6 @@ -node_modules/ -*/dist/* -dist -notes.txt -.env* -public -!public/.gitkeep +node_modules +dist/ +build/ .DS_Store -credentials.json \ No newline at end of file +.clasp*.json +setup.log diff --git a/.dockerignore b/.prettierignore similarity index 68% rename from .dockerignore rename to .prettierignore index 76add87..dd87e2d 100644 --- a/.dockerignore +++ b/.prettierignore @@ -1,2 +1,2 @@ node_modules -dist \ No newline at end of file +build diff --git a/client/.prettierrc b/.prettierrc similarity index 100% rename from client/.prettierrc rename to .prettierrc diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index b26384c..0000000 --- a/Dockerfile +++ /dev/null @@ -1,38 +0,0 @@ -# Copyright 2021 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Build Angular client -FROM node:16 AS client-build -WORKDIR /app -COPY client/ ./ -RUN npm install -RUN npm run build - -# Build NodeJS server -FROM node:16 AS server-build -WORKDIR /app -COPY server/ ./ -RUN npm run build-dist - -# Merge both builds -FROM node:16 AS final-build -WORKDIR /app -COPY --from=server-build /app/dist/ ./ -COPY --from=client-build /app/dist/client/ ./public - - -# Listen on port 8080 -EXPOSE 8080 - -CMD ["node", "index.js"] diff --git a/README.md b/README.md index 1acce23..0c2a8fa 100644 --- a/README.md +++ b/README.md @@ -1,146 +1,318 @@ - - -# If This Then Ad (IFTTA) - [![build](https://img.shields.io/badge/build-passing-brightgreen?style=flat&logo=github)](https://github.com/google/if-this-then-ad) [![GitHub tag (latest SemVer)](https://img.shields.io/github/v/tag/google/if-this-then-ad?label=release&logo=github)](https://github.com/google/if-this-then-ad) [![GitHub last commit](https://img.shields.io/github/last-commit/google/if-this-then-ad)](https://github.com/google/if-this-then-ad/commits) -[![If This Then Ad (IFFTA)](imgs/demo-video.png)](http://www.youtube.com/watch?v=ugklLFbij-A "If This Then Ad (IFFTA)") -YouTube Link: [youtu.be/ugklLFbij-A](https://youtu.be/ugklLFbij-A). +# If This Then Ad (IFTTA) + +IFTTA enables automatic management of marketing campaigns based on real world events. + +It allows you to query data from virtually any JSON API and control entities in various campaign management tools (e.g. DV360 and Google Ads) in response to the results. + +You can get very creative when using this tool and it's capabilities are only limited by your imagination. Here are some inspirations for what can be achieved: + +- Enable a DV360 Line Item if it's sunny in London + +- Pause Google Ads AdGroup whenever socks of SuperCompany goes below $X + +- Enable all Google Ads that have the label 'performance' if it's raining AND pollen levels are above a certain level + +Why would you want to do this? + +- Control ads to reach their audience at the right time under the right circumstances +- Automate campaign management in response to real-time events +- Personalize ads and create a "WOW" effect for the end user side + +* Show ads as targeted as possible to reach the right audience at the right time +* Manage ad campaigns in response to real-time events like weather, pollen data or air quality! This can be challenging or even impossible (imagine manually switching hundreds of ad groups every day - not only time consuming but also highly error-prone) + +## Prerequisites + +- A copy of the [Google Sheets Template](https://docs.google.com/spreadsheets/d/1EKcPGQ1Vr6LyyQYeYE0-T2gPzNhemVTxsvpSNC5arhE) +- Google Cloud Project with DV360 API enabled +- Any JSON API to be used as data source +- An account for activation (see [Supported Target Agents](#supported-target-agents) below) + +## How it works + +The tool works with "Rules" which describe which source to check how often and which target to manage. + +A rule consists of the following elements: + +- **Rule Name** + + Arbitrary name of your choice for readability + +- **Activation Formula** + + Any sheet formula that returns `TRUE` or `FALSE`. This would usually reference the API result fields (see below). + + For more complex evaluations, please see the section on "Custom Evaluator" below + +- **Update Interval** + + Regularly the fetch and sync processes would be started automatically using an Apps Script `onOpen()` Trigger. This is the default behaviour with Update Interval = 0. + + However, if you would like to realize different intervals between different rules, you can specify them in this column. The number value in this column will be interpreted as "hours". + +- **Target Info** + + Every Target Agent needs at least the following parameters: + + - **Target Identifier** + + This can be various things depending on the Agent. It may be a DV360 Line Item ID, a Google Ads Ad Group Label or something entirely different. + + - **Target ID Type** + + Because the Target Identifier is not one thing for all, the Target ID Type is required to tell the tool what it is working with + + - **Additional Parameters (optional)** + + Depending on the Target Agent additinal information may be required, such as an Advertiser ID, a Developer Token or other (check out [Supported Target Agents](#supported-target-agents) for details). You set them using the `target:` namespace (see [Dynamic Column Notation](#dynamic-column-notation)) + +- **Source Info** + + - **API URL** + + Provide the URL to the API you want to query via `source:url` + + - **Request Headers (optional)** + + If the API you're querying requires any headers to be set (e.g. for authentication), add a column for each one using "Dynamic Column Notation" `source:headers.

    ` and specify the respective value in the corresponding cell in each row + + - **Query Parameters (optional)** + + If the API you're querying requires any query parameters, add a column for each one using "Dynamic Column Notation" `source:params.` and specify the respective value in the corresponding cell in each row + +- **API Result Paths** + + To extract values from the queried API, add a column for each one using "Dynamic Column Notation" and the namespace `result:`. See [API Result](#api-result) for examples. + +## How to run + +You can trigger the tool either manually using the Sheets menu or schedule an Apps Script Trigger to do it automatically. + +## Dynamic Column Notation + +To be as flexible as possible, IFTTA (Lite) uses "Dynamic Column Notation" to add API specific information like headers and query parameters and also to extract information from the request result. + +### Request Headers + +Using the column title `source:headers.
    ` lets the tool know to add the respective cell in each row to the request header when querying the API + +**Example:** + +Dynamic Column Notation - Headers + +The resulting request header would be: + +```json +{ + "x-api-key": "abc123", + "x-debug": "my-value" +} +``` + +### Query Parameters + +Encoding query parameters works very similar to request headers, the only difference being the prefix: `source:params` + +**Example:** + +Dynamic Column Notation - Query Parameters + +The resulting url for the first row would look like this: `https://?lat=53.551086&lng=9.993682` + +### API Result + +Similar to setting headers and parameters, the 'Dynamic Column Notation' can also be used to extract data from JSON API results. Using the 'dot notation' we can traverse the JSON result to get to the data point we want to extract. + +Dynamic Column Notation - Results + +Given the above JSON source we could add the following to our Sheet: + +Dynamic Column Notation - Results + +You can also get min and max values from an array like so: + +Dynamic Column Notation - Results + +Given the above JSON source we could add the following to our Sheet: + +Dynamic Column Notation - Results + +## Supported Target Agents + +### DV360 + +**Required parameters** + +- `target:advertiserId` + +**Optional parameters** + +- `target:serviceAccount` + +### Google Ads + +**Required parameters** + +- `target:customerId` +- `target:developerToken` + +**Optional parameters** + +- `target:serviceAccount` + +## Advanced use cases + +### Custom Evaluators + +In case you have rule conditions more complex than what a standard Sheets function could cover, you can easiily extend this by leveraging Apps Script's / Google Sheet's "Custom Functions". + +**Example** + +In the linked Apps Script, add another file `custom.gs` in which you can specify your custom evaluator. + +**Example:** + +```js +function customEvaluator(val1, val2) { + return val1 === 123 && val2 < 3; +} +``` + +You can then reference this function in the "Activation Formula" cell of the respective row: + +``` +=customEvaluator(K3, L3) +``` + +(adjust for your actual function name and input cells) + +Any time any of the referenced cells change, `customEvaluator()` will be called to process the update. + +### Querying Multiple Sources + +You can easily query multiple source APIs to built even more complex conditions by extending the Dynamic Column Notation with a group: + +- `source:url` → `source.1.url` +- `source:params.lat` → `source.1:params.lat` + +Add as many sources as you need by incrementing the group for each one. + +To be able to access the correct API result for evaluation, the respective group is used again for reference: -IFTTA is a game changer in **rule-based marketing**. With our tool you can run marketing campaigns based on real world events. -We already support the following data sources: -* Weather (based on [OpenWeatherMaps API](https://openweathermap.org/)). The Weather conditions that you already can use: temperature, wind speed, cloudiness, rain, snow, thunderstorm. -* Pollen and Air Quality ([Ambee API](https://www.getambee.com/)). +- `result:current.temp` → `result.1:current.temp` +- `result:current.weather.1.main` → `result.1:current.weather.1.main` -On the marketing activation side we support the following platforms: -* [DV360](https://marketingplatform.google.com/intl/de/about/display-video-360/) (via the [DV360 API](https://developers.google.com/display-video/api/reference/rest)) -* [Google Ads](https://ads.google.com/) (via the [Ads API](https://developers.google.com/google-ads/api/docs/release-notes)) +### Custom Result Parser -*Keywords: Weather Based Marketing, External Signal Based Marketing, Pollen Based Marketing, AirQuality Based Marketing, Rule-based Marketing.* +IFTTA is designed to be as flexible as possible to cover just about any use case you could come up with for dynamic marketing. If by any chance you should encounter that JPath is not sufficient to extract the information from API results that you require, IFTTA has another ace up its sleeve: Custom Result Parser! -## The Problem that we solve +Analogue to a Custom Evaluator, to use a Custom Result Parser, you first need a custom function. You're free to (re-)use the `custom.gs` or any other file you like. In this file you add a function with a name of your choosing: -* Advertisers want to show their ads as targeted as possible to reach the right audience at the right time -* Managing ad campaigns in response to real-time events like weather, pollen data or air quality can be challenging to impossible (just imagine, manually switching hundreds of ad groups on a daily basis... it is really time consuming and an error-prone) +**Example:** -Our tool will do this for you automatically! +```js +/** + * Parse and process JSON result. + * + * @param {Object} data + * @param {Object} params + * @returns {string} + */ +function customParser(data, params) { + return 'result'; +} +``` -## Is IFTTA for you? +The function's return value will be written to the corresponding cell cell in each row. -Basically all advertisers can benefit from this solution and especially those that clearly see a correlation between the real world factors (e.g. weather) and sales (or other marketing KPIs). +To call this function, just add another column with the heading: `result:!CUSTOM.customParser`. -Some examples to ignite the imagination (based on our experience): -* Hot beverages can be advertised during the colder weather and cold beverages during the warm weather -* An ice cream company can show ads when it’s hot -* Insurance companies can show ads when there’s a storm or a flood -* A hardware store might show ads for snow shovels when it snowed -* Healthcare companies can advertise based on the pollen index and/or the air quality +If you need any parameters passed to the Custom Parser, you can add those using another column and the heading: `customParser:`. Put the values in the corresponding cells of each row. Add as many columns as you need parameters. The parameters will be passed to the Custom Parser in the following format: -## Benefits you get +```js +{ + parameter1: 'value', + parameter2: 'another value' +} +``` -* Ads will reach their audience at the right time under the right circumstances -* Advertisers can automate their campaign management in response to real-time events -* Personalized ads and WOW effect on the end user side (since the user will see the right ad at the right time) +## Developer Guide -## Setup +### Application Flow -### Prerequisities +Here's a high level overview of what's happening under the hood: -Basic Google Cloud knowledge and a Google Cloud project with [enabled billing](https://cloud.google.com/billing/docs/how-to/modify-project) are required. +#### Fetch -### Step-by-step guide +- Call `main()` in `src/index.ts` with `MODE.FETCH` (or `MODE.FETCH_AND_SYNC`) -With the following simple steps you can install IFTTA on your [Google Cloud](https://cloud.google.com/resource-manager/docs/creating-managing-projects) project. -The installation below is partly automated, this means that you will need to do some manual steps at the beginning and at the end the installation script (the big blue button below) will do the rest. +- Load the entire feed from Sheet and iterate over it row-by-row -1. Create an [OAuth Consent Screen](https://console.cloud.google.com/apis/credentials/consent) +- Check if row is due for update -1. Make it of type "**External**" +- Extract Source parameters using 'Dynamic Column Notation' -1. Add all users you want to have access to the app +- Call API URL for each source -1. Create an [OAuth Client ID](https://console.cloud.google.com/apis/credentials/oauthclient) +- Update the row data accordingly -1. Set Application type to "**Web application**" +- Write back to Sheet -1. Set the name to "**if-this-then-ad**" +#### Sync -1. Take note of the **Client ID** and **Client Secret** presented to you +- Call `main()` in `src/index.ts` with `MODE.SYNC` (or `MODE.FETCH_AND_SYNC`) -1. Click the big blue button to deploy: +- Load the entire feed from Sheet and iterate over it row-by-row - [![Run on Google Cloud](https://deploy.cloud.run/button.svg)](https://deploy.cloud.run) +- Check if row is due for update -1. Choose the Google Cloud Project where you want to deploy the app +- Read the result of the Activation Formula -1. Select the region where you want to deploy +- Extract Target parameters -1. Enter your Client ID and Client Secret when prompted +- Select the corresponding Target Agent -1. Ignore any other prompts, which will get auto-populated +- Call `process()` on the Target Agent to handle updating the specified Target Entity -1. Make sure you add the **Authorized JavaScript origin** as well as the **Authorized redirect URI** presented to you at the end of the script to your OAuth Client +- Update the row data accordingly -## Reporting bugs / feature requests +- Write back to Sheet -We love to hear your feedback! Please [create an issue](https://github.com/google/if-this-then-ad/issues/new) directly on GitHub. Please be **specific** describing your question/bug/feature. +#### Validate -## Development +- Call `main()` in `src/index.ts` with `MODE.SYNC` (or `MODE.FETCH_AND_SYNC`) -### Local dev setup +- Load the entire feed from Sheet and iterate over it row-by-row -1. Clone this repository -1. Complete the step-by-step guide above -1. Create a new [GCP Service Account](https://console.cloud.google.com/iam-admin/serviceaccounts) (or add another key for it, if it already exists) -1. Download the `.json` credentials -1. Rename `server/.env.sample` to `server/.env` -1. Add all missing values to `server/.env` -1. Go to `server/` -1. To set up and start the server, run: - - `npm run build-local` - - `npm run dev` -1. Go to `client/` -1. To set up and start the client, run: - - `sudo npm i -g @angular/cli` - - `npm i` - - `ng serve --ssl` -1. The application is running at https://localhost:4200 +- Read the result of the Activation Formula (supposed state) -### Git: Pre commit +- Extract Target parameters -To do all the checks before the commit automatically please add the [git/pre-commit](git/pre-commit) to your `.git/hooks/` directory. The easiest way would be to create a soft link: `cd .git/hooks/; ln -sf ../../git/pre-commit`. +- Select the corresponding Target Agent -To run all checks manually you can execute the following commands from the project root: +- Call `validate()` on the Target Agent to handle checking actual Entity state against the supposed state -- For server: `cd server; npm run pre-commit`. -- For client: `cd client; npm run pre-commit`. +- Output any errors in case of mismatch -# Do you like our tool? +### How to add a new Target Agent -You can start contributing by sending pull requests right now! -Also you can give us a star on our [GitHub page](https://github.com/google/if-this-then-ad) ;-) +Here's what you need to include a new Target Agent: -# Troubleshooting +1. Use `src/target-agents/agent.sample.ts` as a template for the Target Agent class +1. Set a `friendlyName` of your choice +1. Define `requiredParameters` (optional) +1. Implement the `process()` function +1. Implement the `validate()` function (optional) +1. Add your new Target Agent class to the array in `src/target-agents/index.ts` +1. Deploy your code +1. Update data validation for 'Target Agent' and 'target:type' in the Sheet (optional) -## Authorization Error (redirect_uri_mismatch) +## FAQ -This usually originates from not having the **Authorized redirect URI** set properly. +### I don't have a Google Ads Developer Token (yet). Can I still use IFTTA? -Here's how to fix it: -1. Go to [Cloud Credentials](https://console.cloud.google.com/apis/credentials) -1. Select the right project -1. Click on the **if-this-then-ad** OAuth 2.0 Client ID -1. Add the redirect_uri presented to you in the error message to **Authorized redirect URIs** +While we recommend applying for a Developer Token for the integration to work "natively", it is also possible to separate the fetching and activation part so that you only query the API with IFTTA to then read and process the results using an Ads Script in your Ads account. diff --git a/add-licence-headers.sh b/add-licence-headers.sh deleted file mode 100755 index 812c904..0000000 --- a/add-licence-headers.sh +++ /dev/null @@ -1,52 +0,0 @@ -#! /bin/sh -# Copyright 2022 Google LLC -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# https://www.apache.org/licenses/LICENSE-2.0 -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -YEAR=$(date +%Y) -DIR=$(dirname $0) -LICENSE_HEADERS_DIR="$DIR/license-headers" -FILES_LIST=$(find $DIR -type f \ - -not -path "*/node_modules/*" \ - -not -path "*/dist/*" \ - -not -path "*/.*/*" \ - -not -path "license-headers/*" \ - -not -name ".*" -) - -get_license_by_extension() { - EXTENSION=$(echo $1 | rev | cut -d'.' -f1 | rev) - LICENSE_FILE="${LICENSE_HEADERS_DIR}/${EXTENSION}" - if [ -e "$LICENSE_FILE" ]; then - cat $LICENSE_FILE | sed "s/{{YEAR}}/$YEAR/" - fi -} - -add_license_to_file() { - FILE=$1 - LICENSE=$2 - TMP_FILE=/tmp/licensed-file.$$ - (echo "$LICENSE"; echo; cat $FILE) > $TMP_FILE - mv $TMP_FILE $FILE -} - -FILE_COUNT=0 -for FILE in $FILES_LIST; do - LICENSE_HEADER=$(get_license_by_extension $FILE) - if [ -n "$LICENSE_HEADER" ]; then - LICENSE_HEADER_LENGTH=$(echo "$LICENSE_HEADER" | wc -l | xargs) - FILE_HEAD=$(head -n $LICENSE_HEADER_LENGTH $FILE) - if [ "$FILE_HEAD" != "$LICENSE_HEADER" ]; then - add_license_to_file "$FILE" "$LICENSE_HEADER" - FILE_COUNT=$((FILE_COUNT+1)) - fi - fi -done -echo "License header added to $FILE_COUNT file(s)." \ No newline at end of file diff --git a/app.json b/app.json deleted file mode 100644 index 2b8fb14..0000000 --- a/app.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "if-this-then-ad", - "env": { - "GOOGLE_CLIENT_ID": { - "description": "OAuth 2.0 Client ID", - "required": true, - "order": 1 - }, - "GOOGLE_CLIENT_SECRET": { - "description": "OAuth 2.0 Client Secret", - "required": true, - "order": 2 - }, - "PROJECT_ID": { - "value": " ", - "required": false - }, - "OAUTH_CALLBACK_URL": { - "value": " ", - "required": false - }, - "SESSION_SECRET": { - "value": " ", - "required": false - }, - "LOG_LEVEL": { - "value": "INFO", - "required": false - }, - "NODE_ENV": { - "value": "production", - "required": false - } - }, - "options": { - "allow-unauthenticated": true - }, - "build": { - "skip": false - }, - "hooks": { - "postcreate": { - "commands": ["./setup/post-create.sh"] - } - } -} diff --git a/appsscript.json b/appsscript.json new file mode 100644 index 0000000..ff9c7f9 --- /dev/null +++ b/appsscript.json @@ -0,0 +1,28 @@ +{ + "timeZone": "America/New_York", + "dependencies": { + "enabledAdvancedServices": [ + { + "userSymbol": "Sheets", + "serviceId": "sheets", + "version": "v4" + } + ], + "libraries": [ + { + "userSymbol": "OAuth2", + "libraryId": "1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF", + "version": "35", + "developmentMode": true + } + ] + }, + "exceptionLogging": "STACKDRIVER", + "oauthScopes": [ + "https://www.googleapis.com/auth/adwords", + "https://www.googleapis.com/auth/display-video", + "https://www.googleapis.com/auth/script.external_request", + "https://www.googleapis.com/auth/spreadsheets" + ], + "runtimeVersion": "V8" +} diff --git a/client/.browserslistrc b/client/.browserslistrc deleted file mode 100644 index 4f9ac26..0000000 --- a/client/.browserslistrc +++ /dev/null @@ -1,16 +0,0 @@ -# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. -# For additional information regarding the format and rule options, please see: -# https://github.com/browserslist/browserslist#queries - -# For the full list of supported browsers by the Angular framework, please see: -# https://angular.io/guide/browser-support - -# You can see what browsers were selected by your queries by running: -# npx browserslist - -last 1 Chrome version -last 1 Firefox version -last 2 Edge major versions -last 2 Safari major versions -last 2 iOS major versions -Firefox ESR diff --git a/client/.editorconfig b/client/.editorconfig deleted file mode 100644 index 59d9a3a..0000000 --- a/client/.editorconfig +++ /dev/null @@ -1,16 +0,0 @@ -# Editor configuration, see https://editorconfig.org -root = true - -[*] -charset = utf-8 -indent_style = space -indent_size = 2 -insert_final_newline = true -trim_trailing_whitespace = true - -[*.ts] -quote_type = single - -[*.md] -max_line_length = off -trim_trailing_whitespace = false diff --git a/client/.gitignore b/client/.gitignore deleted file mode 100644 index 8733921..0000000 --- a/client/.gitignore +++ /dev/null @@ -1,48 +0,0 @@ -# See http://help.github.com/ignore-files/ for more about ignoring files. - -#local env variable declaration -.env -# compiled output -/dist -/tmp -/out-tsc -# Only exists if Bazel was run -/bazel-out - -# dependencies -/node_modules - -# profiling files -chrome-profiler-events*.json - -# IDEs and editors -/.idea -.project -.classpath -.c9/ -*.launch -.settings/ -*.sublime-workspace - -# IDE - VSCode -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -.history/* - -# misc -/.angular/cache -/.sass-cache -/connect.lock -/coverage -/libpeerconnection.log -npm-debug.log -yarn-error.log -testem.log -/typings - -# System Files -**/.DS_Store -Thumbs.db diff --git a/client/README.md b/client/README.md deleted file mode 100644 index f394c2d..0000000 --- a/client/README.md +++ /dev/null @@ -1,40 +0,0 @@ - - -# Client - -This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.0.3. - -## Development server - -Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files. - -## Code scaffolding - -Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. - -## Build - -Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. - -## Running unit tests - -Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). - -## Running end-to-end tests - -Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities. - -## Further help - -To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page. diff --git a/client/angular.json b/client/angular.json deleted file mode 100644 index e3227f1..0000000 --- a/client/angular.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "$schema": "./node_modules/@angular/cli/lib/config/schema.json", - "version": 1, - "newProjectRoot": "projects", - "projects": { - "client": { - "projectType": "application", - "schematics": { - "@schematics/angular:component": { - "style": "scss" - }, - "@schematics/angular:application": { - "strict": true - } - }, - "root": "", - "sourceRoot": "src", - "prefix": "app", - "architect": { - "build": { - "builder": "@angular-devkit/build-angular:browser", - "options": { - "outputPath": "dist/client", - "index": "src/index.html", - "main": "src/main.ts", - "polyfills": "src/polyfills.ts", - "tsConfig": "tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "src/favicon.ico", - "src/assets" - ], - "styles": [ - "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css", - "src/styles.scss" - ], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "fileReplacements": [ - { - "replace": "src/environments/environment.ts", - "with": "src/environments/environment.prod.ts" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "builder": "@angular-devkit/build-angular:dev-server", - "options": { - "browserTarget": "client:build", - "proxyConfig": "src/proxy.conf.json" - }, - "configurations": { - "production": { - "browserTarget": "client:build:production" - }, - "development": { - "browserTarget": "client:build:development" - } - }, - "defaultConfiguration": "development" - }, - "extract-i18n": { - "builder": "@angular-devkit/build-angular:extract-i18n", - "options": { - "browserTarget": "client:build" - } - }, - "test": { - "builder": "@angular-devkit/build-angular:karma", - "options": { - "main": "src/test.ts", - "polyfills": "src/polyfills.ts", - "tsConfig": "tsconfig.spec.json", - "karmaConfig": "karma.conf.js", - "inlineStyleLanguage": "scss", - "assets": [ - "src/favicon.ico", - "src/assets" - ], - "styles": [ - "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css", - "src/styles.scss" - ], - "scripts": [] - } - } - } - } - }, - "defaultProject": "client" -} diff --git a/client/karma.conf.js b/client/karma.conf.js deleted file mode 100644 index 525c676..0000000 --- a/client/karma.conf.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -// Karma configuration file, see link for more information -// https://karma-runner.github.io/1.0/config/configuration-file.html - -module.exports = function (config) { - config.set({ - basePath: '', - frameworks: ['jasmine', '@angular-devkit/build-angular'], - plugins: [ - require('karma-jasmine'), - require('karma-chrome-launcher'), - require('karma-jasmine-html-reporter'), - require('karma-coverage'), - require('@angular-devkit/build-angular/plugins/karma') - ], - client: { - jasmine: { - // you can add configuration options for Jasmine here - // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html - // for example, you can disable the random execution with `random: false` - // or set a specific seed with `seed: 4321` - }, - clearContext: false // leave Jasmine Spec Runner output visible in browser - }, - jasmineHtmlReporter: { - suppressAll: true // removes the duplicated traces - }, - coverageReporter: { - dir: require('path').join(__dirname, './coverage/client'), - subdir: '.', - reporters: [ - { type: 'html' }, - { type: 'text-summary' } - ] - }, - reporters: ['progress', 'kjhtml'], - port: 9876, - colors: true, - logLevel: config.LOG_INFO, - autoWatch: true, - browsers: ['Chrome'], - singleRun: false, - restartOnFileChange: true - }); -}; diff --git a/client/package-lock.json b/client/package-lock.json deleted file mode 100644 index 15b3479..0000000 --- a/client/package-lock.json +++ /dev/null @@ -1,24535 +0,0 @@ -{ - "name": "client", - "version": "0.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "client", - "version": "0.0.0", - "dependencies": { - "@angular/animations": "~13.0.0", - "@angular/cdk": "^13.0.2", - "@angular/common": "~13.0.0", - "@angular/compiler": "~13.0.0", - "@angular/core": "~13.0.0", - "@angular/forms": "~13.0.0", - "@angular/material": "^13.0.2", - "@angular/platform-browser": "~13.0.0", - "@angular/platform-browser-dynamic": "~13.0.0", - "@angular/router": "~13.0.0", - "@fortawesome/angular-fontawesome": "^0.10.2", - "@fortawesome/fontawesome-svg-core": "^6.1.0", - "@fortawesome/free-regular-svg-icons": "^6.1.0", - "@fortawesome/free-solid-svg-icons": "^6.1.0", - "rxjs": "~7.4.0", - "tslib": "^2.3.0", - "zone.js": "~0.11.4" - }, - "devDependencies": { - "@angular-devkit/build-angular": "~13.0.3", - "@angular/cli": "^13.0.4", - "@angular/compiler-cli": "~13.0.0", - "@types/jasmine": "~3.10.0", - "@types/node": "^12.11.1", - "@types/scriptjs": "^0.0.2", - "@typescript-eslint/eslint-plugin": "^5.12.0", - "@typescript-eslint/parser": "^5.12.0", - "eslint": "^8.9.0", - "eslint-config-airbnb-base": "^15.0.0", - "eslint-config-google": "^0.14.0", - "eslint-config-prettier": "^8.4.0", - "eslint-plugin-prettier": "^4.0.0", - "jasmine-core": "~3.10.0", - "karma": "~6.3.0", - "karma-chrome-launcher": "~3.1.0", - "karma-coverage": "~2.0.3", - "karma-jasmine": "~4.0.0", - "karma-jasmine-html-reporter": "~1.7.0", - "prettier": "^2.5.1", - "typescript": "~4.4.3" - } - }, - "node_modules/@ampproject/remapping": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-1.0.1.tgz", - "integrity": "sha512-Ta9bMA3EtUHDaZJXqUoT5cn/EecwOp+SXpKJqxDbDuMbLvEMu6YTyDDuvTWeStODfdmXyfMo7LymQyPkN3BicA==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "1.0.0", - "sourcemap-codec": "1.4.8" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@angular-devkit/architect": { - "version": "0.1300.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1300.3.tgz", - "integrity": "sha512-XY3sjRLk06Q+uAU0BePuIWcK1n3Jr0ksNV0ACNAct+MnI3QFfPPaYA/Tdhp9uWobuZ4lUrL0drc2uppNu0wKmA==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "13.0.3", - "rxjs": "6.6.7" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/architect/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@angular-devkit/architect/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@angular-devkit/build-angular": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-13.0.3.tgz", - "integrity": "sha512-5KFsknpnq3mc0KwcIDjvmqB3trz5cMt48dB0nrc23zkFI9v4hkpalc/OEg/H3G93K0c9g6dcyxmHkNfsU1+CHw==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "1.0.1", - "@angular-devkit/architect": "0.1300.3", - "@angular-devkit/build-webpack": "0.1300.3", - "@angular-devkit/core": "13.0.3", - "@babel/core": "7.15.8", - "@babel/generator": "7.15.8", - "@babel/helper-annotate-as-pure": "7.15.4", - "@babel/plugin-proposal-async-generator-functions": "7.15.8", - "@babel/plugin-transform-async-to-generator": "7.14.5", - "@babel/plugin-transform-runtime": "7.15.8", - "@babel/preset-env": "7.15.8", - "@babel/runtime": "7.15.4", - "@babel/template": "7.15.4", - "@discoveryjs/json-ext": "0.5.5", - "@ngtools/webpack": "13.0.3", - "ansi-colors": "4.1.1", - "babel-loader": "8.2.3", - "babel-plugin-istanbul": "6.1.1", - "browserslist": "^4.9.1", - "cacache": "15.3.0", - "caniuse-lite": "^1.0.30001032", - "circular-dependency-plugin": "5.2.2", - "copy-webpack-plugin": "9.0.1", - "core-js": "3.19.0", - "critters": "0.0.14", - "css-loader": "6.5.0", - "esbuild-wasm": "0.13.12", - "glob": "7.2.0", - "https-proxy-agent": "5.0.0", - "inquirer": "8.2.0", - "karma-source-map-support": "1.4.0", - "less": "4.1.2", - "less-loader": "10.2.0", - "license-webpack-plugin": "4.0.0", - "loader-utils": "3.0.0", - "mini-css-extract-plugin": "2.4.3", - "minimatch": "3.0.4", - "open": "8.4.0", - "ora": "5.4.1", - "parse5-html-rewriting-stream": "6.0.1", - "piscina": "3.1.0", - "postcss": "8.3.11", - "postcss-import": "14.0.2", - "postcss-loader": "6.2.0", - "postcss-preset-env": "6.7.0", - "regenerator-runtime": "0.13.9", - "resolve-url-loader": "4.0.0", - "rxjs": "6.6.7", - "sass": "1.43.4", - "sass-loader": "12.3.0", - "semver": "7.3.5", - "source-map-loader": "3.0.0", - "source-map-support": "0.5.20", - "stylus": "0.55.0", - "stylus-loader": "6.2.0", - "terser": "5.9.0", - "text-table": "0.2.0", - "tree-kill": "1.2.2", - "tslib": "2.3.1", - "webpack": "5.64.1", - "webpack-dev-middleware": "5.2.1", - "webpack-dev-server": "4.4.0", - "webpack-merge": "5.8.0", - "webpack-subresource-integrity": "5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "optionalDependencies": { - "esbuild": "0.13.12" - }, - "peerDependencies": { - "@angular/compiler-cli": "^13.0.0", - "@angular/localize": "^13.0.0", - "@angular/service-worker": "^13.0.0", - "karma": "^6.3.0", - "ng-packagr": "^13.0.0", - "protractor": "^7.0.0", - "tailwindcss": "^2.0.0", - "typescript": "~4.4.3" - }, - "peerDependenciesMeta": { - "@angular/localize": { - "optional": true - }, - "@angular/service-worker": { - "optional": true - }, - "karma": { - "optional": true - }, - "ng-packagr": { - "optional": true - }, - "protractor": { - "optional": true - }, - "tailwindcss": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/rxjs/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@angular-devkit/build-webpack": { - "version": "0.1300.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1300.3.tgz", - "integrity": "sha512-3DNo8575FFPMqJaVMXxrIduWkrcKm5zYSCvkMOmzHLp+gx+RXQiwnoXfVJpukcE/jwK/4SWyRE8Tw75sfPJ71A==", - "dev": true, - "dependencies": { - "@angular-devkit/architect": "0.1300.3", - "rxjs": "6.6.7" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "webpack": "^5.30.0", - "webpack-dev-server": "^4.0.0" - } - }, - "node_modules/@angular-devkit/build-webpack/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@angular-devkit/build-webpack/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@angular-devkit/core": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.0.3.tgz", - "integrity": "sha512-5yTYW6m4pkDPSYNxThm+47h+UZ6XVEfdfsXR3o+WlRG0hc18EuQ+sXZkzhvZrk5KMLlXFex4eO40RPq2vvWS/w==", - "dev": true, - "dependencies": { - "ajv": "8.6.3", - "ajv-formats": "2.1.1", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.7", - "source-map": "0.7.3" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/core/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@angular-devkit/core/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@angular-devkit/schematics": { - "version": "13.0.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.0.4.tgz", - "integrity": "sha512-3LsmpfAEOxwPyachrktCHtGUYBzQCCzD0++CUjhK8W99v8/IAplkm4dgovFb1RiRkUm44l+HIS7387AbvEIf5A==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "13.0.4", - "jsonc-parser": "3.0.0", - "magic-string": "0.25.7", - "ora": "5.4.1", - "rxjs": "6.6.7" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/schematics/node_modules/@angular-devkit/core": { - "version": "13.0.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.0.4.tgz", - "integrity": "sha512-AzgLvERLC6qzY5aZWUpkz5nx+pZChrq3DSt6azMPALwzzoABrwiO6XqzRnj17mXtANXLH2oe9FuHr9jzgFbF1g==", - "dev": true, - "dependencies": { - "ajv": "8.6.3", - "ajv-formats": "2.1.1", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.7", - "source-map": "0.7.3" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/schematics/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@angular-devkit/schematics/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@angular/animations": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-13.0.2.tgz", - "integrity": "sha512-ROR70rM6E13pIJzaYf0Su/ALSoBm5fIMjozey636pAq21TxTy5IfhgaBjv/vflC9psbpaySGw2H5XnwejP0gSw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0" - }, - "peerDependencies": { - "@angular/core": "13.0.2" - } - }, - "node_modules/@angular/cdk": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-13.0.2.tgz", - "integrity": "sha512-m7RHIAXpFpgsrydhWXX1hAXRmQpQ+m9eRCYAoz8QiDCchYyVvTaxkZ8J7XGS8RtJ2EiocXSp4TlwQQrpXe+4lg==", - "dependencies": { - "tslib": "^2.3.0" - }, - "optionalDependencies": { - "parse5": "^5.0.0" - }, - "peerDependencies": { - "@angular/common": "^13.0.0 || ^14.0.0-0", - "@angular/core": "^13.0.0 || ^14.0.0-0", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/cdk/node_modules/parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "optional": true - }, - "node_modules/@angular/cli": { - "version": "13.0.4", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-13.0.4.tgz", - "integrity": "sha512-0QMJXFNn57LVg7ZwZFPO90g6aZHDnoe5yCB7fo3nskOhDw1AW/rnbbaNVMVX/SvP30hOOTLsfVJ1Y3I6eKDgRA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@angular-devkit/architect": "0.1300.4", - "@angular-devkit/core": "13.0.4", - "@angular-devkit/schematics": "13.0.4", - "@schematics/angular": "13.0.4", - "@yarnpkg/lockfile": "1.1.0", - "ansi-colors": "4.1.1", - "debug": "4.3.2", - "ini": "2.0.0", - "inquirer": "8.2.0", - "jsonc-parser": "3.0.0", - "npm-package-arg": "8.1.5", - "npm-pick-manifest": "6.1.1", - "open": "8.4.0", - "ora": "5.4.1", - "pacote": "12.0.2", - "resolve": "1.20.0", - "semver": "7.3.5", - "symbol-observable": "4.0.0", - "uuid": "8.3.2" - }, - "bin": { - "ng": "bin/ng.js" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/cli/node_modules/@angular-devkit/architect": { - "version": "0.1300.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1300.4.tgz", - "integrity": "sha512-COW2W6rI9D69QEXGc/MyTbJY9gT+u8yMTpONpIjopd+KoSK/q2wGr0RleUf7XSCunZCs0SRI7z3Pw1EAdQCP7Q==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "13.0.4", - "rxjs": "6.6.7" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/cli/node_modules/@angular-devkit/core": { - "version": "13.0.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.0.4.tgz", - "integrity": "sha512-AzgLvERLC6qzY5aZWUpkz5nx+pZChrq3DSt6azMPALwzzoABrwiO6XqzRnj17mXtANXLH2oe9FuHr9jzgFbF1g==", - "dev": true, - "dependencies": { - "ajv": "8.6.3", - "ajv-formats": "2.1.1", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.7", - "source-map": "0.7.3" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular/cli/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@angular/cli/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@angular/common": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-13.0.2.tgz", - "integrity": "sha512-UxWzNAU/o9pP02AYB5MrnIlShirfO631NolmvP0jTSEmym1nAeDOwZIYlkgfcJMHFXFc7DBnE2XOGaTZ8if3kw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0" - }, - "peerDependencies": { - "@angular/core": "13.0.2", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/compiler": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-13.0.2.tgz", - "integrity": "sha512-EvIFT8y5VNICrnPgiamv/z9hfQ7KjLCM52g4ssXGCeGPVj58OEfslEc3jO4BCJG7xuLm7dCuSRV0pBlJNTSYFg==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0" - } - }, - "node_modules/@angular/compiler-cli": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.0.2.tgz", - "integrity": "sha512-KVDntMBoPoAPdpyO3LxR2U3BO3ja5fY5Im5rzynjBCC3dnwAPPKoIlYZlFY/5ov6yVoVleeb/BOovYxHuxZBsA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.8.6", - "canonical-path": "1.0.0", - "chokidar": "^3.0.0", - "convert-source-map": "^1.5.1", - "dependency-graph": "^0.11.0", - "magic-string": "^0.25.0", - "reflect-metadata": "^0.1.2", - "semver": "^7.0.0", - "sourcemap-codec": "^1.4.8", - "tslib": "^2.3.0", - "yargs": "^17.2.1" - }, - "bin": { - "ng-xi18n": "bundles/src/bin/ng_xi18n.js", - "ngc": "bundles/src/bin/ngc.js", - "ngcc": "bundles/ngcc/main-ngcc.js" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0" - }, - "peerDependencies": { - "@angular/compiler": "13.0.2", - "typescript": ">=4.4.2 <4.5" - } - }, - "node_modules/@angular/core": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-13.0.2.tgz", - "integrity": "sha512-6Jbct50lncMqzwLILzfmwQRK8eOEMv0quCL3pQptEpYPSlPqKz6QRxD76BykSUOs7XYJ/KdZmu3uGcT2Q/DUVg==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0" - }, - "peerDependencies": { - "rxjs": "^6.5.3 || ^7.4.0", - "zone.js": "~0.11.4" - } - }, - "node_modules/@angular/forms": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-13.0.2.tgz", - "integrity": "sha512-JGgEOTH/OYr7/RlqJUPSzKQF/a55UM5PD6CgpUjAXKrCV18+zhofO05g+ibIZH3OfONntthcbKEXxMTX2EEQqg==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0" - }, - "peerDependencies": { - "@angular/common": "13.0.2", - "@angular/core": "13.0.2", - "@angular/platform-browser": "13.0.2", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/material": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-13.0.2.tgz", - "integrity": "sha512-DbbkQFpZ73oxOuR9LkkpeUPWP31DNIG3Z94sOrtdBhX3HfbLLOCaAJAIwMl8+bEuzDgtWBmx3taUR8l4WKCO8g==", - "dependencies": { - "tslib": "^2.3.0" - }, - "peerDependencies": { - "@angular/animations": "^13.0.0 || ^14.0.0-0", - "@angular/cdk": "13.0.2", - "@angular/common": "^13.0.0 || ^14.0.0-0", - "@angular/core": "^13.0.0 || ^14.0.0-0", - "@angular/forms": "^13.0.0 || ^14.0.0-0", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/platform-browser": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-13.0.2.tgz", - "integrity": "sha512-fkLGr9Vj2cvFzXefyhNaqwXX90+WbpYj5cCii7S1HcbJ9qSM5ZenLp1t8mGRhmWI7odY4BrFskWOChlWFrLEkA==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0" - }, - "peerDependencies": { - "@angular/animations": "13.0.2", - "@angular/common": "13.0.2", - "@angular/core": "13.0.2" - }, - "peerDependenciesMeta": { - "@angular/animations": { - "optional": true - } - } - }, - "node_modules/@angular/platform-browser-dynamic": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-13.0.2.tgz", - "integrity": "sha512-2wZX2oop3A1kWFcbRYqe8AxBQjT35DXf1qlGyFQoMn7D0vOAprg6X1hUK2XBItRrvwRWh3hSVhzkustTIl+r6g==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0" - }, - "peerDependencies": { - "@angular/common": "13.0.2", - "@angular/compiler": "13.0.2", - "@angular/core": "13.0.2", - "@angular/platform-browser": "13.0.2" - } - }, - "node_modules/@angular/router": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-13.0.2.tgz", - "integrity": "sha512-AfmT845dcYPvNbUdV2ALlf++szZP3ie2d0eu7JyGWe3anV1fbDcg76RhjxFK8yVUxryrCQtEnot1VEEVlhGkyw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0" - }, - "peerDependencies": { - "@angular/common": "13.0.2", - "@angular/core": "13.0.2", - "@angular/platform-browser": "13.0.2", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@assemblyscript/loader": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", - "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", - "dev": true - }, - "node_modules/@babel/code-frame": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", - "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", - "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.8.tgz", - "integrity": "sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.15.8", - "@babel/generator": "^7.15.8", - "@babel/helper-compilation-targets": "^7.15.4", - "@babel/helper-module-transforms": "^7.15.8", - "@babel/helpers": "^7.15.4", - "@babel/parser": "^7.15.8", - "@babel/template": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.6", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/core/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@babel/generator": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz", - "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.15.6", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz", - "integrity": "sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.15.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.0.tgz", - "integrity": "sha512-9KuleLT0e77wFUku6TUkqZzCEymBdtuQQ27MhEKzf9UOOJu3cYj98kyaDAzxpC7lV6DGiZFuC8XqDsq8/Kl6aQ==", - "dev": true, - "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz", - "integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.16.0", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.17.5", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.0.tgz", - "integrity": "sha512-XLwWvqEaq19zFlF5PTgOod4bUA+XbkR4WLQBct1bkzmxJGB0ZEJaoKF4c8cgH9oBtCDuYJ8BP5NB9uFiEgO5QA==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-member-expression-to-functions": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", - "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.0.tgz", - "integrity": "sha512-3DyG0zAFAZKcOp7aVr33ddwkxJ0Z0Jr5V99y3I690eYLpukJsJvAbzTy1ewoCqsML8SbIrjH14Jc/nSQ4TvNPA==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "regexpu-core": "^4.7.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", - "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.4.tgz", - "integrity": "sha512-OrpPZ97s+aPi6h2n1OXzdhVis1SGSsMU2aMHgLcOKfsp4/v1NWpx3CWT3lBj5eeBq9cDkPkh+YCfdF7O12uNDQ==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz", - "integrity": "sha512-Hk2SLxC9ZbcOhLpg/yMznzJ11W++lg5GMbxt1ev6TXUiJB0N42KPC+7w8a+eWGuqDnUYuwStJoZHM7RgmIOaGQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", - "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", - "dev": true, - "dependencies": { - "@babel/helper-get-function-arity": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name/node_modules/@babel/template": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", - "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", - "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", - "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", - "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", - "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", - "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.16.0", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-simple-access": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/helper-validator-identifier": "^7.15.7", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms/node_modules/@babel/template": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", - "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", - "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.4.tgz", - "integrity": "sha512-vGERmmhR+s7eH5Y/cp8PCVzj4XEjerq8jooMfxFdA5xVtAk9Sh4AQsrWgiErUEBjtGrBtOFKDUcWQFW4/dFwMA==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-wrap-function": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", - "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", - "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", - "dev": true, - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", - "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", - "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", - "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.0.tgz", - "integrity": "sha512-VVMGzYY3vkWgCJML+qVLvGIam902mJW0FvT7Avj1zEe0Gn7D93aWdLblYARTxEw+6DhZmtzhBM2zv0ekE5zg1g==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function/node_modules/@babel/template": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", - "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.3.tgz", - "integrity": "sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==", - "dev": true, - "dependencies": { - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.3", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers/node_modules/@babel/template": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", - "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", - "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.15.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz", - "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.0.tgz", - "integrity": "sha512-4tcFwwicpWTrpl9qjf7UsoosaArgImF85AxqCRZlgc3IQDvkUHjJpruXAL58Wmj+T6fypWTC/BakfEkwIL/pwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.8.tgz", - "integrity": "sha512-2Z5F2R2ibINTc63mY7FLqGfEbmofrHU9FitJW1Q7aPaKFhiPvSq6QEt/BoWN5oME3GVyjcRuNNSRbb9LC0CSWA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.15.4", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz", - "integrity": "sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.0.tgz", - "integrity": "sha512-mAy3sdcY9sKAkf3lQbDiv3olOfiLqI51c9DR9b19uMoR2Z6r5pmGl7dfNFqEvqOyqbf1ta4lknK4gc5PJn3mfA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.0.tgz", - "integrity": "sha512-QGSA6ExWk95jFQgwz5GQ2Dr95cf7eI7TKutIXXTb7B1gCLTCz5hTjFTQGfLFBBiC5WSNi7udNwWsqbbMh1c4yQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.0.tgz", - "integrity": "sha512-CjI4nxM/D+5wCnhD11MHB1AwRSAYeDT+h8gCdcVJZ/OK7+wRzFsf7PFPWVpVpNRkHMmMkQWAHpTq+15IXQ1diA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.0.tgz", - "integrity": "sha512-kouIPuiv8mSi5JkEhzApg5Gn6hFyKPnlkO0a9YSzqRurH8wYzSlf6RJdzluAsbqecdW5pBvDJDfyDIUR/vLxvg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.0.tgz", - "integrity": "sha512-pbW0fE30sVTYXXm9lpVQQ/Vc+iTeQKiXlaNRZPPN2A2VdlWyAtsUrsQ3xydSlDW00TFMK7a8m3cDTkBF5WnV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.0.tgz", - "integrity": "sha512-3bnHA8CAFm7cG93v8loghDYyQ8r97Qydf63BeYiGgYbjKKB/XP53W15wfRC7dvKfoiJ34f6Rbyyx2btExc8XsQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.0.tgz", - "integrity": "sha512-FAhE2I6mjispy+vwwd6xWPyEx3NYFS13pikDBWUAFGZvq6POGs5eNchw8+1CYoEgBl9n11I3NkzD7ghn25PQ9Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.0.tgz", - "integrity": "sha512-LU/+jp89efe5HuWJLmMmFG0+xbz+I2rSI7iLc1AlaeSMDMOGzWlc5yJrMN1d04osXN4sSfpo4O+azkBNBes0jg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.16.0", - "@babel/helper-compilation-targets": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.0.tgz", - "integrity": "sha512-kicDo0A/5J0nrsCPbn89mTG3Bm4XgYi0CZtvex9Oyw7gGZE3HXGD0zpQNH+mo+tEfbo8wbmMvJftOwpmPy7aVw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.0.tgz", - "integrity": "sha512-Y4rFpkZODfHrVo70Uaj6cC1JJOt3Pp0MdWSwIKtb8z1/lsjl9AmnB7ErRFV+QNGIfcY1Eruc2UMx5KaRnXjMyg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.0.tgz", - "integrity": "sha512-IvHmcTHDFztQGnn6aWq4t12QaBXTKr1whF/dgp9kz84X6GUcwq9utj7z2wFCUfeOup/QKnOlt2k0zxkGFx9ubg==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.0.tgz", - "integrity": "sha512-3jQUr/HBbMVZmi72LpjQwlZ55i1queL8KcDTQEkAHihttJnAPrcvG9ZNXIfsd2ugpizZo595egYV6xy+pv4Ofw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-create-class-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", - "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.0.tgz", - "integrity": "sha512-ti7IdM54NXv29cA4+bNNKEMS4jLMCbJgl+Drv+FgYy0erJLAxNAIXcNjNjrRZEcWq0xJHsNVwQezskMFpF8N9g==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.0.tgz", - "integrity": "sha512-vIFb5250Rbh7roWARvCLvIJ/PtAU5Lhv7BtZ1u24COwpI9Ypjsh+bZcKk6rlIyalK+r0jOc1XQ8I4ovNxNrWrA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", - "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.0.tgz", - "integrity": "sha512-V14As3haUOP4ZWrLJ3VVx5rCnrYhMSHN/jX7z6FAt5hjRkLsb0snPCmJwSOML5oxkKO4FNoNv7V5hw/y2bjuvg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.0.tgz", - "integrity": "sha512-27n3l67/R3UrXfizlvHGuTwsRIFyce3D/6a37GRxn28iyTPvNXaW4XvznexRh1zUNLPjbLL22Id0XQElV94ruw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.0.tgz", - "integrity": "sha512-HUxMvy6GtAdd+GKBNYDWCIA776byUQH8zjnfjxwT1P1ARv/wFu8eBDpmXQcLS/IwRtrxIReGiplOwMeyO7nsDQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", - "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.0.tgz", - "integrity": "sha512-63l1dRXday6S8V3WFY5mXJwcRAnPYxvFfTlt67bwV1rTyVTM5zrp0DBBb13Kl7+ehkCVwIZPumPpFP/4u70+Tw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.0.tgz", - "integrity": "sha512-Q7tBUwjxLTsHEoqktemHBMtb3NYwyJPTJdM+wDwb0g8PZ3kQUIzNvwD5lPaqW/p54TXBc/MXZu9Jr7tbUEUM8Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.0.tgz", - "integrity": "sha512-FXlDZfQeLILfJlC6I1qyEwcHK5UpRCFkaoVyA1nk9A1L1Yu583YO4un2KsLBsu3IJb4CUbctZks8tD9xPQubLw==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.0.tgz", - "integrity": "sha512-LIe2kcHKAZOJDNxujvmp6z3mfN6V9lJxubU4fJIGoQCkKe3Ec2OcbdlYP+vW++4MpxwG0d1wSDOJtQW5kLnkZQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.0.tgz", - "integrity": "sha512-OwYEvzFI38hXklsrbNivzpO3fh87skzx8Pnqi4LoSYeav0xHlueSoCJrSgTPfnbyzopo5b3YVAJkFIcUpK2wsw==", - "dev": true, - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.0.tgz", - "integrity": "sha512-5QKUw2kO+GVmKr2wMYSATCTTnHyscl6sxFRAY+rvN7h7WB0lcG0o4NoV6ZQU32OZGVsYUsfLGgPQpDFdkfjlJQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.0.tgz", - "integrity": "sha512-lBzMle9jcOXtSOXUpc7tvvTpENu/NuekNJVova5lCCWCV9/U1ho2HH2y0p6mBg8fPm/syEAbfaaemYGOHCY3mg==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.0.tgz", - "integrity": "sha512-gQDlsSF1iv9RU04clgXqRjrPyyoJMTclFt3K1cjLmTKikc0s/6vE3hlDeEVC71wLTRu72Fq7650kABrdTc2wMQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.0.tgz", - "integrity": "sha512-WRpw5HL4Jhnxw8QARzRvwojp9MIE7Tdk3ez6vRyUk1MwgjJN0aNpRoXainLR5SgxmoXx/vsXGZ6OthP6t/RbUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.0.tgz", - "integrity": "sha512-rWFhWbCJ9Wdmzln1NmSCqn7P0RAD+ogXG/bd9Kg5c7PKWkJtkiXmYsMBeXjDlzHpVTJ4I/hnjs45zX4dEv81xw==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.0.tgz", - "integrity": "sha512-Dzi+NWqyEotgzk/sb7kgQPJQf7AJkQBWsVp1N6JWc1lBVo0vkElUnGdr1PzUBmfsCCN5OOFya3RtpeHk15oLKQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-simple-access": "^7.16.0", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.0.tgz", - "integrity": "sha512-yuGBaHS3lF1m/5R+6fjIke64ii5luRUg97N2wr+z1sF0V+sNSXPxXDdEEL/iYLszsN5VKxVB1IPfEqhzVpiqvg==", - "dev": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.16.0", - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-identifier": "^7.15.7", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.0.tgz", - "integrity": "sha512-nx4f6no57himWiHhxDM5pjwhae5vLpTK2zCnDH8+wNLJy0TVER/LJRHl2bkt6w9Aad2sPD5iNNoUpY3X9sTGDg==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.0.tgz", - "integrity": "sha512-LogN88uO+7EhxWc8WZuQ8vxdSyVGxhkh8WTC3tzlT8LccMuQdA81e9SGV6zY7kY2LjDhhDOFdQVxdGwPyBCnvg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.0.tgz", - "integrity": "sha512-fhjrDEYv2DBsGN/P6rlqakwRwIp7rBGLPbrKxwh7oVt5NNkIhZVOY2GRV+ULLsQri1bDqwDWnU3vhlmx5B2aCw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.0.tgz", - "integrity": "sha512-fds+puedQHn4cPLshoHcR1DTMN0q1V9ou0mUjm8whx9pGcNvDrVVrgw+KJzzCaiTdaYhldtrUps8DWVMgrSEyg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.3.tgz", - "integrity": "sha512-3MaDpJrOXT1MZ/WCmkOFo7EtmVVC8H4EUZVrHvFOsmwkk4lOjQj8rzv8JKUZV4YoQKeoIgk07GO+acPU9IMu/w==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.0.tgz", - "integrity": "sha512-XLldD4V8+pOqX2hwfWhgwXzGdnDOThxaNTgqagOcpBgIxbUvpgU2FMvo5E1RyHbk756WYgdbS0T8y0Cj9FKkWQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.0.tgz", - "integrity": "sha512-JAvGxgKuwS2PihiSFaDrp94XOzzTUeDeOQlcKzVAyaPap7BnZXK/lvMDiubkPTdotPKOIZq9xWXWnggUMYiExg==", - "dev": true, - "dependencies": { - "regenerator-transform": "^0.14.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.0.tgz", - "integrity": "sha512-Dgs8NNCehHSvXdhEhln8u/TtJxfVwGYCgP2OOr5Z3Ar+B+zXicEOKNTyc+eca2cuEOMtjW6m9P9ijOt8QdqWkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.15.8.tgz", - "integrity": "sha512-+6zsde91jMzzvkzuEA3k63zCw+tm/GvuuabkpisgbDMTPQsIMHllE3XczJFFtEHLjjhKQFZmGQVRdELetlWpVw==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.15.4", - "@babel/helper-plugin-utils": "^7.14.5", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.5", - "babel-plugin-polyfill-regenerator": "^0.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.0.tgz", - "integrity": "sha512-iVb1mTcD8fuhSv3k99+5tlXu5N0v8/DPm2mO3WACLG6al1CGZH7v09HJyUb1TtYl/Z+KrM6pHSIJdZxP5A+xow==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.0.tgz", - "integrity": "sha512-Ao4MSYRaLAQczZVp9/7E7QHsCuK92yHRrmVNRe/SlEJjhzivq0BSn8mEraimL8wizHZ3fuaHxKH0iwzI13GyGg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.0.tgz", - "integrity": "sha512-/ntT2NljR9foobKk4E/YyOSwcGUXtYWv5tinMK/3RkypyNBNdhHUaq6Orw5DWq9ZcNlS03BIlEALFeQgeVAo4Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.0.tgz", - "integrity": "sha512-Rd4Ic89hA/f7xUSJQk5PnC+4so50vBoBfxjdQAdvngwidM8jYIBVxBZ/sARxD4e0yMXRbJVDrYf7dyRtIIKT6Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.0.tgz", - "integrity": "sha512-++V2L8Bdf4vcaHi2raILnptTBjGEFxn5315YU+e8+EqXIucA+q349qWngCLpUYqqv233suJ6NOienIVUpS9cqg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.0.tgz", - "integrity": "sha512-VFi4dhgJM7Bpk8lRc5CMaRGlKZ29W9C3geZjt9beuzSUrlJxsNwX7ReLwaL6WEvsOf2EQkyIJEPtF8EXjB/g2A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.0.tgz", - "integrity": "sha512-jHLK4LxhHjvCeZDWyA9c+P9XH1sOxRd1RO9xMtDVRAOND/PczPqizEtVdx4TQF/wyPaewqpT+tgQFYMnN/P94A==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.15.8.tgz", - "integrity": "sha512-rCC0wH8husJgY4FPbHsiYyiLxSY8oMDJH7Rl6RQMknbN9oDDHhM9RDFvnGM2MgkbUJzSQB4gtuwygY5mCqGSsA==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.15.0", - "@babel/helper-compilation-targets": "^7.15.4", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.15.4", - "@babel/plugin-proposal-async-generator-functions": "^7.15.8", - "@babel/plugin-proposal-class-properties": "^7.14.5", - "@babel/plugin-proposal-class-static-block": "^7.15.4", - "@babel/plugin-proposal-dynamic-import": "^7.14.5", - "@babel/plugin-proposal-export-namespace-from": "^7.14.5", - "@babel/plugin-proposal-json-strings": "^7.14.5", - "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", - "@babel/plugin-proposal-numeric-separator": "^7.14.5", - "@babel/plugin-proposal-object-rest-spread": "^7.15.6", - "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", - "@babel/plugin-proposal-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-private-methods": "^7.14.5", - "@babel/plugin-proposal-private-property-in-object": "^7.15.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.14.5", - "@babel/plugin-transform-async-to-generator": "^7.14.5", - "@babel/plugin-transform-block-scoped-functions": "^7.14.5", - "@babel/plugin-transform-block-scoping": "^7.15.3", - "@babel/plugin-transform-classes": "^7.15.4", - "@babel/plugin-transform-computed-properties": "^7.14.5", - "@babel/plugin-transform-destructuring": "^7.14.7", - "@babel/plugin-transform-dotall-regex": "^7.14.5", - "@babel/plugin-transform-duplicate-keys": "^7.14.5", - "@babel/plugin-transform-exponentiation-operator": "^7.14.5", - "@babel/plugin-transform-for-of": "^7.15.4", - "@babel/plugin-transform-function-name": "^7.14.5", - "@babel/plugin-transform-literals": "^7.14.5", - "@babel/plugin-transform-member-expression-literals": "^7.14.5", - "@babel/plugin-transform-modules-amd": "^7.14.5", - "@babel/plugin-transform-modules-commonjs": "^7.15.4", - "@babel/plugin-transform-modules-systemjs": "^7.15.4", - "@babel/plugin-transform-modules-umd": "^7.14.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.9", - "@babel/plugin-transform-new-target": "^7.14.5", - "@babel/plugin-transform-object-super": "^7.14.5", - "@babel/plugin-transform-parameters": "^7.15.4", - "@babel/plugin-transform-property-literals": "^7.14.5", - "@babel/plugin-transform-regenerator": "^7.14.5", - "@babel/plugin-transform-reserved-words": "^7.14.5", - "@babel/plugin-transform-shorthand-properties": "^7.14.5", - "@babel/plugin-transform-spread": "^7.15.8", - "@babel/plugin-transform-sticky-regex": "^7.14.5", - "@babel/plugin-transform-template-literals": "^7.14.5", - "@babel/plugin-transform-typeof-symbol": "^7.14.5", - "@babel/plugin-transform-unicode-escapes": "^7.14.5", - "@babel/plugin-transform-unicode-regex": "^7.14.5", - "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.15.6", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.5", - "babel-plugin-polyfill-regenerator": "^0.2.2", - "core-js-compat": "^3.16.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", - "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", - "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.15.4", - "@babel/types": "^7.15.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.3.tgz", - "integrity": "sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-hoist-variables": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/parser": "^7.16.3", - "@babel/types": "^7.16.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", - "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@babel/types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", - "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.15.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@csstools/convert-colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", - "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz", - "integrity": "sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.1.0.tgz", - "integrity": "sha512-C1DfL7XX4nPqGd6jcP01W9pVM1HYCuUkFk1432D7F0v3JSlUIeOYn9oCoi3eoLZ+iwBSb29BMFxxny0YrrEZqg==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.1", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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/@eslint/eslintrc/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==", - "dev": true - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/@eslint/eslintrc/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, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@eslint/eslintrc/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==", - "dev": true - }, - "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, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@fortawesome/angular-fontawesome": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@fortawesome/angular-fontawesome/-/angular-fontawesome-0.10.2.tgz", - "integrity": "sha512-VxsCAo2lK74KwD236AKAhGpiethfz9yqCViIG2iRAZqgNmuZ6ihwumjbLW32n6hV4fFvCqLcHmpngoEl3TNiOg==", - "dependencies": { - "tslib": "^2.3.1" - }, - "peerDependencies": { - "@fortawesome/fontawesome-svg-core": "~1.2.27 || ~1.3.0-beta2 || ^6.1.0" - } - }, - "node_modules/@fortawesome/fontawesome-common-types": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.1.1.tgz", - "integrity": "sha512-wVn5WJPirFTnzN6tR95abCx+ocH+3IFLXAgyavnf9hUmN0CfWoDjPT/BAWsUVwSlYYVBeCLJxaqi7ZGe4uSjBA==", - "hasInstallScript": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/fontawesome-svg-core": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.1.1.tgz", - "integrity": "sha512-NCg0w2YIp81f4V6cMGD9iomfsIj7GWrqmsa0ZsPh59G7PKiGN1KymZNxmF00ssuAlo/VZmpK6xazsGOwzKYUMg==", - "hasInstallScript": true, - "dependencies": { - "@fortawesome/fontawesome-common-types": "6.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/free-regular-svg-icons": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.1.1.tgz", - "integrity": "sha512-xXiW7hcpgwmWtndKPOzG+43fPH7ZjxOaoeyooptSztGmJxCAflHZxXNK0GcT0uEsR4jTGQAfGklDZE5NHoBhKg==", - "hasInstallScript": true, - "dependencies": { - "@fortawesome/fontawesome-common-types": "6.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/free-solid-svg-icons": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.1.1.tgz", - "integrity": "sha512-0/5exxavOhI/D4Ovm2r3vxNojGZioPwmFrKg0ZUH69Q68uFhFPs6+dhAToh6VEQBntxPRYPuT5Cg1tpNa9JUPg==", - "hasInstallScript": true, - "dependencies": { - "@fortawesome/fontawesome-common-types": "6.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@gar/promisify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.2.tgz", - "integrity": "sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==", - "dev": true - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz", - "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "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, - "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/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-1.0.0.tgz", - "integrity": "sha512-9oLAnygRMi8Q5QkYEU4XWK04B+nuoXoxjRvRxgjuChkLZFBja0YPSgdZ7dZtwhncLBcQe/I/E+fLuk5qxcYVJA==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@ngtools/webpack": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.0.3.tgz", - "integrity": "sha512-sVi1Xk8pyy6Y6JODySucYfvuxb5k3IIX/oIWy8QxlFVzpeB2UMqEOevrgvtmiEbQNB1W+aYSTph6oeV+PRX5YA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "@angular/compiler-cli": "^13.0.0", - "typescript": "~4.4.3", - "webpack": "^5.30.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, - "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, - "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, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/fs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.0.0.tgz", - "integrity": "sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ==", - "dev": true, - "dependencies": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, - "node_modules/@npmcli/git": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz", - "integrity": "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==", - "dev": true, - "dependencies": { - "@npmcli/promise-spawn": "^1.3.2", - "lru-cache": "^6.0.0", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^6.1.1", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" - } - }, - "node_modules/@npmcli/git/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, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/installed-package-contents": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", - "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", - "dev": true, - "dependencies": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - }, - "bin": { - "installed-package-contents": "index.js" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "dev": true, - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/node-gyp": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz", - "integrity": "sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==", - "dev": true - }, - "node_modules/@npmcli/promise-spawn": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", - "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", - "dev": true, - "dependencies": { - "infer-owner": "^1.0.4" - } - }, - "node_modules/@npmcli/run-script": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-2.0.0.tgz", - "integrity": "sha512-fSan/Pu11xS/TdaTpTB0MRn9guwGU8dye+x56mEVgBEd/QsybBbYcAL0phPXi8SGWFEChkQd6M9qL4y6VOpFig==", - "dev": true, - "dependencies": { - "@npmcli/node-gyp": "^1.0.2", - "@npmcli/promise-spawn": "^1.3.2", - "node-gyp": "^8.2.0", - "read-package-json-fast": "^2.0.1" - } - }, - "node_modules/@schematics/angular": { - "version": "13.0.4", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.0.4.tgz", - "integrity": "sha512-P9F5c8ApLbEyfNO4TZNsTyAdrtOjwIhrM/P+eEC4/x6nklWlEFE6TGMYTNjiK/RRhkbX1tBs8gcdJLYxtEqPSg==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "13.0.4", - "@angular-devkit/schematics": "13.0.4", - "jsonc-parser": "3.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@schematics/angular/node_modules/@angular-devkit/core": { - "version": "13.0.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.0.4.tgz", - "integrity": "sha512-AzgLvERLC6qzY5aZWUpkz5nx+pZChrq3DSt6azMPALwzzoABrwiO6XqzRnj17mXtANXLH2oe9FuHr9jzgFbF1g==", - "dev": true, - "dependencies": { - "ajv": "8.6.3", - "ajv-formats": "2.1.1", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.7", - "source-map": "0.7.3" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@schematics/angular/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@schematics/angular/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "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==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@types/component-emitter": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", - "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==", - "dev": true - }, - "node_modules/@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", - "dev": true - }, - "node_modules/@types/cors": { - "version": "2.8.12", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", - "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", - "dev": true - }, - "node_modules/@types/eslint": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.2.0.tgz", - "integrity": "sha512-74hbvsnc+7TEDa1z5YLSe4/q8hGYB3USNvCuzHUJrjPV6hXaq8IXcngCrHkuvFt0+8rFz7xYXrHgNayIX0UZvQ==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", - "dev": true - }, - "node_modules/@types/http-proxy": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.7.tgz", - "integrity": "sha512-9hdj6iXH64tHSLTY+Vt2eYOGzSogC+JQ2H7bdPWkuh7KXP5qLllWx++t+K9Wk556c3dkDdPws/SpMRi0sdCT1w==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/jasmine": { - "version": "3.10.2", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.10.2.tgz", - "integrity": "sha512-qs4xjVm4V/XjM6owGm/x6TNmhGl5iKX8dkTdsgdgl9oFnqgzxLepnS7rN9Tdo7kDmnFD/VEqKrW57cGD2odbEg==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", - "dev": true - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true, - "peer": true - }, - "node_modules/@types/node": { - "version": "12.20.37", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.37.tgz", - "integrity": "sha512-i1KGxqcvJaLQali+WuypQnXwcplhtNtjs66eNsZpp2P2FL/trJJxx/VWsM0YCL2iMoIJrbXje48lvIQAQ4p2ZA==", - "dev": true - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "node_modules/@types/retry": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", - "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", - "dev": true - }, - "node_modules/@types/scriptjs": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@types/scriptjs/-/scriptjs-0.0.2.tgz", - "integrity": "sha1-CaIociGno0H8a5WwBeS/sqVANTg=", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.12.0.tgz", - "integrity": "sha512-fwCMkDimwHVeIOKeBHiZhRUfJXU8n6xW1FL9diDxAyGAFvKcH4csy0v7twivOQdQdA0KC8TDr7GGRd3L4Lv0rQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.12.0", - "@typescript-eslint/type-utils": "5.12.0", - "@typescript-eslint/utils": "5.12.0", - "debug": "^4.3.2", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.2.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.12.0.tgz", - "integrity": "sha512-MfSwg9JMBojMUoGjUmX+D2stoQj1CBYTCP0qnnVtu9A+YQXVKNtLjasYh+jozOcrb/wau8TCfWOkQTiOAruBog==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.12.0", - "@typescript-eslint/types": "5.12.0", - "@typescript-eslint/typescript-estree": "5.12.0", - "debug": "^4.3.2" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.12.0.tgz", - "integrity": "sha512-GAMobtIJI8FGf1sLlUWNUm2IOkIjvn7laFWyRx7CLrv6nLBI7su+B7lbStqVlK5NdLvHRFiJo2HhiDF7Ki01WQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.12.0", - "@typescript-eslint/visitor-keys": "5.12.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.12.0.tgz", - "integrity": "sha512-9j9rli3zEBV+ae7rlbBOotJcI6zfc6SHFMdKI9M3Nc0sy458LJ79Os+TPWeBBL96J9/e36rdJOfCuyRSgFAA0Q==", - "dev": true, - "dependencies": { - "@typescript-eslint/utils": "5.12.0", - "debug": "^4.3.2", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@typescript-eslint/type-utils/node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.12.0.tgz", - "integrity": "sha512-JowqbwPf93nvf8fZn5XrPGFBdIK8+yx5UEGs2QFAYFI8IWYfrzz+6zqlurGr2ctShMaJxqwsqmra3WXWjH1nRQ==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.12.0.tgz", - "integrity": "sha512-Dd9gVeOqt38QHR0BEA8oRaT65WYqPYbIc5tRFQPkfLquVEFPD1HAtbZT98TLBkEcCkvwDYOAvuSvAD9DnQhMfQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.12.0", - "@typescript-eslint/visitor-keys": "5.12.0", - "debug": "^4.3.2", - "globby": "^11.0.4", - "is-glob": "^4.0.3", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.12.0.tgz", - "integrity": "sha512-k4J2WovnMPGI4PzKgDtQdNrCnmBHpMUFy21qjX2CoPdoBcSBIMvVBr9P2YDP8jOqZOeK3ThOL6VO/sy6jtnvzw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.12.0", - "@typescript-eslint/types": "5.12.0", - "@typescript-eslint/typescript-estree": "5.12.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.12.0.tgz", - "integrity": "sha512-cFwTlgnMV6TgezQynx2c/4/tx9Tufbuo9LPzmWqyRC3QC4qTGkAG1C6pBr0/4I10PAI/FlYunI3vJjIcu+ZHMg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.12.0", - "eslint-visitor-keys": "^3.0.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true - }, - "node_modules/abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true, - "peerDependencies": { - "acorn": "^8" - } - }, - "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, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/adjust-sourcemap-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", - "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/adjust-sourcemap-loader/node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", - "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.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==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agentkeepalive": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz", - "integrity": "sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.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, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "8.6.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", - "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "dev": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10" - } - }, - "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, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, - "node_modules/array-includes": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", - "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", - "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/autoprefixer": { - "version": "9.8.8", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", - "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", - "dev": true, - "dependencies": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "picocolors": "^0.2.1", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - } - }, - "node_modules/autoprefixer/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/autoprefixer/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/autoprefixer/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-loader": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz", - "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==", - "dev": true, - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^1.4.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/babel-loader/node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/babel-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/babel-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.3.tgz", - "integrity": "sha512-NDZ0auNRzmAfE1oDDPW2JhzIMXUk+FFe2ICejmt5T4ocKgiQx3e0VCRx9NCAidcMtL2RUZaWtXnmjTCkx0tcbA==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.4", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz", - "integrity": "sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.2", - "core-js-compat": "^3.16.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.3.tgz", - "integrity": "sha512-JVE78oRZPKFIeUqFGrSORNzQnrDwZR16oiWeGM8ZyjBn2XAT5OjP+wXx5ESuo33nUsFUEJYjtklnsKbxW5L+7g==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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==", - "dev": true - }, - "node_modules/base64-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.1.tgz", - "integrity": "sha512-vFIUq7FdLtjZMhATwDul5RZWv2jpXQ09Pd6jcVEOvIsqCWTRFD/ONHNfyOS8dA/Ippi5dsIgpyKWKZaAKZltbA==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "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==", - "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" - } - ] - }, - "node_modules/base64id": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", - "dev": true, - "engines": { - "node": "^4.5.0 || >= 5.9" - } - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true - }, - "node_modules/big.js": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-6.1.1.tgz", - "integrity": "sha512-1vObw81a8ylZO5ePrtMay0n018TcftpTA5HFKDaSuiUDBo8biRBtjIobw60OpwuvrGk+FsxKamqN4cnmj/eXdg==", - "dev": true, - "engines": { - "node": "*" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/bigjs" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dev": true, - "dependencies": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "dev": true, - "dependencies": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "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, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz", - "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==", - "dev": true, - "dependencies": { - "caniuse-lite": "^1.0.30001280", - "electron-to-chromium": "^1.3.896", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "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" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true - }, - "node_modules/builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", - "dev": true - }, - "node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "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, - "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, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001283", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001283.tgz", - "integrity": "sha512-9RoKo841j1GQFSJz/nCXOj0sD7tHBtlowjYlrqIUS812x9/emfBLBt6IyMz1zIaYc/eRL8Cs6HPUVi2Hzq4sIg==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/canonical-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz", - "integrity": "sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg==", - "dev": true - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "node_modules/chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "dev": true, - "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" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/circular-dependency-plugin": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.2.2.tgz", - "integrity": "sha512-g38K9Cm5WRwlaH6g03B9OEz/0qRizI+2I7n+Gz+L5DxXJAPAiWQvwlYNm1V1jkdpUv95bOe/ASm2vfi/G560jQ==", - "dev": true, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "webpack": ">=4.0.1" - } - }, - "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, - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "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==", - "dev": true, - "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": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", - "dev": true - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "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==", - "dev": true - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", - "dev": true - }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "node_modules/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dev": true, - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", - "dev": true, - "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": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "node_modules/copy-anything": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.3.tgz", - "integrity": "sha512-GK6QUtisv4fNS+XcI7shX0Gx9ORg7QqIznyfho79JTnX1XhLiyZHfftvGiziqzRiEi/Bjhgpi+D2o7HxJFPnDQ==", - "dev": true, - "dependencies": { - "is-what": "^3.12.0" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.0.1.tgz", - "integrity": "sha512-14gHKKdYIxF84jCEgPgYXCPpldbwpxxLbCmA7LReY7gvbaT555DgeBWBgBZM116tv/fO6RRJrsivBqRyRlukhw==", - "dev": true, - "dependencies": { - "fast-glob": "^3.2.5", - "glob-parent": "^6.0.0", - "globby": "^11.0.3", - "normalize-path": "^3.0.0", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^6.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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/copy-webpack-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/copy-webpack-plugin/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==", - "dev": true - }, - "node_modules/copy-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/core-js": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.19.0.tgz", - "integrity": "sha512-L1TpFRWXZ76vH1yLM+z6KssLZrP8Z6GxxW4auoCj+XiViOzNPJCAuTIkn03BGdFe6Z5clX5t64wRIRypsZQrUg==", - "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.19.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.19.1.tgz", - "integrity": "sha512-Q/VJ7jAF/y68+aUsQJ/afPOewdsGkDtcMb40J8MbuWKlK3Y+wtHq8bTHKPj2WKWLIqmS5JhHs4CzHtz6pT2W6g==", - "dev": true, - "dependencies": { - "browserslist": "^4.17.6", - "semver": "7.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "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==", - "dev": true, - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/critters": { - "version": "0.0.14", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.14.tgz", - "integrity": "sha512-YiBoGKfU8/xg+tVMw0KfMBgmr0TWa1JGmRXDzbQRQQaDarGUcZZtZEB25QyYrLasQZAnvqoZhSg2GW0zdsQkYQ==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "css-select": "^4.1.3", - "parse5": "^6.0.1", - "parse5-htmlparser2-tree-adapter": "^6.0.1", - "postcss": "^8.3.7", - "pretty-bytes": "^5.3.0" - } - }, - "node_modules/critters/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, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/critters/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, - "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/critters/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/critters/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 - }, - "node_modules/critters/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/critters/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, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cross-spawn/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, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", - "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.4", - "source-map": "^0.6.1", - "source-map-resolve": "^0.6.0" - } - }, - "node_modules/css-blank-pseudo": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz", - "integrity": "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==", - "dev": true, - "dependencies": { - "postcss": "^7.0.5" - }, - "bin": { - "css-blank-pseudo": "cli.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/css-blank-pseudo/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/css-blank-pseudo/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/css-blank-pseudo/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/css-has-pseudo": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz", - "integrity": "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==", - "dev": true, - "dependencies": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^5.0.0-rc.4" - }, - "bin": { - "css-has-pseudo": "cli.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/css-has-pseudo/node_modules/cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/css-has-pseudo/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/css-has-pseudo/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/css-has-pseudo/node_modules/postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dev": true, - "dependencies": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/css-has-pseudo/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/css-loader": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.5.0.tgz", - "integrity": "sha512-VmuSdQa3K+wJsl39i7X3qGBM5+ZHmtTnv65fqMGI+fzmHoYmszTVvTqC1XN8JwWDViCB1a8wgNim5SV4fb37xg==", - "dev": true, - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.2.15", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.1.0", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/css-prefers-color-scheme": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz", - "integrity": "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==", - "dev": true, - "dependencies": { - "postcss": "^7.0.5" - }, - "bin": { - "css-prefers-color-scheme": "cli.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/css-prefers-color-scheme/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/css-prefers-color-scheme/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/css-prefers-color-scheme/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/css-select": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", - "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", - "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cssdb": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz", - "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==", - "dev": true - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", - "dev": true - }, - "node_modules/date-format": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz", - "integrity": "sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dev": true, - "dependencies": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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 - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "dependencies": { - "clone": "^1.0.2" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/del": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", - "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", - "dev": true, - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/dependency-graph": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "node_modules/di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", - "dev": true - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true - }, - "node_modules/dns-packet": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", - "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", - "dev": true, - "dependencies": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "dev": true, - "dependencies": { - "buffer-indexof": "^1.0.0" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", - "dev": true, - "dependencies": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "dev": true, - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", - "dev": true, - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "node_modules/electron-to-chromium": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.1.tgz", - "integrity": "sha512-9ldvb6QMHiDpUNF1iSwBTiTT0qXEN+xIO5WlCJrC5gt0z74ofOiqR698vaJqYWnri0XZiF0YmnrFmGq/EmpGAA==", - "dev": true - }, - "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 - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/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==", - "dev": true, - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/engine.io": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.0.tgz", - "integrity": "sha512-ErhZOVu2xweCjEfYcTdkCnEYUiZgkAcBBAhW4jbIvNG8SLU3orAqoJCiytZjYF7eTpVmmCrLDjLIEaPlUAs1uw==", - "dev": true, - "dependencies": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.0.0", - "ws": "~8.2.3" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/engine.io-parser": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.2.tgz", - "integrity": "sha512-wuiO7qO/OEkPJSFueuATIXtrxF7/6GTbAO9QLv7nnbjwZ5tYhLm9zxvLwxstRs0dcT0KUlWTjtIOs1T86jt12g==", - "dev": true, - "dependencies": { - "base64-arraybuffer": "~1.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", - "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", - "dev": true - }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "optional": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "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, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", - "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/esbuild": { - "version": "0.13.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.12.tgz", - "integrity": "sha512-vTKKUt+yoz61U/BbrnmlG9XIjwpdIxmHB8DlPR0AAW6OdS+nBQBci6LUHU2q9WbBobMEIQxxDpKbkmOGYvxsow==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "optionalDependencies": { - "esbuild-android-arm64": "0.13.12", - "esbuild-darwin-64": "0.13.12", - "esbuild-darwin-arm64": "0.13.12", - "esbuild-freebsd-64": "0.13.12", - "esbuild-freebsd-arm64": "0.13.12", - "esbuild-linux-32": "0.13.12", - "esbuild-linux-64": "0.13.12", - "esbuild-linux-arm": "0.13.12", - "esbuild-linux-arm64": "0.13.12", - "esbuild-linux-mips64le": "0.13.12", - "esbuild-linux-ppc64le": "0.13.12", - "esbuild-netbsd-64": "0.13.12", - "esbuild-openbsd-64": "0.13.12", - "esbuild-sunos-64": "0.13.12", - "esbuild-windows-32": "0.13.12", - "esbuild-windows-64": "0.13.12", - "esbuild-windows-arm64": "0.13.12" - } - }, - "node_modules/esbuild-darwin-64": { - "version": "0.13.12", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.12.tgz", - "integrity": "sha512-c51C+N+UHySoV2lgfWSwwmlnLnL0JWj/LzuZt9Ltk9ub1s2Y8cr6SQV5W3mqVH1egUceew6KZ8GyI4nwu+fhsw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/esbuild-wasm": { - "version": "0.13.12", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.13.12.tgz", - "integrity": "sha512-eGdiSewbnJffEvyA0qQmr+w3HurBMVp4QhOfICzeeoL9naC8qC3PFaw6hZaqSgks5DXnQONtUGUFLsX3eXpq8A==", - "dev": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "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": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "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": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.9.0.tgz", - "integrity": "sha512-PB09IGwv4F4b0/atrbcMFboF/giawbBLVC7fyDamk5Wtey4Jh2K+rYaBhCAbUyEI4QzB1ly09Uglc9iCtFaG2Q==", - "dev": true, - "dependencies": { - "@eslint/eslintrc": "^1.1.0", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "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.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "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-airbnb-base": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", - "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", - "dev": true, - "dependencies": { - "confusing-browser-globals": "^1.0.10", - "object.assign": "^4.1.2", - "object.entries": "^1.1.5", - "semver": "^6.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "peerDependencies": { - "eslint": "^7.32.0 || ^8.2.0", - "eslint-plugin-import": "^2.25.2" - } - }, - "node_modules/eslint-config-airbnb-base/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-config-google": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz", - "integrity": "sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "eslint": ">=5.16.0" - } - }, - "node_modules/eslint-config-prettier": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.4.0.tgz", - "integrity": "sha512-CFotdUcMY18nGRo5KGsnNxpznzhkopOcOo0InID+sgQssPrzjvsyKZPvOgymTFeHrFuC3Tzdf2YndhXtULK9Iw==", - "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "dev": true, - "peer": true, - "dependencies": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - } - }, - "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, - "peer": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", - "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", - "dev": true, - "peer": true, - "dependencies": { - "debug": "^3.2.7", - "find-up": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "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, - "peer": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "peer": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "peer": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "peer": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "peer": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.25.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz", - "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==", - "dev": true, - "peer": true, - "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.2", - "has": "^1.0.3", - "is-core-module": "^2.8.0", - "is-glob": "^4.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.5", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.12.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "peer": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "peer": true - }, - "node_modules/eslint-plugin-prettier": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", - "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==", - "dev": true, - "dependencies": { - "prettier-linter-helpers": "^1.0.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "eslint": ">=7.28.0", - "prettier": ">=2.0.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "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, - "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, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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/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, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/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==", - "dev": true - }, - "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, - "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, - "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 - }, - "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, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/eslint/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, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/eslint/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==", - "dev": true - }, - "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, - "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, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/espree": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", - "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", - "dev": true, - "dependencies": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "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==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "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, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "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==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter-asyncresource": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", - "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", - "dev": true - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "dev": true, - "dependencies": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "node_modules/express/node_modules/cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "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==", - "dev": true - }, - "node_modules/fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "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, - "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": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flat-cache/node_modules/flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", - "dev": true - }, - "node_modules/flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true - }, - "node_modules/flatten": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", - "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==", - "deprecated": "flatten is deprecated in favor of utility frameworks such as lodash.", - "dev": true - }, - "node_modules/follow-redirects": { - "version": "1.14.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz", - "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "node_modules/gauge": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.0.tgz", - "integrity": "sha512-F8sU45yQpjQjxKkm1UOAhf0U/O0aFt//Fl7hsrNVto+patMHjs7dPI9mFOGUKbhrgKm0S3EjW3scMFuQmWSROw==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1", - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "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, - "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, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "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, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "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, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "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, - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", - "dev": true - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "node_modules/hdr-histogram-js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.1.tgz", - "integrity": "sha512-uPZxl1dAFnjUFHWLZmt93vUUvtHeaBay9nVNHu38SdOjMSF/4KqJUqa1Seuj08ptU1rEb6AHvB41X8n/zFZ74Q==", - "dev": true, - "dependencies": { - "@assemblyscript/loader": "^0.10.1", - "base64-js": "^1.2.0", - "pako": "^1.0.3" - } - }, - "node_modules/hdr-histogram-percentiles-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", - "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", - "dev": true - }, - "node_modules/hosted-git-info": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "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/hpack.js/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==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-entities": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", - "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", - "dev": true - }, - "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 - }, - "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true - }, - "node_modules/http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http-errors/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "node_modules/http-parser-js": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", - "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", - "dev": true - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "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==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.1.tgz", - "integrity": "sha512-cfaXRVoZxSed/BmkA7SwBVNI9Kj7HFltaE5rqYOub5kWzWZ+gofV2koVN1j2rMW7pEfSSlCHGJ31xmuyFyfLOg==", - "dev": true, - "dependencies": { - "@types/http-proxy": "^1.17.5", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", - "dev": true, - "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==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "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" - } - ] - }, - "node_modules/ignore": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", - "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-walk": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-4.0.1.tgz", - "integrity": "sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw==", - "dev": true, - "dependencies": { - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", - "dev": true, - "optional": true, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "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, - "engines": { - "node": ">=4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "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==", - "dev": true - }, - "node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/inquirer": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.0.tgz", - "integrity": "sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.2.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/inquirer/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, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/inquirer/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, - "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/inquirer/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/inquirer/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 - }, - "node_modules/inquirer/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/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, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/internal-ip": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-6.2.0.tgz", - "integrity": "sha512-D8WGsR6yDt8uq7vDMu7mjcR+yRMm3dW8yufyChmszWRjcSHuxLBkR3GdS2HZAjodsaGuCvXeEJpueisXJULghg==", - "dev": true, - "dependencies": { - "default-gateway": "^6.0.0", - "ipaddr.js": "^1.9.1", - "is-ip": "^3.1.0", - "p-event": "^4.2.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/internal-ip?sponsor=1" - } - }, - "node_modules/internal-ip/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==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "node_modules/ip-regex": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", - "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "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": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "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, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "engines": { - "node": ">=8" - } - }, - "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, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-ip": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz", - "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==", - "dev": true, - "dependencies": { - "ip-regex": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", - "dev": true - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, - "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, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", - "dev": true, - "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==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-what": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", - "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", - "dev": true - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/isbinaryfile": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", - "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==", - "dev": true, - "engines": { - "node": ">= 8.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", - "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "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, - "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/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz", - "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jasmine-core": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.10.1.tgz", - "integrity": "sha512-ooZWSDVAdh79Rrj4/nnfklL3NQVra0BcuhcuWoAwwi+znLDoUeH87AFfeX8s+YeYi6xlv5nveRyaA1v7CintfA==", - "dev": true - }, - "node_modules/jest-worker": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.3.1.tgz", - "integrity": "sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "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 - }, - "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, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "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 - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", - "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true, - "engines": [ - "node >= 0.2.0" - ] - }, - "node_modules/karma": { - "version": "6.3.9", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.9.tgz", - "integrity": "sha512-E/MqdLM9uVIhfuyVnrhlGBu4miafBdXEAEqCmwdEMh3n17C7UWC/8Kvm3AYKr91gc7scutekZ0xv6rxRaUCtnw==", - "dev": true, - "dependencies": { - "body-parser": "^1.19.0", - "braces": "^3.0.2", - "chokidar": "^3.5.1", - "colors": "^1.4.0", - "connect": "^3.7.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.1", - "glob": "^7.1.7", - "graceful-fs": "^4.2.6", - "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.8", - "lodash": "^4.17.21", - "log4js": "^6.3.0", - "mime": "^2.5.2", - "minimatch": "^3.0.4", - "qjobs": "^1.2.0", - "range-parser": "^1.2.1", - "rimraf": "^3.0.2", - "socket.io": "^4.2.0", - "source-map": "^0.6.1", - "tmp": "^0.2.1", - "ua-parser-js": "^0.7.30", - "yargs": "^16.1.1" - }, - "bin": { - "karma": "bin/karma" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/karma-chrome-launcher": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz", - "integrity": "sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg==", - "dev": true, - "dependencies": { - "which": "^1.2.1" - } - }, - "node_modules/karma-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.0.3.tgz", - "integrity": "sha512-atDvLQqvPcLxhED0cmXYdsPMCQuh6Asa9FMZW1bhNqlVEhJoB9qyZ2BY1gu7D/rr5GLGb5QzYO4siQskxaWP/g==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.1", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.0", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/karma-coverage/node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/karma-coverage/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/karma-jasmine": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-4.0.1.tgz", - "integrity": "sha512-h8XDAhTiZjJKzfkoO1laMH+zfNlra+dEQHUAjpn5JV1zCPtOIVWGQjLBrqhnzQa/hrU2XrZwSyBa6XjEBzfXzw==", - "dev": true, - "dependencies": { - "jasmine-core": "^3.6.0" - }, - "engines": { - "node": ">= 10" - }, - "peerDependencies": { - "karma": "*" - } - }, - "node_modules/karma-jasmine-html-reporter": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.7.0.tgz", - "integrity": "sha512-pzum1TL7j90DTE86eFt48/s12hqwQuiD+e5aXx2Dc9wDEn2LfGq6RoAxEZZjFiN0RDSCOnosEKRZWxbQ+iMpQQ==", - "dev": true, - "peerDependencies": { - "jasmine-core": ">=3.8", - "karma": ">=0.9", - "karma-jasmine": ">=1.1" - } - }, - "node_modules/karma-source-map-support": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", - "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", - "dev": true, - "dependencies": { - "source-map-support": "^0.5.5" - } - }, - "node_modules/karma/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/karma/node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/karma/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/less": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/less/-/less-4.1.2.tgz", - "integrity": "sha512-EoQp/Et7OSOVu0aJknJOtlXZsnr8XE8KwuzTHOLeVSEx8pVWUICc8Q0VYRHgzyjX78nMEyC/oztWFbgyhtNfDA==", - "dev": true, - "dependencies": { - "copy-anything": "^2.0.1", - "parse-node-version": "^1.0.1", - "tslib": "^2.3.0" - }, - "bin": { - "lessc": "bin/lessc" - }, - "engines": { - "node": ">=6" - }, - "optionalDependencies": { - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "needle": "^2.5.2", - "source-map": "~0.6.0" - } - }, - "node_modules/less-loader": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-10.2.0.tgz", - "integrity": "sha512-AV5KHWvCezW27GT90WATaDnfXBv99llDbtaj4bshq6DvAihMdNjaPDcUMa6EXKLRF+P2opFenJp89BXg91XLYg==", - "dev": true, - "dependencies": { - "klona": "^2.0.4" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "less": "^3.5.0 || ^4.0.0", - "webpack": "^5.0.0" - } - }, - "node_modules/less/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "optional": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/less/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "optional": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/less/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, - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/less/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "optional": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/less/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/license-webpack-plugin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.0.tgz", - "integrity": "sha512-b9iMrROrw2fTOJBZ57h0xJfT5/1Cxg4ucYbtpWoukv4Awb2TFPfDDFVHNM8w6SYQpVfB13a5tQJxgGamqwrsyw==", - "dev": true, - "dependencies": { - "webpack-sources": "^3.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-sources": { - "optional": true - } - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", - "dev": true, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.0.0.tgz", - "integrity": "sha512-ry4RE7qen73BFLgihlbyllGIW9SVWLUD5Cq9VWtzrqhntOMOJl8yEjA89d5mCUTT0puCnHo4EecO6bz+BOAS8w==", - "dev": true, - "dependencies": { - "big.js": "^6.1.1" - }, - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true - }, - "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 - }, - "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, - "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, - "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, - "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, - "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 - }, - "node_modules/log-symbols/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, - "engines": { - "node": ">=8" - } - }, - "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, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log4js": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.3.0.tgz", - "integrity": "sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw==", - "dev": true, - "dependencies": { - "date-format": "^3.0.0", - "debug": "^4.1.1", - "flatted": "^2.0.1", - "rfdc": "^1.1.4", - "streamroller": "^2.2.4" - }, - "engines": { - "node": ">=8.0" - } - }, - "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==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.4" - } - }, - "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, - "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.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/make-fetch-happen": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "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=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.0.tgz", - "integrity": "sha512-o/RfP0J1d03YwsAxyHxAYs2kyJp55AFkMazlFAZFR2I2IXkxiUTXRabJ6RmNNCQ83LAD2jy52Khj0m3OffpNdA==", - "dev": true, - "dependencies": { - "fs-monkey": "1.0.3" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "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=", - "dev": true - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "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, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "dev": true, - "dependencies": { - "mime-db": "1.51.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.4.3.tgz", - "integrity": "sha512-zekavl9mZuGyk7COjsfFY/f655AX61EKE0AthXPrmDk+oZyjZ9WzO4WPjXnnO9xl8obK2kmM6rAQrBEmk+WK1g==", - "dev": true, - "dependencies": { - "schema-utils": "^3.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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/mini-css-extract-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/mini-css-extract-plugin/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==", - "dev": true - }, - "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "node_modules/minipass": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz", - "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", - "dev": true, - "dependencies": { - "minipass": "^3.1.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "optionalDependencies": { - "encoding": "^0.1.12" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-json-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", - "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", - "dev": true, - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "dev": true, - "dependencies": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.1.30", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", - "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node_modules/needle": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", - "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", - "dev": true, - "optional": true, - "dependencies": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 4.4.x" - } - }, - "node_modules/needle/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "optional": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/nice-napi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", - "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "!win32" - ], - "dependencies": { - "node-addon-api": "^3.0.0", - "node-gyp-build": "^4.2.2" - } - }, - "node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true, - "optional": true - }, - "node_modules/node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", - "dev": true, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/node-gyp": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", - "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", - "dev": true, - "dependencies": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^9.1.0", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": ">= 10.12.0" - } - }, - "node_modules/node-gyp-build": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", - "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", - "dev": true, - "optional": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-gyp/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, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", - "dev": true - }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", - "dev": true, - "dependencies": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "node_modules/npm-install-checks": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", - "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", - "dev": true, - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true - }, - "node_modules/npm-package-arg": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", - "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", - "validate-npm-package-name": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-packlist": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-3.0.0.tgz", - "integrity": "sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ==", - "dev": true, - "dependencies": { - "glob": "^7.1.6", - "ignore-walk": "^4.0.1", - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - }, - "bin": { - "npm-packlist": "bin/index.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-pick-manifest": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", - "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", - "dev": true, - "dependencies": { - "npm-install-checks": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^8.1.2", - "semver": "^7.3.4" - } - }, - "node_modules/npm-registry-fetch": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", - "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", - "dev": true, - "dependencies": { - "make-fetch-happen": "^9.0.1", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npmlog": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.0.tgz", - "integrity": "sha512-03ppFRGlsyUaQFbGC2C8QWJN/C/K7PsfyD9aQdhVKAQIH4sQBc8WASqFBP7O+Ut4d2oo5LoeoboB3cGdBZSp6Q==", - "dev": true, - "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.0", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true - }, - "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=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "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==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", - "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "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.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/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, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ora/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, - "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/ora/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ora/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 - }, - "node_modules/ora/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/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, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-event": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", - "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", - "dev": true, - "dependencies": { - "p-timeout": "^3.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "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, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", - "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", - "dev": true, - "dependencies": { - "@types/retry": "^0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-retry/node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, - "dependencies": { - "p-finally": "^1.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, - "engines": { - "node": ">=6" - } - }, - "node_modules/pacote": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-12.0.2.tgz", - "integrity": "sha512-Ar3mhjcxhMzk+OVZ8pbnXdb0l8+pimvlsqBGRNkble2NVgyqOGE3yrCGi/lAYq7E7NRDMz89R1Wx5HIMCGgeYg==", - "dev": true, - "dependencies": { - "@npmcli/git": "^2.1.0", - "@npmcli/installed-package-contents": "^1.0.6", - "@npmcli/promise-spawn": "^1.2.0", - "@npmcli/run-script": "^2.0.0", - "cacache": "^15.0.5", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.3", - "mkdirp": "^1.0.3", - "npm-package-arg": "^8.0.1", - "npm-packlist": "^3.0.0", - "npm-pick-manifest": "^6.0.0", - "npm-registry-fetch": "^11.0.0", - "promise-retry": "^2.0.1", - "read-package-json-fast": "^2.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.1.0" - }, - "bin": { - "pacote": "lib/bin.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "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, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/parse5-html-rewriting-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-6.0.1.tgz", - "integrity": "sha512-vwLQzynJVEfUlURxgnf51yAJDQTtVpNyGD8tKi2Za7m+akukNHxCcUQMAa/mUGLhCeicFdpy7Tlvj8ZNKadprg==", - "dev": true, - "dependencies": { - "parse5": "^6.0.1", - "parse5-sax-parser": "^6.0.1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dev": true, - "dependencies": { - "parse5": "^6.0.1" - } - }, - "node_modules/parse5-sax-parser": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz", - "integrity": "sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg==", - "dev": true, - "dependencies": { - "parse5": "^6.0.1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "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, - "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": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "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, - "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 - }, - "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=", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/piscina": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.1.0.tgz", - "integrity": "sha512-KTW4sjsCD34MHrUbx9eAAbuUSpVj407hQSgk/6Epkg0pbRBmv4a3UX7Sr8wxm9xYqQLnsN4mFOjqGDzHAdgKQg==", - "dev": true, - "dependencies": { - "eventemitter-asyncresource": "^1.0.0", - "hdr-histogram-js": "^2.0.1", - "hdr-histogram-percentiles-obj": "^3.0.0" - }, - "optionalDependencies": { - "nice-napi": "^1.0.2" - } - }, - "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, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "dev": true, - "dependencies": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "engines": { - "node": ">= 0.12.0" - } - }, - "node_modules/portfinder/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/portfinder/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/postcss": { - "version": "8.3.11", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.11.tgz", - "integrity": "sha512-hCmlUAIlUiav8Xdqw3Io4LcpA1DOt7h3LSTAC4G6JGHFFaWzI6qvFt9oilvl8BmkbBRX1IhM90ZAmpk68zccQA==", - "dev": true, - "dependencies": { - "nanoid": "^3.1.30", - "picocolors": "^1.0.0", - "source-map-js": "^0.6.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-attribute-case-insensitive": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz", - "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^6.0.2" - } - }, - "node_modules/postcss-attribute-case-insensitive/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-attribute-case-insensitive/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-attribute-case-insensitive/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-color-functional-notation": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", - "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-color-functional-notation/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-color-functional-notation/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-color-functional-notation/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-color-gray": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz", - "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==", - "dev": true, - "dependencies": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.5", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-color-gray/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-color-gray/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-color-gray/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-color-hex-alpha": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz", - "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==", - "dev": true, - "dependencies": { - "postcss": "^7.0.14", - "postcss-values-parser": "^2.0.1" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-color-hex-alpha/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-color-hex-alpha/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-color-hex-alpha/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-color-mod-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz", - "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==", - "dev": true, - "dependencies": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-color-mod-function/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-color-mod-function/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-color-mod-function/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-color-rebeccapurple": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz", - "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-color-rebeccapurple/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-color-rebeccapurple/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-color-rebeccapurple/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-custom-media": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz", - "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==", - "dev": true, - "dependencies": { - "postcss": "^7.0.14" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-custom-media/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-custom-media/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-custom-media/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-custom-properties": { - "version": "8.0.11", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz", - "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==", - "dev": true, - "dependencies": { - "postcss": "^7.0.17", - "postcss-values-parser": "^2.0.1" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-custom-properties/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-custom-properties/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-custom-properties/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-custom-selectors": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz", - "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-custom-selectors/node_modules/cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-custom-selectors/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-custom-selectors/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-custom-selectors/node_modules/postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dev": true, - "dependencies": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-custom-selectors/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-dir-pseudo-class": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz", - "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/postcss-dir-pseudo-class/node_modules/cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-dir-pseudo-class/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-dir-pseudo-class/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-dir-pseudo-class/node_modules/postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dev": true, - "dependencies": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-dir-pseudo-class/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-double-position-gradients": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz", - "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==", - "dev": true, - "dependencies": { - "postcss": "^7.0.5", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-double-position-gradients/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-double-position-gradients/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-double-position-gradients/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-env-function": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz", - "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-env-function/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-env-function/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-env-function/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-focus-visible": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz", - "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-focus-visible/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-focus-visible/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-focus-visible/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-focus-within": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz", - "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-focus-within/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-focus-within/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-focus-within/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-font-variant": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz", - "integrity": "sha512-I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2" - } - }, - "node_modules/postcss-font-variant/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-font-variant/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-font-variant/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-gap-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz", - "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-gap-properties/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-gap-properties/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-gap-properties/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-image-set-function": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz", - "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-image-set-function/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-image-set-function/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-image-set-function/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-import": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.2.tgz", - "integrity": "sha512-BJ2pVK4KhUyMcqjuKs9RijV5tatNzNa73e/32aBVE/ejYPe37iH+6vAu9WvqUkB5OAYgLHzbSvzHnorybJCm9g==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-initial": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.4.tgz", - "integrity": "sha512-3RLn6DIpMsK1l5UUy9jxQvoDeUN4gP939tDcKUHD/kM8SGSKbFAnvkpFpj3Bhtz3HGk1jWY5ZNWX6mPta5M9fg==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2" - } - }, - "node_modules/postcss-initial/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-initial/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-initial/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-lab-function": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz", - "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==", - "dev": true, - "dependencies": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-lab-function/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-lab-function/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-lab-function/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.0.tgz", - "integrity": "sha512-H9hv447QjQJVDbHj3OUdciyAXY3v5+UDduzEytAlZCVHCpNAAg/mCSwhYYqZr9BiGYhmYspU8QXxZwiHTLn3yA==", - "dev": true, - "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.4", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-logical": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz", - "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-logical/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-logical/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-logical/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-media-minmax": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz", - "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-media-minmax/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-media-minmax/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-media-minmax/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-nesting": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz", - "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-nesting/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-nesting/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-nesting/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-overflow-shorthand": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", - "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-overflow-shorthand/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-overflow-shorthand/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-overflow-shorthand/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-page-break": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz", - "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2" - } - }, - "node_modules/postcss-page-break/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-page-break/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-page-break/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-place": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz", - "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-place/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-place/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-place/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-preset-env": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz", - "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==", - "dev": true, - "dependencies": { - "autoprefixer": "^9.6.1", - "browserslist": "^4.6.4", - "caniuse-lite": "^1.0.30000981", - "css-blank-pseudo": "^0.1.4", - "css-has-pseudo": "^0.10.0", - "css-prefers-color-scheme": "^3.1.1", - "cssdb": "^4.4.0", - "postcss": "^7.0.17", - "postcss-attribute-case-insensitive": "^4.0.1", - "postcss-color-functional-notation": "^2.0.1", - "postcss-color-gray": "^5.0.0", - "postcss-color-hex-alpha": "^5.0.3", - "postcss-color-mod-function": "^3.0.3", - "postcss-color-rebeccapurple": "^4.0.1", - "postcss-custom-media": "^7.0.8", - "postcss-custom-properties": "^8.0.11", - "postcss-custom-selectors": "^5.1.2", - "postcss-dir-pseudo-class": "^5.0.0", - "postcss-double-position-gradients": "^1.0.0", - "postcss-env-function": "^2.0.2", - "postcss-focus-visible": "^4.0.0", - "postcss-focus-within": "^3.0.0", - "postcss-font-variant": "^4.0.0", - "postcss-gap-properties": "^2.0.0", - "postcss-image-set-function": "^3.0.1", - "postcss-initial": "^3.0.0", - "postcss-lab-function": "^2.0.1", - "postcss-logical": "^3.0.0", - "postcss-media-minmax": "^4.0.0", - "postcss-nesting": "^7.0.0", - "postcss-overflow-shorthand": "^2.0.0", - "postcss-page-break": "^2.0.0", - "postcss-place": "^4.0.1", - "postcss-pseudo-class-any-link": "^6.0.0", - "postcss-replace-overflow-wrap": "^3.0.0", - "postcss-selector-matches": "^4.0.0", - "postcss-selector-not": "^4.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-preset-env/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-preset-env/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-preset-env/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-pseudo-class-any-link": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz", - "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-pseudo-class-any-link/node_modules/cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-pseudo-class-any-link/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-pseudo-class-any-link/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-pseudo-class-any-link/node_modules/postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dev": true, - "dependencies": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-pseudo-class-any-link/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-replace-overflow-wrap": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz", - "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2" - } - }, - "node_modules/postcss-replace-overflow-wrap/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-replace-overflow-wrap/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-replace-overflow-wrap/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-selector-matches": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz", - "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "postcss": "^7.0.2" - } - }, - "node_modules/postcss-selector-matches/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-selector-matches/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-selector-matches/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-selector-not": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz", - "integrity": "sha512-YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "postcss": "^7.0.2" - } - }, - "node_modules/postcss-selector-not/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-selector-not/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-selector-not/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", - "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", - "dev": true - }, - "node_modules/postcss-values-parser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", - "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", - "dev": true, - "dependencies": { - "flatten": "^1.0.2", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=6.14.4" - } - }, - "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, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", - "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "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==", - "dev": true, - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/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==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true, - "optional": true - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/qjobs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", - "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", - "dev": true, - "engines": { - "node": ">=0.9" - } - }, - "node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "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" - } - ] - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "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==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "dev": true, - "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", - "dev": true, - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/read-package-json-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", - "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", - "dev": true, - "dependencies": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "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, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", - "dev": true - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", - "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", - "dev": true - }, - "node_modules/regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-parser": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", - "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", - "dev": true - }, - "node_modules/regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "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, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/regexpu-core": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", - "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^9.0.0", - "regjsgen": "^0.5.2", - "regjsparser": "^0.7.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", - "dev": true - }, - "node_modules/regjsparser": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", - "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-url-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", - "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", - "dev": true, - "dependencies": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^7.0.35", - "source-map": "0.6.1" - }, - "engines": { - "node": ">=8.9" - }, - "peerDependencies": { - "rework": "1.0.1", - "rework-visit": "1.0.0" - }, - "peerDependenciesMeta": { - "rework": { - "optional": true - }, - "rework-visit": { - "optional": true - } - } - }, - "node_modules/resolve-url-loader/node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/resolve-url-loader/node_modules/loader-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", - "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/resolve-url-loader/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/resolve-url-loader/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/resolve-url-loader/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "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" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz", - "integrity": "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==", - "dependencies": { - "tslib": "~2.1.0" - } - }, - "node_modules/rxjs/node_modules/tslib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", - "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" - }, - "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==", - "dev": true - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/sass": { - "version": "1.43.4", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.43.4.tgz", - "integrity": "sha512-/ptG7KE9lxpGSYiXn7Ar+lKOv37xfWsZRtFYal2QHNigyVQDx685VFT/h7ejVr+R8w7H4tmUgtulsKl5YpveOg==", - "dev": true, - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/sass-loader": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.3.0.tgz", - "integrity": "sha512-6l9qwhdOb7qSrtOu96QQ81LVl8v6Dp9j1w3akOm0aWHyrTYtagDt5+kS32N4yq4hHk3M+rdqoRMH+lIdqvW6HA==", - "dev": true, - "dependencies": { - "klona": "^2.0.4", - "neo-async": "^2.6.2" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0", - "sass": "^1.3.0", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/schema-utils/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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/schema-utils/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/schema-utils/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==", - "dev": true - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", - "dev": true - }, - "node_modules/selfsigned": { - "version": "1.10.11", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", - "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", - "dev": true, - "dependencies": { - "node-forge": "^0.10.0" - } - }, - "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/send/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/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=", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "node_modules/serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "dev": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - }, - "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": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "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, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socket.io": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.0.tgz", - "integrity": "sha512-bnpJxswR9ov0Bw6ilhCvO38/1WPtE3eA2dtxi2Iq4/sFebiDJQzgKNYA7AuVVdGW09nrESXd90NbZqtDd9dzRQ==", - "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "debug": "~4.3.2", - "engine.io": "~6.1.0", - "socket.io-adapter": "~2.3.3", - "socket.io-parser": "~4.0.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/socket.io-adapter": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz", - "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==", - "dev": true - }, - "node_modules/socket.io-parser": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", - "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", - "dev": true, - "dependencies": { - "@types/component-emitter": "^1.2.10", - "component-emitter": "~1.3.0", - "debug": "~4.3.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/sockjs": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", - "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", - "dev": true, - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^3.4.0", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/sockjs/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.", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/socks": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", - "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", - "dev": true, - "dependencies": { - "ip": "^1.1.5", - "smart-buffer": "^4.1.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", - "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.1", - "socks": "^2.6.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", - "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.0.tgz", - "integrity": "sha512-GKGWqWvYr04M7tn8dryIWvb0s8YM41z82iQv01yBtIylgxax0CwvSy6gc2Y02iuXwEfGWRlMicH0nvms9UZphw==", - "dev": true, - "dependencies": { - "abab": "^2.0.5", - "iconv-lite": "^0.6.2", - "source-map-js": "^0.6.2" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/source-map-loader/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==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", - "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/streamroller": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz", - "integrity": "sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ==", - "dev": true, - "dependencies": { - "date-format": "^2.1.0", - "debug": "^4.1.1", - "fs-extra": "^8.1.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/streamroller/node_modules/date-format": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", - "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", - "dev": true, - "engines": { - "node": ">=4.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==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string_decoder/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==", - "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" - } - ] - }, - "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, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "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, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylus": { - "version": "0.55.0", - "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.55.0.tgz", - "integrity": "sha512-MuzIIVRSbc8XxHH7FjkvWqkIcr1BvoMZoR/oFuAJDlh7VSaNJzrB4uJ38GRQa+mWjLXODAMzeDe0xi9GYbGwnw==", - "dev": true, - "dependencies": { - "css": "^3.0.0", - "debug": "~3.1.0", - "glob": "^7.1.6", - "mkdirp": "~1.0.4", - "safer-buffer": "^2.1.2", - "sax": "~1.2.4", - "semver": "^6.3.0", - "source-map": "^0.7.3" - }, - "bin": { - "stylus": "bin/stylus" - }, - "engines": { - "node": "*" - } - }, - "node_modules/stylus-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-6.2.0.tgz", - "integrity": "sha512-5dsDc7qVQGRoc6pvCL20eYgRUxepZ9FpeK28XhdXaIPP6kXr6nI1zAAKFQgP5OBkOfKaURp4WUpJzspg1f01Gg==", - "dev": true, - "dependencies": { - "fast-glob": "^3.2.7", - "klona": "^2.0.4", - "normalize-path": "^3.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "stylus": ">=0.52.4", - "webpack": "^5.0.0" - } - }, - "node_modules/stylus/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/stylus/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/stylus/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/symbol-observable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", - "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/terser": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz", - "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==", - "dev": true, - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.5.tgz", - "integrity": "sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g==", - "dev": true, - "dependencies": { - "jest-worker": "^27.0.6", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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/terser-webpack-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/terser-webpack-plugin/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==", - "dev": true - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser-webpack-plugin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "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, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/tsconfig-paths": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", - "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "peer": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, - "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, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-assert": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.8.tgz", - "integrity": "sha512-5NkbXZUlmCE73Fs7gvkp1XXJWHYetPkg60QnQ2NXQmBYNFxbBr2zA8GCtaH4K2s2WhOmSlgiSTmrjrcm5tnM5g==", - "dev": true - }, - "node_modules/typescript": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", - "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/ua-parser-js": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", - "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "engines": { - "node": "*" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, - "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "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, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", - "dev": true, - "dependencies": { - "builtins": "^1.0.3" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.0.tgz", - "integrity": "sha512-MnN0Q1OsvB/GGHETrFeZPQaOelWh/7O+EiFlj8sM9GPjtQkis7k01aAxrg/18kTfoIVcLL+haEVFlXDaSRwKRw==", - "dev": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/webpack": { - "version": "5.64.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.64.1.tgz", - "integrity": "sha512-b4FHmRgaaAjP+aVOVz41a9Qa5SmkUPQ+u8FntTQ1roPHahSComB6rXnLwc976VhUY4CqTaLu5mCswuHiNhOfVw==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.3", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.2.0", - "webpack-sources": "^3.2.2" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-middleware": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.2.1.tgz", - "integrity": "sha512-Kx1X+36Rn9JaZcQMrJ7qN3PMAuKmEDD9ZISjUj3Cgq4A6PtwYsC4mpaKotSRYH3iOF6HsUa8viHKS59FlyVifQ==", - "dev": true, - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.2.2", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^3.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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/webpack-dev-middleware/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/webpack-dev-middleware/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==", - "dev": true - }, - "node_modules/webpack-dev-middleware/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.4.0.tgz", - "integrity": "sha512-+S0XRIbsopVjPFjCO8I07FXYBWYqkFmuP56ucGMTs2hA/gV4q2M9xTmNo5Tg4o8ffRR+Nm3AsXnQXxKRyYovrA==", - "dev": true, - "dependencies": { - "ansi-html-community": "^0.0.8", - "bonjour": "^3.5.0", - "chokidar": "^3.5.2", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "del": "^6.0.0", - "express": "^4.17.1", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.0", - "internal-ip": "^6.2.0", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "portfinder": "^1.0.28", - "schema-utils": "^3.1.0", - "selfsigned": "^1.10.11", - "serve-index": "^1.9.1", - "sockjs": "^0.3.21", - "spdy": "^4.0.2", - "strip-ansi": "^7.0.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^5.2.1", - "ws": "^8.1.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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/webpack-dev-server/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/webpack-dev-server/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/webpack-dev-server/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==", - "dev": true - }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.2.tgz", - "integrity": "sha512-cp5qdmHnu5T8wRg2G3vZZHoJPN14aqQ89SyQ11NpGH5zEMDCclt49rzo+MaRazk7/UeILhAI+/sEtcM+7Fr0nw==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-subresource-integrity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.0.0.tgz", - "integrity": "sha512-x9514FpLRydO+UAQ8DY4aLtCjxmdLkuQVcDFN1kGzuusREYJ1B0rzk/iIlWiL6dnvrhEGFj2+UsdxDkP8Z4UKg==", - "dev": true, - "dependencies": { - "typed-assert": "^1.0.8" - }, - "engines": { - "node": ">= 12" - }, - "peerDependencies": { - "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", - "webpack": "^5.12.0" - }, - "peerDependenciesMeta": { - "html-webpack-plugin": { - "optional": true - } - } - }, - "node_modules/webpack/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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/webpack/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/webpack/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==", - "dev": true - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "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" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "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/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, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/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 - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", - "dev": true, - "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/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "17.2.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.2.1.tgz", - "integrity": "sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "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, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zone.js": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.4.tgz", - "integrity": "sha512-DDh2Ab+A/B+9mJyajPjHFPWfYU1H+pdun4wnnk0OcQTNjem1XQSZ2CDW+rfZEUDjv5M19SBqAkjZi0x5wuB5Qw==", - "dependencies": { - "tslib": "^2.0.0" - } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-1.0.1.tgz", - "integrity": "sha512-Ta9bMA3EtUHDaZJXqUoT5cn/EecwOp+SXpKJqxDbDuMbLvEMu6YTyDDuvTWeStODfdmXyfMo7LymQyPkN3BicA==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "1.0.0", - "sourcemap-codec": "1.4.8" - } - }, - "@angular-devkit/architect": { - "version": "0.1300.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1300.3.tgz", - "integrity": "sha512-XY3sjRLk06Q+uAU0BePuIWcK1n3Jr0ksNV0ACNAct+MnI3QFfPPaYA/Tdhp9uWobuZ4lUrL0drc2uppNu0wKmA==", - "dev": true, - "requires": { - "@angular-devkit/core": "13.0.3", - "rxjs": "6.6.7" - }, - "dependencies": { - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@angular-devkit/build-angular": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-13.0.3.tgz", - "integrity": "sha512-5KFsknpnq3mc0KwcIDjvmqB3trz5cMt48dB0nrc23zkFI9v4hkpalc/OEg/H3G93K0c9g6dcyxmHkNfsU1+CHw==", - "dev": true, - "requires": { - "@ampproject/remapping": "1.0.1", - "@angular-devkit/architect": "0.1300.3", - "@angular-devkit/build-webpack": "0.1300.3", - "@angular-devkit/core": "13.0.3", - "@babel/core": "7.15.8", - "@babel/generator": "7.15.8", - "@babel/helper-annotate-as-pure": "7.15.4", - "@babel/plugin-proposal-async-generator-functions": "7.15.8", - "@babel/plugin-transform-async-to-generator": "7.14.5", - "@babel/plugin-transform-runtime": "7.15.8", - "@babel/preset-env": "7.15.8", - "@babel/runtime": "7.15.4", - "@babel/template": "7.15.4", - "@discoveryjs/json-ext": "0.5.5", - "@ngtools/webpack": "13.0.3", - "ansi-colors": "4.1.1", - "babel-loader": "8.2.3", - "babel-plugin-istanbul": "6.1.1", - "browserslist": "^4.9.1", - "cacache": "15.3.0", - "caniuse-lite": "^1.0.30001032", - "circular-dependency-plugin": "5.2.2", - "copy-webpack-plugin": "9.0.1", - "core-js": "3.19.0", - "critters": "0.0.14", - "css-loader": "6.5.0", - "esbuild": "0.13.12", - "esbuild-wasm": "0.13.12", - "glob": "7.2.0", - "https-proxy-agent": "5.0.0", - "inquirer": "8.2.0", - "karma-source-map-support": "1.4.0", - "less": "4.1.2", - "less-loader": "10.2.0", - "license-webpack-plugin": "4.0.0", - "loader-utils": "3.0.0", - "mini-css-extract-plugin": "2.4.3", - "minimatch": "3.0.4", - "open": "8.4.0", - "ora": "5.4.1", - "parse5-html-rewriting-stream": "6.0.1", - "piscina": "3.1.0", - "postcss": "8.3.11", - "postcss-import": "14.0.2", - "postcss-loader": "6.2.0", - "postcss-preset-env": "6.7.0", - "regenerator-runtime": "0.13.9", - "resolve-url-loader": "4.0.0", - "rxjs": "6.6.7", - "sass": "1.43.4", - "sass-loader": "12.3.0", - "semver": "7.3.5", - "source-map-loader": "3.0.0", - "source-map-support": "0.5.20", - "stylus": "0.55.0", - "stylus-loader": "6.2.0", - "terser": "5.9.0", - "text-table": "0.2.0", - "tree-kill": "1.2.2", - "tslib": "2.3.1", - "webpack": "5.64.1", - "webpack-dev-middleware": "5.2.1", - "webpack-dev-server": "4.4.0", - "webpack-merge": "5.8.0", - "webpack-subresource-integrity": "5.0.0" - }, - "dependencies": { - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - } - } - }, - "@angular-devkit/build-webpack": { - "version": "0.1300.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1300.3.tgz", - "integrity": "sha512-3DNo8575FFPMqJaVMXxrIduWkrcKm5zYSCvkMOmzHLp+gx+RXQiwnoXfVJpukcE/jwK/4SWyRE8Tw75sfPJ71A==", - "dev": true, - "requires": { - "@angular-devkit/architect": "0.1300.3", - "rxjs": "6.6.7" - }, - "dependencies": { - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@angular-devkit/core": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.0.3.tgz", - "integrity": "sha512-5yTYW6m4pkDPSYNxThm+47h+UZ6XVEfdfsXR3o+WlRG0hc18EuQ+sXZkzhvZrk5KMLlXFex4eO40RPq2vvWS/w==", - "dev": true, - "requires": { - "ajv": "8.6.3", - "ajv-formats": "2.1.1", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.7", - "source-map": "0.7.3" - }, - "dependencies": { - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@angular-devkit/schematics": { - "version": "13.0.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.0.4.tgz", - "integrity": "sha512-3LsmpfAEOxwPyachrktCHtGUYBzQCCzD0++CUjhK8W99v8/IAplkm4dgovFb1RiRkUm44l+HIS7387AbvEIf5A==", - "dev": true, - "requires": { - "@angular-devkit/core": "13.0.4", - "jsonc-parser": "3.0.0", - "magic-string": "0.25.7", - "ora": "5.4.1", - "rxjs": "6.6.7" - }, - "dependencies": { - "@angular-devkit/core": { - "version": "13.0.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.0.4.tgz", - "integrity": "sha512-AzgLvERLC6qzY5aZWUpkz5nx+pZChrq3DSt6azMPALwzzoABrwiO6XqzRnj17mXtANXLH2oe9FuHr9jzgFbF1g==", - "dev": true, - "requires": { - "ajv": "8.6.3", - "ajv-formats": "2.1.1", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.7", - "source-map": "0.7.3" - } - }, - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@angular/animations": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-13.0.2.tgz", - "integrity": "sha512-ROR70rM6E13pIJzaYf0Su/ALSoBm5fIMjozey636pAq21TxTy5IfhgaBjv/vflC9psbpaySGw2H5XnwejP0gSw==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/cdk": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-13.0.2.tgz", - "integrity": "sha512-m7RHIAXpFpgsrydhWXX1hAXRmQpQ+m9eRCYAoz8QiDCchYyVvTaxkZ8J7XGS8RtJ2EiocXSp4TlwQQrpXe+4lg==", - "requires": { - "parse5": "^5.0.0", - "tslib": "^2.3.0" - }, - "dependencies": { - "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "optional": true - } - } - }, - "@angular/cli": { - "version": "13.0.4", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-13.0.4.tgz", - "integrity": "sha512-0QMJXFNn57LVg7ZwZFPO90g6aZHDnoe5yCB7fo3nskOhDw1AW/rnbbaNVMVX/SvP30hOOTLsfVJ1Y3I6eKDgRA==", - "dev": true, - "requires": { - "@angular-devkit/architect": "0.1300.4", - "@angular-devkit/core": "13.0.4", - "@angular-devkit/schematics": "13.0.4", - "@schematics/angular": "13.0.4", - "@yarnpkg/lockfile": "1.1.0", - "ansi-colors": "4.1.1", - "debug": "4.3.2", - "ini": "2.0.0", - "inquirer": "8.2.0", - "jsonc-parser": "3.0.0", - "npm-package-arg": "8.1.5", - "npm-pick-manifest": "6.1.1", - "open": "8.4.0", - "ora": "5.4.1", - "pacote": "12.0.2", - "resolve": "1.20.0", - "semver": "7.3.5", - "symbol-observable": "4.0.0", - "uuid": "8.3.2" - }, - "dependencies": { - "@angular-devkit/architect": { - "version": "0.1300.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1300.4.tgz", - "integrity": "sha512-COW2W6rI9D69QEXGc/MyTbJY9gT+u8yMTpONpIjopd+KoSK/q2wGr0RleUf7XSCunZCs0SRI7z3Pw1EAdQCP7Q==", - "dev": true, - "requires": { - "@angular-devkit/core": "13.0.4", - "rxjs": "6.6.7" - } - }, - "@angular-devkit/core": { - "version": "13.0.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.0.4.tgz", - "integrity": "sha512-AzgLvERLC6qzY5aZWUpkz5nx+pZChrq3DSt6azMPALwzzoABrwiO6XqzRnj17mXtANXLH2oe9FuHr9jzgFbF1g==", - "dev": true, - "requires": { - "ajv": "8.6.3", - "ajv-formats": "2.1.1", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.7", - "source-map": "0.7.3" - } - }, - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@angular/common": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-13.0.2.tgz", - "integrity": "sha512-UxWzNAU/o9pP02AYB5MrnIlShirfO631NolmvP0jTSEmym1nAeDOwZIYlkgfcJMHFXFc7DBnE2XOGaTZ8if3kw==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/compiler": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-13.0.2.tgz", - "integrity": "sha512-EvIFT8y5VNICrnPgiamv/z9hfQ7KjLCM52g4ssXGCeGPVj58OEfslEc3jO4BCJG7xuLm7dCuSRV0pBlJNTSYFg==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/compiler-cli": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.0.2.tgz", - "integrity": "sha512-KVDntMBoPoAPdpyO3LxR2U3BO3ja5fY5Im5rzynjBCC3dnwAPPKoIlYZlFY/5ov6yVoVleeb/BOovYxHuxZBsA==", - "dev": true, - "requires": { - "@babel/core": "^7.8.6", - "canonical-path": "1.0.0", - "chokidar": "^3.0.0", - "convert-source-map": "^1.5.1", - "dependency-graph": "^0.11.0", - "magic-string": "^0.25.0", - "reflect-metadata": "^0.1.2", - "semver": "^7.0.0", - "sourcemap-codec": "^1.4.8", - "tslib": "^2.3.0", - "yargs": "^17.2.1" - } - }, - "@angular/core": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-13.0.2.tgz", - "integrity": "sha512-6Jbct50lncMqzwLILzfmwQRK8eOEMv0quCL3pQptEpYPSlPqKz6QRxD76BykSUOs7XYJ/KdZmu3uGcT2Q/DUVg==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/forms": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-13.0.2.tgz", - "integrity": "sha512-JGgEOTH/OYr7/RlqJUPSzKQF/a55UM5PD6CgpUjAXKrCV18+zhofO05g+ibIZH3OfONntthcbKEXxMTX2EEQqg==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/material": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-13.0.2.tgz", - "integrity": "sha512-DbbkQFpZ73oxOuR9LkkpeUPWP31DNIG3Z94sOrtdBhX3HfbLLOCaAJAIwMl8+bEuzDgtWBmx3taUR8l4WKCO8g==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/platform-browser": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-13.0.2.tgz", - "integrity": "sha512-fkLGr9Vj2cvFzXefyhNaqwXX90+WbpYj5cCii7S1HcbJ9qSM5ZenLp1t8mGRhmWI7odY4BrFskWOChlWFrLEkA==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/platform-browser-dynamic": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-13.0.2.tgz", - "integrity": "sha512-2wZX2oop3A1kWFcbRYqe8AxBQjT35DXf1qlGyFQoMn7D0vOAprg6X1hUK2XBItRrvwRWh3hSVhzkustTIl+r6g==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/router": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-13.0.2.tgz", - "integrity": "sha512-AfmT845dcYPvNbUdV2ALlf++szZP3ie2d0eu7JyGWe3anV1fbDcg76RhjxFK8yVUxryrCQtEnot1VEEVlhGkyw==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@assemblyscript/loader": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", - "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", - "dev": true - }, - "@babel/code-frame": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", - "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.0" - } - }, - "@babel/compat-data": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", - "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", - "dev": true - }, - "@babel/core": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.8.tgz", - "integrity": "sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.15.8", - "@babel/generator": "^7.15.8", - "@babel/helper-compilation-targets": "^7.15.4", - "@babel/helper-module-transforms": "^7.15.8", - "@babel/helpers": "^7.15.4", - "@babel/parser": "^7.15.8", - "@babel/template": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.6", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz", - "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==", - "dev": true, - "requires": { - "@babel/types": "^7.15.6", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz", - "integrity": "sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA==", - "dev": true, - "requires": { - "@babel/types": "^7.15.4" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.0.tgz", - "integrity": "sha512-9KuleLT0e77wFUku6TUkqZzCEymBdtuQQ27MhEKzf9UOOJu3cYj98kyaDAzxpC7lV6DGiZFuC8XqDsq8/Kl6aQ==", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz", - "integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.16.0", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.17.5", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.0.tgz", - "integrity": "sha512-XLwWvqEaq19zFlF5PTgOod4bUA+XbkR4WLQBct1bkzmxJGB0ZEJaoKF4c8cgH9oBtCDuYJ8BP5NB9uFiEgO5QA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-member-expression-to-functions": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0" - }, - "dependencies": { - "@babel/helper-annotate-as-pure": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", - "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - } - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.0.tgz", - "integrity": "sha512-3DyG0zAFAZKcOp7aVr33ddwkxJ0Z0Jr5V99y3I690eYLpukJsJvAbzTy1ewoCqsML8SbIrjH14Jc/nSQ4TvNPA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "regexpu-core": "^4.7.1" - }, - "dependencies": { - "@babel/helper-annotate-as-pure": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", - "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - } - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.4.tgz", - "integrity": "sha512-OrpPZ97s+aPi6h2n1OXzdhVis1SGSsMU2aMHgLcOKfsp4/v1NWpx3CWT3lBj5eeBq9cDkPkh+YCfdF7O12uNDQ==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz", - "integrity": "sha512-Hk2SLxC9ZbcOhLpg/yMznzJ11W++lg5GMbxt1ev6TXUiJB0N42KPC+7w8a+eWGuqDnUYuwStJoZHM7RgmIOaGQ==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-function-name": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", - "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "dependencies": { - "@babel/template": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", - "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0" - } - } - } - }, - "@babel/helper-get-function-arity": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", - "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", - "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", - "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", - "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-module-transforms": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", - "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.16.0", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-simple-access": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/helper-validator-identifier": "^7.15.7", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "dependencies": { - "@babel/template": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", - "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0" - } - } - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", - "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.4.tgz", - "integrity": "sha512-vGERmmhR+s7eH5Y/cp8PCVzj4XEjerq8jooMfxFdA5xVtAk9Sh4AQsrWgiErUEBjtGrBtOFKDUcWQFW4/dFwMA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-wrap-function": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "dependencies": { - "@babel/helper-annotate-as-pure": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", - "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - } - } - }, - "@babel/helper-replace-supers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", - "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-simple-access": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", - "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", - "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", - "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.0.tgz", - "integrity": "sha512-VVMGzYY3vkWgCJML+qVLvGIam902mJW0FvT7Avj1zEe0Gn7D93aWdLblYARTxEw+6DhZmtzhBM2zv0ekE5zg1g==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "dependencies": { - "@babel/template": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", - "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0" - } - } - } - }, - "@babel/helpers": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.3.tgz", - "integrity": "sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==", - "dev": true, - "requires": { - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.3", - "@babel/types": "^7.16.0" - }, - "dependencies": { - "@babel/template": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", - "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0" - } - } - } - }, - "@babel/highlight": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", - "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.15.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz", - "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==", - "dev": true - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.0.tgz", - "integrity": "sha512-4tcFwwicpWTrpl9qjf7UsoosaArgImF85AxqCRZlgc3IQDvkUHjJpruXAL58Wmj+T6fypWTC/BakfEkwIL/pwA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.0" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.8.tgz", - "integrity": "sha512-2Z5F2R2ibINTc63mY7FLqGfEbmofrHU9FitJW1Q7aPaKFhiPvSq6QEt/BoWN5oME3GVyjcRuNNSRbb9LC0CSWA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.15.4", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz", - "integrity": "sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.0.tgz", - "integrity": "sha512-mAy3sdcY9sKAkf3lQbDiv3olOfiLqI51c9DR9b19uMoR2Z6r5pmGl7dfNFqEvqOyqbf1ta4lknK4gc5PJn3mfA==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.0.tgz", - "integrity": "sha512-QGSA6ExWk95jFQgwz5GQ2Dr95cf7eI7TKutIXXTb7B1gCLTCz5hTjFTQGfLFBBiC5WSNi7udNwWsqbbMh1c4yQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.0.tgz", - "integrity": "sha512-CjI4nxM/D+5wCnhD11MHB1AwRSAYeDT+h8gCdcVJZ/OK7+wRzFsf7PFPWVpVpNRkHMmMkQWAHpTq+15IXQ1diA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.0.tgz", - "integrity": "sha512-kouIPuiv8mSi5JkEhzApg5Gn6hFyKPnlkO0a9YSzqRurH8wYzSlf6RJdzluAsbqecdW5pBvDJDfyDIUR/vLxvg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.0.tgz", - "integrity": "sha512-pbW0fE30sVTYXXm9lpVQQ/Vc+iTeQKiXlaNRZPPN2A2VdlWyAtsUrsQ3xydSlDW00TFMK7a8m3cDTkBF5WnV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.0.tgz", - "integrity": "sha512-3bnHA8CAFm7cG93v8loghDYyQ8r97Qydf63BeYiGgYbjKKB/XP53W15wfRC7dvKfoiJ34f6Rbyyx2btExc8XsQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.0.tgz", - "integrity": "sha512-FAhE2I6mjispy+vwwd6xWPyEx3NYFS13pikDBWUAFGZvq6POGs5eNchw8+1CYoEgBl9n11I3NkzD7ghn25PQ9Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.0.tgz", - "integrity": "sha512-LU/+jp89efe5HuWJLmMmFG0+xbz+I2rSI7iLc1AlaeSMDMOGzWlc5yJrMN1d04osXN4sSfpo4O+azkBNBes0jg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.16.0", - "@babel/helper-compilation-targets": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.16.0" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.0.tgz", - "integrity": "sha512-kicDo0A/5J0nrsCPbn89mTG3Bm4XgYi0CZtvex9Oyw7gGZE3HXGD0zpQNH+mo+tEfbo8wbmMvJftOwpmPy7aVw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.0.tgz", - "integrity": "sha512-Y4rFpkZODfHrVo70Uaj6cC1JJOt3Pp0MdWSwIKtb8z1/lsjl9AmnB7ErRFV+QNGIfcY1Eruc2UMx5KaRnXjMyg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.0.tgz", - "integrity": "sha512-IvHmcTHDFztQGnn6aWq4t12QaBXTKr1whF/dgp9kz84X6GUcwq9utj7z2wFCUfeOup/QKnOlt2k0zxkGFx9ubg==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.0.tgz", - "integrity": "sha512-3jQUr/HBbMVZmi72LpjQwlZ55i1queL8KcDTQEkAHihttJnAPrcvG9ZNXIfsd2ugpizZo595egYV6xy+pv4Ofw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-create-class-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "dependencies": { - "@babel/helper-annotate-as-pure": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", - "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - } - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.0.tgz", - "integrity": "sha512-ti7IdM54NXv29cA4+bNNKEMS4jLMCbJgl+Drv+FgYy0erJLAxNAIXcNjNjrRZEcWq0xJHsNVwQezskMFpF8N9g==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.0.tgz", - "integrity": "sha512-vIFb5250Rbh7roWARvCLvIJ/PtAU5Lhv7BtZ1u24COwpI9Ypjsh+bZcKk6rlIyalK+r0jOc1XQ8I4ovNxNrWrA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", - "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.0.tgz", - "integrity": "sha512-V14As3haUOP4ZWrLJ3VVx5rCnrYhMSHN/jX7z6FAt5hjRkLsb0snPCmJwSOML5oxkKO4FNoNv7V5hw/y2bjuvg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.0.tgz", - "integrity": "sha512-27n3l67/R3UrXfizlvHGuTwsRIFyce3D/6a37GRxn28iyTPvNXaW4XvznexRh1zUNLPjbLL22Id0XQElV94ruw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.0.tgz", - "integrity": "sha512-HUxMvy6GtAdd+GKBNYDWCIA776byUQH8zjnfjxwT1P1ARv/wFu8eBDpmXQcLS/IwRtrxIReGiplOwMeyO7nsDQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "globals": "^11.1.0" - }, - "dependencies": { - "@babel/helper-annotate-as-pure": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", - "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - } - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.0.tgz", - "integrity": "sha512-63l1dRXday6S8V3WFY5mXJwcRAnPYxvFfTlt67bwV1rTyVTM5zrp0DBBb13Kl7+ehkCVwIZPumPpFP/4u70+Tw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.0.tgz", - "integrity": "sha512-Q7tBUwjxLTsHEoqktemHBMtb3NYwyJPTJdM+wDwb0g8PZ3kQUIzNvwD5lPaqW/p54TXBc/MXZu9Jr7tbUEUM8Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.0.tgz", - "integrity": "sha512-FXlDZfQeLILfJlC6I1qyEwcHK5UpRCFkaoVyA1nk9A1L1Yu583YO4un2KsLBsu3IJb4CUbctZks8tD9xPQubLw==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.0.tgz", - "integrity": "sha512-LIe2kcHKAZOJDNxujvmp6z3mfN6V9lJxubU4fJIGoQCkKe3Ec2OcbdlYP+vW++4MpxwG0d1wSDOJtQW5kLnkZQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.0.tgz", - "integrity": "sha512-OwYEvzFI38hXklsrbNivzpO3fh87skzx8Pnqi4LoSYeav0xHlueSoCJrSgTPfnbyzopo5b3YVAJkFIcUpK2wsw==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.0.tgz", - "integrity": "sha512-5QKUw2kO+GVmKr2wMYSATCTTnHyscl6sxFRAY+rvN7h7WB0lcG0o4NoV6ZQU32OZGVsYUsfLGgPQpDFdkfjlJQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.0.tgz", - "integrity": "sha512-lBzMle9jcOXtSOXUpc7tvvTpENu/NuekNJVova5lCCWCV9/U1ho2HH2y0p6mBg8fPm/syEAbfaaemYGOHCY3mg==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.0.tgz", - "integrity": "sha512-gQDlsSF1iv9RU04clgXqRjrPyyoJMTclFt3K1cjLmTKikc0s/6vE3hlDeEVC71wLTRu72Fq7650kABrdTc2wMQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.0.tgz", - "integrity": "sha512-WRpw5HL4Jhnxw8QARzRvwojp9MIE7Tdk3ez6vRyUk1MwgjJN0aNpRoXainLR5SgxmoXx/vsXGZ6OthP6t/RbUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.0.tgz", - "integrity": "sha512-rWFhWbCJ9Wdmzln1NmSCqn7P0RAD+ogXG/bd9Kg5c7PKWkJtkiXmYsMBeXjDlzHpVTJ4I/hnjs45zX4dEv81xw==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.0.tgz", - "integrity": "sha512-Dzi+NWqyEotgzk/sb7kgQPJQf7AJkQBWsVp1N6JWc1lBVo0vkElUnGdr1PzUBmfsCCN5OOFya3RtpeHk15oLKQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-simple-access": "^7.16.0", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.0.tgz", - "integrity": "sha512-yuGBaHS3lF1m/5R+6fjIke64ii5luRUg97N2wr+z1sF0V+sNSXPxXDdEEL/iYLszsN5VKxVB1IPfEqhzVpiqvg==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.16.0", - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-identifier": "^7.15.7", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.0.tgz", - "integrity": "sha512-nx4f6no57himWiHhxDM5pjwhae5vLpTK2zCnDH8+wNLJy0TVER/LJRHl2bkt6w9Aad2sPD5iNNoUpY3X9sTGDg==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.0.tgz", - "integrity": "sha512-LogN88uO+7EhxWc8WZuQ8vxdSyVGxhkh8WTC3tzlT8LccMuQdA81e9SGV6zY7kY2LjDhhDOFdQVxdGwPyBCnvg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.0" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.0.tgz", - "integrity": "sha512-fhjrDEYv2DBsGN/P6rlqakwRwIp7rBGLPbrKxwh7oVt5NNkIhZVOY2GRV+ULLsQri1bDqwDWnU3vhlmx5B2aCw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.0.tgz", - "integrity": "sha512-fds+puedQHn4cPLshoHcR1DTMN0q1V9ou0mUjm8whx9pGcNvDrVVrgw+KJzzCaiTdaYhldtrUps8DWVMgrSEyg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.16.0" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.3.tgz", - "integrity": "sha512-3MaDpJrOXT1MZ/WCmkOFo7EtmVVC8H4EUZVrHvFOsmwkk4lOjQj8rzv8JKUZV4YoQKeoIgk07GO+acPU9IMu/w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.0.tgz", - "integrity": "sha512-XLldD4V8+pOqX2hwfWhgwXzGdnDOThxaNTgqagOcpBgIxbUvpgU2FMvo5E1RyHbk756WYgdbS0T8y0Cj9FKkWQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.0.tgz", - "integrity": "sha512-JAvGxgKuwS2PihiSFaDrp94XOzzTUeDeOQlcKzVAyaPap7BnZXK/lvMDiubkPTdotPKOIZq9xWXWnggUMYiExg==", - "dev": true, - "requires": { - "regenerator-transform": "^0.14.2" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.0.tgz", - "integrity": "sha512-Dgs8NNCehHSvXdhEhln8u/TtJxfVwGYCgP2OOr5Z3Ar+B+zXicEOKNTyc+eca2cuEOMtjW6m9P9ijOt8QdqWkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.15.8.tgz", - "integrity": "sha512-+6zsde91jMzzvkzuEA3k63zCw+tm/GvuuabkpisgbDMTPQsIMHllE3XczJFFtEHLjjhKQFZmGQVRdELetlWpVw==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.15.4", - "@babel/helper-plugin-utils": "^7.14.5", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.5", - "babel-plugin-polyfill-regenerator": "^0.2.2", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.0.tgz", - "integrity": "sha512-iVb1mTcD8fuhSv3k99+5tlXu5N0v8/DPm2mO3WACLG6al1CGZH7v09HJyUb1TtYl/Z+KrM6pHSIJdZxP5A+xow==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.0.tgz", - "integrity": "sha512-Ao4MSYRaLAQczZVp9/7E7QHsCuK92yHRrmVNRe/SlEJjhzivq0BSn8mEraimL8wizHZ3fuaHxKH0iwzI13GyGg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.0.tgz", - "integrity": "sha512-/ntT2NljR9foobKk4E/YyOSwcGUXtYWv5tinMK/3RkypyNBNdhHUaq6Orw5DWq9ZcNlS03BIlEALFeQgeVAo4Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.0.tgz", - "integrity": "sha512-Rd4Ic89hA/f7xUSJQk5PnC+4so50vBoBfxjdQAdvngwidM8jYIBVxBZ/sARxD4e0yMXRbJVDrYf7dyRtIIKT6Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.0.tgz", - "integrity": "sha512-++V2L8Bdf4vcaHi2raILnptTBjGEFxn5315YU+e8+EqXIucA+q349qWngCLpUYqqv233suJ6NOienIVUpS9cqg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.0.tgz", - "integrity": "sha512-VFi4dhgJM7Bpk8lRc5CMaRGlKZ29W9C3geZjt9beuzSUrlJxsNwX7ReLwaL6WEvsOf2EQkyIJEPtF8EXjB/g2A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.0.tgz", - "integrity": "sha512-jHLK4LxhHjvCeZDWyA9c+P9XH1sOxRd1RO9xMtDVRAOND/PczPqizEtVdx4TQF/wyPaewqpT+tgQFYMnN/P94A==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/preset-env": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.15.8.tgz", - "integrity": "sha512-rCC0wH8husJgY4FPbHsiYyiLxSY8oMDJH7Rl6RQMknbN9oDDHhM9RDFvnGM2MgkbUJzSQB4gtuwygY5mCqGSsA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.15.0", - "@babel/helper-compilation-targets": "^7.15.4", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.15.4", - "@babel/plugin-proposal-async-generator-functions": "^7.15.8", - "@babel/plugin-proposal-class-properties": "^7.14.5", - "@babel/plugin-proposal-class-static-block": "^7.15.4", - "@babel/plugin-proposal-dynamic-import": "^7.14.5", - "@babel/plugin-proposal-export-namespace-from": "^7.14.5", - "@babel/plugin-proposal-json-strings": "^7.14.5", - "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", - "@babel/plugin-proposal-numeric-separator": "^7.14.5", - "@babel/plugin-proposal-object-rest-spread": "^7.15.6", - "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", - "@babel/plugin-proposal-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-private-methods": "^7.14.5", - "@babel/plugin-proposal-private-property-in-object": "^7.15.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.14.5", - "@babel/plugin-transform-async-to-generator": "^7.14.5", - "@babel/plugin-transform-block-scoped-functions": "^7.14.5", - "@babel/plugin-transform-block-scoping": "^7.15.3", - "@babel/plugin-transform-classes": "^7.15.4", - "@babel/plugin-transform-computed-properties": "^7.14.5", - "@babel/plugin-transform-destructuring": "^7.14.7", - "@babel/plugin-transform-dotall-regex": "^7.14.5", - "@babel/plugin-transform-duplicate-keys": "^7.14.5", - "@babel/plugin-transform-exponentiation-operator": "^7.14.5", - "@babel/plugin-transform-for-of": "^7.15.4", - "@babel/plugin-transform-function-name": "^7.14.5", - "@babel/plugin-transform-literals": "^7.14.5", - "@babel/plugin-transform-member-expression-literals": "^7.14.5", - "@babel/plugin-transform-modules-amd": "^7.14.5", - "@babel/plugin-transform-modules-commonjs": "^7.15.4", - "@babel/plugin-transform-modules-systemjs": "^7.15.4", - "@babel/plugin-transform-modules-umd": "^7.14.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.9", - "@babel/plugin-transform-new-target": "^7.14.5", - "@babel/plugin-transform-object-super": "^7.14.5", - "@babel/plugin-transform-parameters": "^7.15.4", - "@babel/plugin-transform-property-literals": "^7.14.5", - "@babel/plugin-transform-regenerator": "^7.14.5", - "@babel/plugin-transform-reserved-words": "^7.14.5", - "@babel/plugin-transform-shorthand-properties": "^7.14.5", - "@babel/plugin-transform-spread": "^7.15.8", - "@babel/plugin-transform-sticky-regex": "^7.14.5", - "@babel/plugin-transform-template-literals": "^7.14.5", - "@babel/plugin-transform-typeof-symbol": "^7.14.5", - "@babel/plugin-transform-unicode-escapes": "^7.14.5", - "@babel/plugin-transform-unicode-regex": "^7.14.5", - "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.15.6", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.5", - "babel-plugin-polyfill-regenerator": "^0.2.2", - "core-js-compat": "^3.16.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/runtime": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", - "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", - "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.15.4", - "@babel/types": "^7.15.4" - } - }, - "@babel/traverse": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.3.tgz", - "integrity": "sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-hoist-variables": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/parser": "^7.16.3", - "@babel/types": "^7.16.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "dependencies": { - "@babel/generator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", - "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", - "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.15.7", - "to-fast-properties": "^2.0.0" - } - }, - "@csstools/convert-colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", - "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==", - "dev": true - }, - "@discoveryjs/json-ext": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz", - "integrity": "sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA==", - "dev": true - }, - "@eslint/eslintrc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.1.0.tgz", - "integrity": "sha512-C1DfL7XX4nPqGd6jcP01W9pVM1HYCuUkFk1432D7F0v3JSlUIeOYn9oCoi3eoLZ+iwBSb29BMFxxny0YrrEZqg==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.1", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "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, - "requires": { - "argparse": "^2.0.1" - } - }, - "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==", - "dev": true - }, - "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 - } - } - }, - "@fortawesome/angular-fontawesome": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@fortawesome/angular-fontawesome/-/angular-fontawesome-0.10.2.tgz", - "integrity": "sha512-VxsCAo2lK74KwD236AKAhGpiethfz9yqCViIG2iRAZqgNmuZ6ihwumjbLW32n6hV4fFvCqLcHmpngoEl3TNiOg==", - "requires": { - "tslib": "^2.3.1" - } - }, - "@fortawesome/fontawesome-common-types": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.1.1.tgz", - "integrity": "sha512-wVn5WJPirFTnzN6tR95abCx+ocH+3IFLXAgyavnf9hUmN0CfWoDjPT/BAWsUVwSlYYVBeCLJxaqi7ZGe4uSjBA==" - }, - "@fortawesome/fontawesome-svg-core": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.1.1.tgz", - "integrity": "sha512-NCg0w2YIp81f4V6cMGD9iomfsIj7GWrqmsa0ZsPh59G7PKiGN1KymZNxmF00ssuAlo/VZmpK6xazsGOwzKYUMg==", - "requires": { - "@fortawesome/fontawesome-common-types": "6.1.1" - } - }, - "@fortawesome/free-regular-svg-icons": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.1.1.tgz", - "integrity": "sha512-xXiW7hcpgwmWtndKPOzG+43fPH7ZjxOaoeyooptSztGmJxCAflHZxXNK0GcT0uEsR4jTGQAfGklDZE5NHoBhKg==", - "requires": { - "@fortawesome/fontawesome-common-types": "6.1.1" - } - }, - "@fortawesome/free-solid-svg-icons": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.1.1.tgz", - "integrity": "sha512-0/5exxavOhI/D4Ovm2r3vxNojGZioPwmFrKg0ZUH69Q68uFhFPs6+dhAToh6VEQBntxPRYPuT5Cg1tpNa9JUPg==", - "requires": { - "@fortawesome/fontawesome-common-types": "6.1.1" - } - }, - "@gar/promisify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.2.tgz", - "integrity": "sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==", - "dev": true - }, - "@humanwhocodes/config-array": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz", - "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@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, - "requires": { - "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" - } - }, - "@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 - }, - "@jridgewell/resolve-uri": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-1.0.0.tgz", - "integrity": "sha512-9oLAnygRMi8Q5QkYEU4XWK04B+nuoXoxjRvRxgjuChkLZFBja0YPSgdZ7dZtwhncLBcQe/I/E+fLuk5qxcYVJA==", - "dev": true - }, - "@ngtools/webpack": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.0.3.tgz", - "integrity": "sha512-sVi1Xk8pyy6Y6JODySucYfvuxb5k3IIX/oIWy8QxlFVzpeB2UMqEOevrgvtmiEbQNB1W+aYSTph6oeV+PRX5YA==", - "dev": true, - "requires": {} - }, - "@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, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@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 - }, - "@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, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@npmcli/fs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.0.0.tgz", - "integrity": "sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ==", - "dev": true, - "requires": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, - "@npmcli/git": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz", - "integrity": "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==", - "dev": true, - "requires": { - "@npmcli/promise-spawn": "^1.3.2", - "lru-cache": "^6.0.0", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^6.1.1", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" - }, - "dependencies": { - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "@npmcli/installed-package-contents": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", - "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", - "dev": true, - "requires": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - } - }, - "@npmcli/node-gyp": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz", - "integrity": "sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==", - "dev": true - }, - "@npmcli/promise-spawn": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", - "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", - "dev": true, - "requires": { - "infer-owner": "^1.0.4" - } - }, - "@npmcli/run-script": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-2.0.0.tgz", - "integrity": "sha512-fSan/Pu11xS/TdaTpTB0MRn9guwGU8dye+x56mEVgBEd/QsybBbYcAL0phPXi8SGWFEChkQd6M9qL4y6VOpFig==", - "dev": true, - "requires": { - "@npmcli/node-gyp": "^1.0.2", - "@npmcli/promise-spawn": "^1.3.2", - "node-gyp": "^8.2.0", - "read-package-json-fast": "^2.0.1" - } - }, - "@schematics/angular": { - "version": "13.0.4", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.0.4.tgz", - "integrity": "sha512-P9F5c8ApLbEyfNO4TZNsTyAdrtOjwIhrM/P+eEC4/x6nklWlEFE6TGMYTNjiK/RRhkbX1tBs8gcdJLYxtEqPSg==", - "dev": true, - "requires": { - "@angular-devkit/core": "13.0.4", - "@angular-devkit/schematics": "13.0.4", - "jsonc-parser": "3.0.0" - }, - "dependencies": { - "@angular-devkit/core": { - "version": "13.0.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.0.4.tgz", - "integrity": "sha512-AzgLvERLC6qzY5aZWUpkz5nx+pZChrq3DSt6azMPALwzzoABrwiO6XqzRnj17mXtANXLH2oe9FuHr9jzgFbF1g==", - "dev": true, - "requires": { - "ajv": "8.6.3", - "ajv-formats": "2.1.1", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.7", - "source-map": "0.7.3" - } - }, - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, - "@types/component-emitter": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", - "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==", - "dev": true - }, - "@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", - "dev": true - }, - "@types/cors": { - "version": "2.8.12", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", - "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", - "dev": true - }, - "@types/eslint": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.2.0.tgz", - "integrity": "sha512-74hbvsnc+7TEDa1z5YLSe4/q8hGYB3USNvCuzHUJrjPV6hXaq8IXcngCrHkuvFt0+8rFz7xYXrHgNayIX0UZvQ==", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", - "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", - "dev": true - }, - "@types/http-proxy": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.7.tgz", - "integrity": "sha512-9hdj6iXH64tHSLTY+Vt2eYOGzSogC+JQ2H7bdPWkuh7KXP5qLllWx++t+K9Wk556c3dkDdPws/SpMRi0sdCT1w==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/jasmine": { - "version": "3.10.2", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.10.2.tgz", - "integrity": "sha512-qs4xjVm4V/XjM6owGm/x6TNmhGl5iKX8dkTdsgdgl9oFnqgzxLepnS7rN9Tdo7kDmnFD/VEqKrW57cGD2odbEg==", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", - "dev": true - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true, - "peer": true - }, - "@types/node": { - "version": "12.20.37", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.37.tgz", - "integrity": "sha512-i1KGxqcvJaLQali+WuypQnXwcplhtNtjs66eNsZpp2P2FL/trJJxx/VWsM0YCL2iMoIJrbXje48lvIQAQ4p2ZA==", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "@types/retry": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", - "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", - "dev": true - }, - "@types/scriptjs": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@types/scriptjs/-/scriptjs-0.0.2.tgz", - "integrity": "sha1-CaIociGno0H8a5WwBeS/sqVANTg=", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.12.0.tgz", - "integrity": "sha512-fwCMkDimwHVeIOKeBHiZhRUfJXU8n6xW1FL9diDxAyGAFvKcH4csy0v7twivOQdQdA0KC8TDr7GGRd3L4Lv0rQ==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.12.0", - "@typescript-eslint/type-utils": "5.12.0", - "@typescript-eslint/utils": "5.12.0", - "debug": "^4.3.2", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.2.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - } - } - }, - "@typescript-eslint/parser": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.12.0.tgz", - "integrity": "sha512-MfSwg9JMBojMUoGjUmX+D2stoQj1CBYTCP0qnnVtu9A+YQXVKNtLjasYh+jozOcrb/wau8TCfWOkQTiOAruBog==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.12.0", - "@typescript-eslint/types": "5.12.0", - "@typescript-eslint/typescript-estree": "5.12.0", - "debug": "^4.3.2" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.12.0.tgz", - "integrity": "sha512-GAMobtIJI8FGf1sLlUWNUm2IOkIjvn7laFWyRx7CLrv6nLBI7su+B7lbStqVlK5NdLvHRFiJo2HhiDF7Ki01WQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.12.0", - "@typescript-eslint/visitor-keys": "5.12.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.12.0.tgz", - "integrity": "sha512-9j9rli3zEBV+ae7rlbBOotJcI6zfc6SHFMdKI9M3Nc0sy458LJ79Os+TPWeBBL96J9/e36rdJOfCuyRSgFAA0Q==", - "dev": true, - "requires": { - "@typescript-eslint/utils": "5.12.0", - "debug": "^4.3.2", - "tsutils": "^3.21.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - } - } - }, - "@typescript-eslint/types": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.12.0.tgz", - "integrity": "sha512-JowqbwPf93nvf8fZn5XrPGFBdIK8+yx5UEGs2QFAYFI8IWYfrzz+6zqlurGr2ctShMaJxqwsqmra3WXWjH1nRQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.12.0.tgz", - "integrity": "sha512-Dd9gVeOqt38QHR0BEA8oRaT65WYqPYbIc5tRFQPkfLquVEFPD1HAtbZT98TLBkEcCkvwDYOAvuSvAD9DnQhMfQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.12.0", - "@typescript-eslint/visitor-keys": "5.12.0", - "debug": "^4.3.2", - "globby": "^11.0.4", - "is-glob": "^4.0.3", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - } - } - }, - "@typescript-eslint/utils": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.12.0.tgz", - "integrity": "sha512-k4J2WovnMPGI4PzKgDtQdNrCnmBHpMUFy21qjX2CoPdoBcSBIMvVBr9P2YDP8jOqZOeK3ThOL6VO/sy6jtnvzw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.12.0", - "@typescript-eslint/types": "5.12.0", - "@typescript-eslint/typescript-estree": "5.12.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.12.0.tgz", - "integrity": "sha512-cFwTlgnMV6TgezQynx2c/4/tx9Tufbuo9LPzmWqyRC3QC4qTGkAG1C6pBr0/4I10PAI/FlYunI3vJjIcu+ZHMg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.12.0", - "eslint-visitor-keys": "^3.0.0" - } - }, - "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, - "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true - }, - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "dev": true - }, - "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true, - "requires": {} - }, - "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, - "requires": {} - }, - "adjust-sourcemap-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", - "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "dependencies": { - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "loader-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", - "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - } - } - }, - "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==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "agentkeepalive": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz", - "integrity": "sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - } - }, - "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, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "8.6.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", - "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "requires": { - "ajv": "^8.0.0" - } - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, - "array-includes": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", - "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "array.prototype.flat": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", - "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" - } - }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "autoprefixer": { - "version": "9.8.8", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", - "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", - "dev": true, - "requires": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "picocolors": "^0.2.1", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "babel-loader": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz", - "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==", - "dev": true, - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^1.4.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "dependencies": { - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - } - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.3.tgz", - "integrity": "sha512-NDZ0auNRzmAfE1oDDPW2JhzIMXUk+FFe2ICejmt5T4ocKgiQx3e0VCRx9NCAidcMtL2RUZaWtXnmjTCkx0tcbA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.4", - "semver": "^6.1.1" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz", - "integrity": "sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.2.2", - "core-js-compat": "^3.16.2" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.3.tgz", - "integrity": "sha512-JVE78oRZPKFIeUqFGrSORNzQnrDwZR16oiWeGM8ZyjBn2XAT5OjP+wXx5ESuo33nUsFUEJYjtklnsKbxW5L+7g==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.2.4" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base64-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.1.tgz", - "integrity": "sha512-vFIUq7FdLtjZMhATwDul5RZWv2jpXQ09Pd6jcVEOvIsqCWTRFD/ONHNfyOS8dA/Ippi5dsIgpyKWKZaAKZltbA==", - "dev": true - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "base64id": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", - "dev": true - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true - }, - "big.js": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-6.1.1.tgz", - "integrity": "sha512-1vObw81a8ylZO5ePrtMay0n018TcftpTA5HFKDaSuiUDBo8biRBtjIobw60OpwuvrGk+FsxKamqN4cnmj/eXdg==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "dev": true, - "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "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, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz", - "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001280", - "electron-to-chromium": "^1.3.896", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true - }, - "builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", - "dev": true - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - }, - "cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "dev": true, - "requires": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001283", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001283.tgz", - "integrity": "sha512-9RoKo841j1GQFSJz/nCXOj0sD7tHBtlowjYlrqIUS812x9/emfBLBt6IyMz1zIaYc/eRL8Cs6HPUVi2Hzq4sIg==", - "dev": true - }, - "canonical-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz", - "integrity": "sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.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" - } - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true - }, - "circular-dependency-plugin": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.2.2.tgz", - "integrity": "sha512-g38K9Cm5WRwlaH6g03B9OEz/0qRizI+2I7n+Gz+L5DxXJAPAiWQvwlYNm1V1jkdpUv95bOe/ASm2vfi/G560jQ==", - "dev": true, - "requires": {} - }, - "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 - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", - "dev": true - }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "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==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true - }, - "colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", - "dev": true - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true - }, - "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==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", - "dev": true - }, - "connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dev": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "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==", - "dev": true - }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "copy-anything": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.3.tgz", - "integrity": "sha512-GK6QUtisv4fNS+XcI7shX0Gx9ORg7QqIznyfho79JTnX1XhLiyZHfftvGiziqzRiEi/Bjhgpi+D2o7HxJFPnDQ==", - "dev": true, - "requires": { - "is-what": "^3.12.0" - } - }, - "copy-webpack-plugin": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.0.1.tgz", - "integrity": "sha512-14gHKKdYIxF84jCEgPgYXCPpldbwpxxLbCmA7LReY7gvbaT555DgeBWBgBZM116tv/fO6RRJrsivBqRyRlukhw==", - "dev": true, - "requires": { - "fast-glob": "^3.2.5", - "glob-parent": "^6.0.0", - "globby": "^11.0.3", - "normalize-path": "^3.0.0", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^6.0.0" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "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==", - "dev": true - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "core-js": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.19.0.tgz", - "integrity": "sha512-L1TpFRWXZ76vH1yLM+z6KssLZrP8Z6GxxW4auoCj+XiViOzNPJCAuTIkn03BGdFe6Z5clX5t64wRIRypsZQrUg==", - "dev": true - }, - "core-js-compat": { - "version": "3.19.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.19.1.tgz", - "integrity": "sha512-Q/VJ7jAF/y68+aUsQJ/afPOewdsGkDtcMb40J8MbuWKlK3Y+wtHq8bTHKPj2WKWLIqmS5JhHs4CzHtz6pT2W6g==", - "dev": true, - "requires": { - "browserslist": "^4.17.6", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } - } - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "critters": { - "version": "0.0.14", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.14.tgz", - "integrity": "sha512-YiBoGKfU8/xg+tVMw0KfMBgmr0TWa1JGmRXDzbQRQQaDarGUcZZtZEB25QyYrLasQZAnvqoZhSg2GW0zdsQkYQ==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "css-select": "^4.1.3", - "parse5": "^6.0.1", - "parse5-htmlparser2-tree-adapter": "^6.0.1", - "postcss": "^8.3.7", - "pretty-bytes": "^5.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "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 - }, - "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 - }, - "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, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "dependencies": { - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "css": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", - "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "source-map": "^0.6.1", - "source-map-resolve": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "css-blank-pseudo": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz", - "integrity": "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==", - "dev": true, - "requires": { - "postcss": "^7.0.5" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "css-has-pseudo": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz", - "integrity": "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==", - "dev": true, - "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^5.0.0-rc.4" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "dev": true - }, - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dev": true, - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "css-loader": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.5.0.tgz", - "integrity": "sha512-VmuSdQa3K+wJsl39i7X3qGBM5+ZHmtTnv65fqMGI+fzmHoYmszTVvTqC1XN8JwWDViCB1a8wgNim5SV4fb37xg==", - "dev": true, - "requires": { - "icss-utils": "^5.1.0", - "postcss": "^8.2.15", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.1.0", - "semver": "^7.3.5" - } - }, - "css-prefers-color-scheme": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz", - "integrity": "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==", - "dev": true, - "requires": { - "postcss": "^7.0.5" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "css-select": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", - "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" - } - }, - "css-what": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", - "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", - "dev": true - }, - "cssdb": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz", - "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==", - "dev": true - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true - }, - "custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", - "dev": true - }, - "date-format": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz", - "integrity": "sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w==", - "dev": true - }, - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dev": true, - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - }, - "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 - }, - "default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, - "requires": { - "execa": "^5.0.0" - } - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "requires": { - "clone": "^1.0.2" - } - }, - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "del": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", - "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", - "dev": true, - "requires": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - } - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "dependency-graph": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", - "dev": true - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true - }, - "dns-packet": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", - "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", - "dev": true, - "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "dev": true, - "requires": { - "buffer-indexof": "^1.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", - "dev": true, - "requires": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true - }, - "domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "electron-to-chromium": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.1.tgz", - "integrity": "sha512-9ldvb6QMHiDpUNF1iSwBTiTT0qXEN+xIO5WlCJrC5gt0z74ofOiqR698vaJqYWnri0XZiF0YmnrFmGq/EmpGAA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, - "optional": true, - "requires": { - "iconv-lite": "^0.6.2" - }, - "dependencies": { - "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==", - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "engine.io": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.0.tgz", - "integrity": "sha512-ErhZOVu2xweCjEfYcTdkCnEYUiZgkAcBBAhW4jbIvNG8SLU3orAqoJCiytZjYF7eTpVmmCrLDjLIEaPlUAs1uw==", - "dev": true, - "requires": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.0.0", - "ws": "~8.2.3" - } - }, - "engine.io-parser": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.2.tgz", - "integrity": "sha512-wuiO7qO/OEkPJSFueuATIXtrxF7/6GTbAO9QLv7nnbjwZ5tYhLm9zxvLwxstRs0dcT0KUlWTjtIOs1T86jt12g==", - "dev": true, - "requires": { - "base64-arraybuffer": "~1.0.1" - } - }, - "enhanced-resolve": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", - "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", - "dev": true - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true - }, - "err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "optional": true, - "requires": { - "prr": "~1.0.1" - } - }, - "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, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", - "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - } - }, - "es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "esbuild": { - "version": "0.13.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.12.tgz", - "integrity": "sha512-vTKKUt+yoz61U/BbrnmlG9XIjwpdIxmHB8DlPR0AAW6OdS+nBQBci6LUHU2q9WbBobMEIQxxDpKbkmOGYvxsow==", - "dev": true, - "optional": true, - "requires": { - "esbuild-android-arm64": "0.13.12", - "esbuild-darwin-64": "0.13.12", - "esbuild-darwin-arm64": "0.13.12", - "esbuild-freebsd-64": "0.13.12", - "esbuild-freebsd-arm64": "0.13.12", - "esbuild-linux-32": "0.13.12", - "esbuild-linux-64": "0.13.12", - "esbuild-linux-arm": "0.13.12", - "esbuild-linux-arm64": "0.13.12", - "esbuild-linux-mips64le": "0.13.12", - "esbuild-linux-ppc64le": "0.13.12", - "esbuild-netbsd-64": "0.13.12", - "esbuild-openbsd-64": "0.13.12", - "esbuild-sunos-64": "0.13.12", - "esbuild-windows-32": "0.13.12", - "esbuild-windows-64": "0.13.12", - "esbuild-windows-arm64": "0.13.12" - } - }, - "esbuild-darwin-64": { - "version": "0.13.12", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.12.tgz", - "integrity": "sha512-c51C+N+UHySoV2lgfWSwwmlnLnL0JWj/LzuZt9Ltk9ub1s2Y8cr6SQV5W3mqVH1egUceew6KZ8GyI4nwu+fhsw==", - "dev": true, - "optional": true - }, - "esbuild-wasm": { - "version": "0.13.12", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.13.12.tgz", - "integrity": "sha512-eGdiSewbnJffEvyA0qQmr+w3HurBMVp4QhOfICzeeoL9naC8qC3PFaw6hZaqSgks5DXnQONtUGUFLsX3eXpq8A==", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.9.0.tgz", - "integrity": "sha512-PB09IGwv4F4b0/atrbcMFboF/giawbBLVC7fyDamk5Wtey4Jh2K+rYaBhCAbUyEI4QzB1ly09Uglc9iCtFaG2Q==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.1.0", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "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.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "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 - }, - "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 - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "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 - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "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, - "requires": { - "argparse": "^2.0.1" - } - }, - "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==", - "dev": true - }, - "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, - "requires": { - "has-flag": "^4.0.0" - } - }, - "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 - } - } - }, - "eslint-config-airbnb-base": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", - "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", - "dev": true, - "requires": { - "confusing-browser-globals": "^1.0.10", - "object.assign": "^4.1.2", - "object.entries": "^1.1.5", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "eslint-config-google": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz", - "integrity": "sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==", - "dev": true, - "requires": {} - }, - "eslint-config-prettier": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.4.0.tgz", - "integrity": "sha512-CFotdUcMY18nGRo5KGsnNxpznzhkopOcOo0InID+sgQssPrzjvsyKZPvOgymTFeHrFuC3Tzdf2YndhXtULK9Iw==", - "dev": true, - "requires": {} - }, - "eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "dev": true, - "peer": true, - "requires": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "peer": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-module-utils": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", - "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", - "dev": true, - "peer": true, - "requires": { - "debug": "^3.2.7", - "find-up": "^2.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "peer": true, - "requires": { - "ms": "^2.1.1" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "peer": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "peer": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "peer": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "peer": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true, - "peer": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "peer": true - } - } - }, - "eslint-plugin-import": { - "version": "2.25.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz", - "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==", - "dev": true, - "peer": true, - "requires": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.2", - "has": "^1.0.3", - "is-core-module": "^2.8.0", - "is-glob": "^4.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.5", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.12.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "peer": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "peer": true - } - } - }, - "eslint-plugin-prettier": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", - "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "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, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "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 - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - }, - "espree": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", - "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", - "dev": true, - "requires": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.3.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "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, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "eventemitter-asyncresource": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", - "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", - "dev": true - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "dev": true, - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "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==", - "dev": true - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "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==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "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, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "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, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "dependencies": { - "flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", - "dev": true - } - } - }, - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true - }, - "flatten": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", - "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==", - "dev": true - }, - "follow-redirects": { - "version": "1.14.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz", - "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==", - "dev": true - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "gauge": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.0.tgz", - "integrity": "sha512-F8sU45yQpjQjxKkm1UOAhf0U/O0aFt//Fl7hsrNVto+patMHjs7dPI9mFOGUKbhrgKm0S3EjW3scMFuQmWSROw==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1", - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - } - }, - "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 - }, - "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 - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "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 - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "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 - }, - "globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", - "dev": true - }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "hdr-histogram-js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.1.tgz", - "integrity": "sha512-uPZxl1dAFnjUFHWLZmt93vUUvtHeaBay9nVNHu38SdOjMSF/4KqJUqa1Seuj08ptU1rEb6AHvB41X8n/zFZ74Q==", - "dev": true, - "requires": { - "@assemblyscript/loader": "^0.10.1", - "base64-js": "^1.2.0", - "pako": "^1.0.3" - } - }, - "hdr-histogram-percentiles-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", - "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", - "dev": true - }, - "hosted-git-info": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "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" - } - }, - "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==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "html-entities": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", - "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", - "dev": true - }, - "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 - }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } - } - }, - "http-parser-js": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", - "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", - "dev": true - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "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==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "http-proxy-middleware": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.1.tgz", - "integrity": "sha512-cfaXRVoZxSed/BmkA7SwBVNI9Kj7HFltaE5rqYOub5kWzWZ+gofV2koVN1j2rMW7pEfSSlCHGJ31xmuyFyfLOg==", - "dev": true, - "requires": { - "@types/http-proxy": "^1.17.5", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - } - }, - "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", - "dev": true, - "requires": { - "ms": "^2.0.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "requires": {} - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "ignore": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", - "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", - "dev": true - }, - "ignore-walk": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-4.0.1.tgz", - "integrity": "sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw==", - "dev": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", - "dev": true, - "optional": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "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 - } - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "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 - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true - }, - "inquirer": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.0.tgz", - "integrity": "sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.2.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "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 - }, - "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 - }, - "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, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "internal-ip": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-6.2.0.tgz", - "integrity": "sha512-D8WGsR6yDt8uq7vDMu7mjcR+yRMm3dW8yufyChmszWRjcSHuxLBkR3GdS2HZAjodsaGuCvXeEJpueisXJULghg==", - "dev": true, - "requires": { - "default-gateway": "^6.0.0", - "ipaddr.js": "^1.9.1", - "is-ip": "^3.1.0", - "p-event": "^4.2.0" - }, - "dependencies": { - "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==", - "dev": true - } - } - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "ip-regex": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", - "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", - "dev": true - }, - "ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", - "dev": true - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "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, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true - }, - "is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "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 - }, - "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, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true - }, - "is-ip": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz", - "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==", - "dev": true, - "requires": { - "ip-regex": "^4.0.0" - } - }, - "is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true - }, - "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 - }, - "is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true - }, - "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 - }, - "is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", - "dev": true - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "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 - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-what": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", - "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isbinaryfile": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", - "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", - "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "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, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz", - "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jasmine-core": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.10.1.tgz", - "integrity": "sha512-ooZWSDVAdh79Rrj4/nnfklL3NQVra0BcuhcuWoAwwi+znLDoUeH87AFfeX8s+YeYi6xlv5nveRyaA1v7CintfA==", - "dev": true - }, - "jest-worker": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.3.1.tgz", - "integrity": "sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "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, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "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 - }, - "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, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "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 - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "jsonc-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", - "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true - }, - "karma": { - "version": "6.3.9", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.9.tgz", - "integrity": "sha512-E/MqdLM9uVIhfuyVnrhlGBu4miafBdXEAEqCmwdEMh3n17C7UWC/8Kvm3AYKr91gc7scutekZ0xv6rxRaUCtnw==", - "dev": true, - "requires": { - "body-parser": "^1.19.0", - "braces": "^3.0.2", - "chokidar": "^3.5.1", - "colors": "^1.4.0", - "connect": "^3.7.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.1", - "glob": "^7.1.7", - "graceful-fs": "^4.2.6", - "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.8", - "lodash": "^4.17.21", - "log4js": "^6.3.0", - "mime": "^2.5.2", - "minimatch": "^3.0.4", - "qjobs": "^1.2.0", - "range-parser": "^1.2.1", - "rimraf": "^3.0.2", - "socket.io": "^4.2.0", - "source-map": "^0.6.1", - "tmp": "^0.2.1", - "ua-parser-js": "^0.7.30", - "yargs": "^16.1.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - } - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - } - } - }, - "karma-chrome-launcher": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz", - "integrity": "sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg==", - "dev": true, - "requires": { - "which": "^1.2.1" - } - }, - "karma-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.0.3.tgz", - "integrity": "sha512-atDvLQqvPcLxhED0cmXYdsPMCQuh6Asa9FMZW1bhNqlVEhJoB9qyZ2BY1gu7D/rr5GLGb5QzYO4siQskxaWP/g==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.1", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.0", - "minimatch": "^3.0.4" - }, - "dependencies": { - "istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "requires": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "karma-jasmine": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-4.0.1.tgz", - "integrity": "sha512-h8XDAhTiZjJKzfkoO1laMH+zfNlra+dEQHUAjpn5JV1zCPtOIVWGQjLBrqhnzQa/hrU2XrZwSyBa6XjEBzfXzw==", - "dev": true, - "requires": { - "jasmine-core": "^3.6.0" - } - }, - "karma-jasmine-html-reporter": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.7.0.tgz", - "integrity": "sha512-pzum1TL7j90DTE86eFt48/s12hqwQuiD+e5aXx2Dc9wDEn2LfGq6RoAxEZZjFiN0RDSCOnosEKRZWxbQ+iMpQQ==", - "dev": true, - "requires": {} - }, - "karma-source-map-support": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", - "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", - "dev": true, - "requires": { - "source-map-support": "^0.5.5" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", - "dev": true - }, - "less": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/less/-/less-4.1.2.tgz", - "integrity": "sha512-EoQp/Et7OSOVu0aJknJOtlXZsnr8XE8KwuzTHOLeVSEx8pVWUICc8Q0VYRHgzyjX78nMEyC/oztWFbgyhtNfDA==", - "dev": true, - "requires": { - "copy-anything": "^2.0.1", - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "needle": "^2.5.2", - "parse-node-version": "^1.0.1", - "source-map": "~0.6.0", - "tslib": "^2.3.0" - }, - "dependencies": { - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "optional": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "optional": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "optional": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - } - } - }, - "less-loader": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-10.2.0.tgz", - "integrity": "sha512-AV5KHWvCezW27GT90WATaDnfXBv99llDbtaj4bshq6DvAihMdNjaPDcUMa6EXKLRF+P2opFenJp89BXg91XLYg==", - "dev": true, - "requires": { - "klona": "^2.0.4" - } - }, - "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, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "license-webpack-plugin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.0.tgz", - "integrity": "sha512-b9iMrROrw2fTOJBZ57h0xJfT5/1Cxg4ucYbtpWoukv4Awb2TFPfDDFVHNM8w6SYQpVfB13a5tQJxgGamqwrsyw==", - "dev": true, - "requires": { - "webpack-sources": "^3.0.0" - } - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", - "dev": true - }, - "loader-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.0.0.tgz", - "integrity": "sha512-ry4RE7qen73BFLgihlbyllGIW9SVWLUD5Cq9VWtzrqhntOMOJl8yEjA89d5mCUTT0puCnHo4EecO6bz+BOAS8w==", - "dev": true, - "requires": { - "big.js": "^6.1.1" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true - }, - "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 - }, - "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, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "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 - }, - "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 - }, - "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, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "log4js": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.3.0.tgz", - "integrity": "sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw==", - "dev": true, - "requires": { - "date-format": "^3.0.0", - "debug": "^4.1.1", - "flatted": "^2.0.1", - "rfdc": "^1.1.4", - "streamroller": "^2.2.4" - } - }, - "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==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.4" - } - }, - "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, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "make-fetch-happen": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", - "dev": true, - "requires": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "memfs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.0.tgz", - "integrity": "sha512-o/RfP0J1d03YwsAxyHxAYs2kyJp55AFkMazlFAZFR2I2IXkxiUTXRabJ6RmNNCQ83LAD2jy52Khj0m3OffpNdA==", - "dev": true, - "requires": { - "fs-monkey": "1.0.3" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true - }, - "mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", - "dev": true - }, - "mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "dev": true, - "requires": { - "mime-db": "1.51.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "mini-css-extract-plugin": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.4.3.tgz", - "integrity": "sha512-zekavl9mZuGyk7COjsfFY/f655AX61EKE0AthXPrmDk+oZyjZ9WzO4WPjXnnO9xl8obK2kmM6rAQrBEmk+WK1g==", - "dev": true, - "requires": { - "schema-utils": "^3.1.0" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} - }, - "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==", - "dev": true - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "minipass": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz", - "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", - "dev": true, - "requires": { - "encoding": "^0.1.12", - "minipass": "^3.1.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" - } - }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-json-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", - "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", - "dev": true, - "requires": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "dev": true, - "requires": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - } - }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "nanoid": { - "version": "3.1.30", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", - "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "needle": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", - "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", - "dev": true, - "optional": true, - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "nice-napi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", - "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", - "dev": true, - "optional": true, - "requires": { - "node-addon-api": "^3.0.0", - "node-gyp-build": "^4.2.2" - } - }, - "node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true, - "optional": true - }, - "node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", - "dev": true - }, - "node-gyp": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", - "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", - "dev": true, - "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^9.1.0", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "dependencies": { - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "node-gyp-build": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", - "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", - "dev": true, - "optional": true - }, - "node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", - "dev": true - }, - "nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "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 - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true - }, - "npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", - "dev": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-install-checks": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", - "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", - "dev": true, - "requires": { - "semver": "^7.1.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true - }, - "npm-package-arg": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", - "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", - "validate-npm-package-name": "^3.0.0" - } - }, - "npm-packlist": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-3.0.0.tgz", - "integrity": "sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ==", - "dev": true, - "requires": { - "glob": "^7.1.6", - "ignore-walk": "^4.0.1", - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-pick-manifest": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", - "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", - "dev": true, - "requires": { - "npm-install-checks": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^8.1.2", - "semver": "^7.3.4" - } - }, - "npm-registry-fetch": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", - "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", - "dev": true, - "requires": { - "make-fetch-happen": "^9.0.1", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" - } - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "npmlog": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.0.tgz", - "integrity": "sha512-03ppFRGlsyUaQFbGC2C8QWJN/C/K7PsfyD9aQdhVKAQIH4sQBc8WASqFBP7O+Ut4d2oo5LoeoboB3cGdBZSp6Q==", - "dev": true, - "requires": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.0", - "set-blocking": "^2.0.0" - } - }, - "nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", - "dev": true, - "requires": { - "boolbase": "^1.0.0" - } - }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", - "dev": true - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "object.entries": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", - "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "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.3" - } - }, - "ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "requires": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "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 - }, - "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 - }, - "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, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "p-event": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", - "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", - "dev": true, - "requires": { - "p-timeout": "^3.1.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "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, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - }, - "dependencies": { - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - } - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-retry": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", - "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", - "dev": true, - "requires": { - "@types/retry": "^0.12.0", - "retry": "^0.13.1" - }, - "dependencies": { - "retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true - } - } - }, - "p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, - "requires": { - "p-finally": "^1.0.0" - } - }, - "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 - }, - "pacote": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-12.0.2.tgz", - "integrity": "sha512-Ar3mhjcxhMzk+OVZ8pbnXdb0l8+pimvlsqBGRNkble2NVgyqOGE3yrCGi/lAYq7E7NRDMz89R1Wx5HIMCGgeYg==", - "dev": true, - "requires": { - "@npmcli/git": "^2.1.0", - "@npmcli/installed-package-contents": "^1.0.6", - "@npmcli/promise-spawn": "^1.2.0", - "@npmcli/run-script": "^2.0.0", - "cacache": "^15.0.5", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.3", - "mkdirp": "^1.0.3", - "npm-package-arg": "^8.0.1", - "npm-packlist": "^3.0.0", - "npm-pick-manifest": "^6.0.0", - "npm-registry-fetch": "^11.0.0", - "promise-retry": "^2.0.1", - "read-package-json-fast": "^2.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.1.0" - } - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "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, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "parse5-html-rewriting-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-6.0.1.tgz", - "integrity": "sha512-vwLQzynJVEfUlURxgnf51yAJDQTtVpNyGD8tKi2Za7m+akukNHxCcUQMAa/mUGLhCeicFdpy7Tlvj8ZNKadprg==", - "dev": true, - "requires": { - "parse5": "^6.0.1", - "parse5-sax-parser": "^6.0.1" - } - }, - "parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dev": true, - "requires": { - "parse5": "^6.0.1" - } - }, - "parse5-sax-parser": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz", - "integrity": "sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg==", - "dev": true, - "requires": { - "parse5": "^6.0.1" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "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 - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "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 - }, - "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 - }, - "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=", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "piscina": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.1.0.tgz", - "integrity": "sha512-KTW4sjsCD34MHrUbx9eAAbuUSpVj407hQSgk/6Epkg0pbRBmv4a3UX7Sr8wxm9xYqQLnsN4mFOjqGDzHAdgKQg==", - "dev": true, - "requires": { - "eventemitter-asyncresource": "^1.0.0", - "hdr-histogram-js": "^2.0.1", - "hdr-histogram-percentiles-obj": "^3.0.0", - "nice-napi": "^1.0.2" - } - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "dev": true, - "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - } - } - }, - "postcss": { - "version": "8.3.11", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.11.tgz", - "integrity": "sha512-hCmlUAIlUiav8Xdqw3Io4LcpA1DOt7h3LSTAC4G6JGHFFaWzI6qvFt9oilvl8BmkbBRX1IhM90ZAmpk68zccQA==", - "dev": true, - "requires": { - "nanoid": "^3.1.30", - "picocolors": "^1.0.0", - "source-map-js": "^0.6.2" - } - }, - "postcss-attribute-case-insensitive": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz", - "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^6.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-color-functional-notation": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", - "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-color-gray": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz", - "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==", - "dev": true, - "requires": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.5", - "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-color-hex-alpha": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz", - "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==", - "dev": true, - "requires": { - "postcss": "^7.0.14", - "postcss-values-parser": "^2.0.1" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-color-mod-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz", - "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==", - "dev": true, - "requires": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-color-rebeccapurple": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz", - "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-custom-media": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz", - "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==", - "dev": true, - "requires": { - "postcss": "^7.0.14" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-custom-properties": { - "version": "8.0.11", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz", - "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==", - "dev": true, - "requires": { - "postcss": "^7.0.17", - "postcss-values-parser": "^2.0.1" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-custom-selectors": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz", - "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "dev": true - }, - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dev": true, - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-dir-pseudo-class": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz", - "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "dev": true - }, - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dev": true, - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-double-position-gradients": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz", - "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==", - "dev": true, - "requires": { - "postcss": "^7.0.5", - "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-env-function": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz", - "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-focus-visible": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz", - "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-focus-within": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz", - "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-font-variant": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz", - "integrity": "sha512-I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-gap-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz", - "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-image-set-function": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz", - "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-import": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.2.tgz", - "integrity": "sha512-BJ2pVK4KhUyMcqjuKs9RijV5tatNzNa73e/32aBVE/ejYPe37iH+6vAu9WvqUkB5OAYgLHzbSvzHnorybJCm9g==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - } - }, - "postcss-initial": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.4.tgz", - "integrity": "sha512-3RLn6DIpMsK1l5UUy9jxQvoDeUN4gP939tDcKUHD/kM8SGSKbFAnvkpFpj3Bhtz3HGk1jWY5ZNWX6mPta5M9fg==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-lab-function": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz", - "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==", - "dev": true, - "requires": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.0.tgz", - "integrity": "sha512-H9hv447QjQJVDbHj3OUdciyAXY3v5+UDduzEytAlZCVHCpNAAg/mCSwhYYqZr9BiGYhmYspU8QXxZwiHTLn3yA==", - "dev": true, - "requires": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.4", - "semver": "^7.3.5" - } - }, - "postcss-logical": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz", - "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-media-minmax": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz", - "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "requires": {} - }, - "postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.4" - } - }, - "postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0" - } - }, - "postcss-nesting": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz", - "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-overflow-shorthand": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", - "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-page-break": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz", - "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-place": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz", - "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-preset-env": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz", - "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==", - "dev": true, - "requires": { - "autoprefixer": "^9.6.1", - "browserslist": "^4.6.4", - "caniuse-lite": "^1.0.30000981", - "css-blank-pseudo": "^0.1.4", - "css-has-pseudo": "^0.10.0", - "css-prefers-color-scheme": "^3.1.1", - "cssdb": "^4.4.0", - "postcss": "^7.0.17", - "postcss-attribute-case-insensitive": "^4.0.1", - "postcss-color-functional-notation": "^2.0.1", - "postcss-color-gray": "^5.0.0", - "postcss-color-hex-alpha": "^5.0.3", - "postcss-color-mod-function": "^3.0.3", - "postcss-color-rebeccapurple": "^4.0.1", - "postcss-custom-media": "^7.0.8", - "postcss-custom-properties": "^8.0.11", - "postcss-custom-selectors": "^5.1.2", - "postcss-dir-pseudo-class": "^5.0.0", - "postcss-double-position-gradients": "^1.0.0", - "postcss-env-function": "^2.0.2", - "postcss-focus-visible": "^4.0.0", - "postcss-focus-within": "^3.0.0", - "postcss-font-variant": "^4.0.0", - "postcss-gap-properties": "^2.0.0", - "postcss-image-set-function": "^3.0.1", - "postcss-initial": "^3.0.0", - "postcss-lab-function": "^2.0.1", - "postcss-logical": "^3.0.0", - "postcss-media-minmax": "^4.0.0", - "postcss-nesting": "^7.0.0", - "postcss-overflow-shorthand": "^2.0.0", - "postcss-page-break": "^2.0.0", - "postcss-place": "^4.0.1", - "postcss-pseudo-class-any-link": "^6.0.0", - "postcss-replace-overflow-wrap": "^3.0.0", - "postcss-selector-matches": "^4.0.0", - "postcss-selector-not": "^4.0.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-pseudo-class-any-link": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz", - "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "dev": true - }, - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dev": true, - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-replace-overflow-wrap": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz", - "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-selector-matches": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz", - "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-selector-not": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz", - "integrity": "sha512-YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-selector-parser": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", - "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", - "dev": true - }, - "postcss-values-parser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", - "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", - "dev": true, - "requires": { - "flatten": "^1.0.2", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "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 - }, - "prettier": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", - "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true - }, - "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==", - "dev": true - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, - "promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "requires": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - } - }, - "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==", - "dev": true, - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "dependencies": { - "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==", - "dev": true - } - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true, - "optional": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qjobs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", - "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", - "dev": true - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "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 - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "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==", - "dev": true - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", - "dev": true, - "requires": { - "pify": "^2.3.0" - } - }, - "read-package-json-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", - "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", - "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", - "dev": true - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", - "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", - "dev": true, - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", - "dev": true - }, - "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regex-parser": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", - "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", - "dev": true - }, - "regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "regexpu-core": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", - "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", - "dev": true, - "requires": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^9.0.0", - "regjsgen": "^0.5.2", - "regjsparser": "^0.7.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - } - }, - "regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", - "dev": true - }, - "regjsparser": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", - "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "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 - }, - "resolve-url-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", - "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", - "dev": true, - "requires": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^7.0.35", - "source-map": "0.6.1" - }, - "dependencies": { - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "loader-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", - "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true - }, - "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, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rxjs": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz", - "integrity": "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==", - "requires": { - "tslib": "~2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", - "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" - } - } - }, - "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==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sass": { - "version": "1.43.4", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.43.4.tgz", - "integrity": "sha512-/ptG7KE9lxpGSYiXn7Ar+lKOv37xfWsZRtFYal2QHNigyVQDx685VFT/h7ejVr+R8w7H4tmUgtulsKl5YpveOg==", - "dev": true, - "requires": { - "chokidar": ">=3.0.0 <4.0.0" - } - }, - "sass-loader": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.3.0.tgz", - "integrity": "sha512-6l9qwhdOb7qSrtOu96QQ81LVl8v6Dp9j1w3akOm0aWHyrTYtagDt5+kS32N4yq4hHk3M+rdqoRMH+lIdqvW6HA==", - "dev": true, - "requires": { - "klona": "^2.0.4", - "neo-async": "^2.6.2" - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} - }, - "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==", - "dev": true - } - } - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", - "dev": true - }, - "selfsigned": { - "version": "1.10.11", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", - "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", - "dev": true, - "requires": { - "node-forge": "^0.10.0" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "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=", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - } - } - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } - }, - "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, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "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 - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true - }, - "socket.io": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.0.tgz", - "integrity": "sha512-bnpJxswR9ov0Bw6ilhCvO38/1WPtE3eA2dtxi2Iq4/sFebiDJQzgKNYA7AuVVdGW09nrESXd90NbZqtDd9dzRQ==", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "debug": "~4.3.2", - "engine.io": "~6.1.0", - "socket.io-adapter": "~2.3.3", - "socket.io-parser": "~4.0.4" - } - }, - "socket.io-adapter": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz", - "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==", - "dev": true - }, - "socket.io-parser": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", - "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", - "dev": true, - "requires": { - "@types/component-emitter": "^1.2.10", - "component-emitter": "~1.3.0", - "debug": "~4.3.1" - } - }, - "sockjs": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", - "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", - "dev": true, - "requires": { - "faye-websocket": "^0.11.3", - "uuid": "^3.4.0", - "websocket-driver": "^0.7.4" - }, - "dependencies": { - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - } - } - }, - "socks": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", - "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", - "dev": true, - "requires": { - "ip": "^1.1.5", - "smart-buffer": "^4.1.0" - } - }, - "socks-proxy-agent": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", - "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", - "dev": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.1", - "socks": "^2.6.1" - } - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - }, - "source-map-js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", - "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", - "dev": true - }, - "source-map-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.0.tgz", - "integrity": "sha512-GKGWqWvYr04M7tn8dryIWvb0s8YM41z82iQv01yBtIylgxax0CwvSy6gc2Y02iuXwEfGWRlMicH0nvms9UZphw==", - "dev": true, - "requires": { - "abab": "^2.0.5", - "iconv-lite": "^0.6.2", - "source-map-js": "^0.6.2" - }, - "dependencies": { - "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==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "source-map-resolve": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", - "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0" - } - }, - "source-map-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } - }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - }, - "streamroller": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz", - "integrity": "sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ==", - "dev": true, - "requires": { - "date-format": "^2.1.0", - "debug": "^4.1.1", - "fs-extra": "^8.1.0" - }, - "dependencies": { - "date-format": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", - "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", - "dev": true - } - } - }, - "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==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "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==", - "dev": true - } - } - }, - "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, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "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, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true, - "peer": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "stylus": { - "version": "0.55.0", - "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.55.0.tgz", - "integrity": "sha512-MuzIIVRSbc8XxHH7FjkvWqkIcr1BvoMZoR/oFuAJDlh7VSaNJzrB4uJ38GRQa+mWjLXODAMzeDe0xi9GYbGwnw==", - "dev": true, - "requires": { - "css": "^3.0.0", - "debug": "~3.1.0", - "glob": "^7.1.6", - "mkdirp": "~1.0.4", - "safer-buffer": "^2.1.2", - "sax": "~1.2.4", - "semver": "^6.3.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "stylus-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-6.2.0.tgz", - "integrity": "sha512-5dsDc7qVQGRoc6pvCL20eYgRUxepZ9FpeK28XhdXaIPP6kXr6nI1zAAKFQgP5OBkOfKaURp4WUpJzspg1f01Gg==", - "dev": true, - "requires": { - "fast-glob": "^3.2.7", - "klona": "^2.0.4", - "normalize-path": "^3.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "symbol-observable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", - "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", - "dev": true - }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true - }, - "tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - } - }, - "terser": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz", - "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.20" - } - }, - "terser-webpack-plugin": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.5.tgz", - "integrity": "sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g==", - "dev": true, - "requires": { - "jest-worker": "^27.0.6", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.2" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} - }, - "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==", - "dev": true - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true - }, - "tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true - }, - "tsconfig-paths": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", - "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", - "dev": true, - "peer": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "peer": true, - "requires": { - "minimist": "^1.2.0" - } - } - } - }, - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, - "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, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typed-assert": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.8.tgz", - "integrity": "sha512-5NkbXZUlmCE73Fs7gvkp1XXJWHYetPkg60QnQ2NXQmBYNFxbBr2zA8GCtaH4K2s2WhOmSlgiSTmrjrcm5tnM5g==", - "dev": true - }, - "typescript": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", - "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", - "dev": true - }, - "ua-parser-js": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", - "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", - "dev": true - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "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 - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", - "dev": true, - "requires": { - "builtins": "^1.0.3" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, - "void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", - "dev": true - }, - "watchpack": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.0.tgz", - "integrity": "sha512-MnN0Q1OsvB/GGHETrFeZPQaOelWh/7O+EiFlj8sM9GPjtQkis7k01aAxrg/18kTfoIVcLL+haEVFlXDaSRwKRw==", - "dev": true, - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "webpack": { - "version": "5.64.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.64.1.tgz", - "integrity": "sha512-b4FHmRgaaAjP+aVOVz41a9Qa5SmkUPQ+u8FntTQ1roPHahSComB6rXnLwc976VhUY4CqTaLu5mCswuHiNhOfVw==", - "dev": true, - "requires": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.3", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.2.0", - "webpack-sources": "^3.2.2" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} - }, - "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==", - "dev": true - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "webpack-dev-middleware": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.2.1.tgz", - "integrity": "sha512-Kx1X+36Rn9JaZcQMrJ7qN3PMAuKmEDD9ZISjUj3Cgq4A6PtwYsC4mpaKotSRYH3iOF6HsUa8viHKS59FlyVifQ==", - "dev": true, - "requires": { - "colorette": "^2.0.10", - "memfs": "^3.2.2", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^3.1.0" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} - }, - "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==", - "dev": true - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "webpack-dev-server": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.4.0.tgz", - "integrity": "sha512-+S0XRIbsopVjPFjCO8I07FXYBWYqkFmuP56ucGMTs2hA/gV4q2M9xTmNo5Tg4o8ffRR+Nm3AsXnQXxKRyYovrA==", - "dev": true, - "requires": { - "ansi-html-community": "^0.0.8", - "bonjour": "^3.5.0", - "chokidar": "^3.5.2", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "del": "^6.0.0", - "express": "^4.17.1", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.0", - "internal-ip": "^6.2.0", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "portfinder": "^1.0.28", - "schema-utils": "^3.1.0", - "selfsigned": "^1.10.11", - "serve-index": "^1.9.1", - "sockjs": "^0.3.21", - "spdy": "^4.0.2", - "strip-ansi": "^7.0.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^5.2.1", - "ws": "^8.1.0" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} - }, - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - } - }, - "webpack-sources": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.2.tgz", - "integrity": "sha512-cp5qdmHnu5T8wRg2G3vZZHoJPN14aqQ89SyQ11NpGH5zEMDCclt49rzo+MaRazk7/UeILhAI+/sEtcM+7Fr0nw==", - "dev": true - }, - "webpack-subresource-integrity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.0.0.tgz", - "integrity": "sha512-x9514FpLRydO+UAQ8DY4aLtCjxmdLkuQVcDFN1kGzuusREYJ1B0rzk/iIlWiL6dnvrhEGFj2+UsdxDkP8Z4UKg==", - "dev": true, - "requires": { - "typed-assert": "^1.0.8" - } - }, - "websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "requires": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "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" - } - }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "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 - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", - "dev": true, - "requires": {} - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - }, - "yargs": { - "version": "17.2.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.2.1.tgz", - "integrity": "sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - }, - "zone.js": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.4.tgz", - "integrity": "sha512-DDh2Ab+A/B+9mJyajPjHFPWfYU1H+pdun4wnnk0OcQTNjem1XQSZ2CDW+rfZEUDjv5M19SBqAkjZi0x5wuB5Qw==", - "requires": { - "tslib": "^2.0.0" - } - } - } -} diff --git a/client/package.json b/client/package.json deleted file mode 100644 index 5c10597..0000000 --- a/client/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "client", - "version": "0.0.0", - "scripts": { - "lint": "eslint", - "ng": "ng", - "start": "ng serve --proxy-config src/proxy.conf.json", - "build": "ng build", - "watch": "ng build --watch --configuration development", - "test": "ng test", - "test-no-browser": "ng test --browsers ChromeHeadless --watch=false", - "pre-commit": "npm run test-no-browser" - }, - "private": true, - "dependencies": { - "@angular/animations": "~13.0.0", - "@angular/cdk": "^13.0.2", - "@angular/common": "~13.0.0", - "@angular/compiler": "~13.0.0", - "@angular/core": "~13.0.0", - "@angular/forms": "~13.0.0", - "@angular/material": "^13.0.2", - "@angular/platform-browser": "~13.0.0", - "@angular/platform-browser-dynamic": "~13.0.0", - "@angular/router": "~13.0.0", - "@fortawesome/angular-fontawesome": "^0.10.2", - "@fortawesome/fontawesome-svg-core": "^6.1.0", - "@fortawesome/free-regular-svg-icons": "^6.1.0", - "@fortawesome/free-solid-svg-icons": "^6.1.0", - "rxjs": "~7.4.0", - "tslib": "^2.3.0", - "zone.js": "~0.11.4" - }, - "devDependencies": { - "@angular-devkit/build-angular": "~13.0.3", - "@angular/cli": "^13.0.4", - "@angular/compiler-cli": "~13.0.0", - "@types/jasmine": "~3.10.0", - "@types/node": "^12.11.1", - "@types/scriptjs": "^0.0.2", - "@typescript-eslint/eslint-plugin": "^5.12.0", - "@typescript-eslint/parser": "^5.12.0", - "eslint": "^8.9.0", - "eslint-config-airbnb-base": "^15.0.0", - "eslint-config-google": "^0.14.0", - "eslint-config-prettier": "^8.4.0", - "eslint-plugin-prettier": "^4.0.0", - "jasmine-core": "~3.10.0", - "karma": "~6.3.0", - "karma-chrome-launcher": "~3.1.0", - "karma-coverage": "~2.0.3", - "karma-jasmine": "~4.0.0", - "karma-jasmine-html-reporter": "~1.7.0", - "prettier": "^2.5.1", - "typescript": "~4.4.3" - } -} \ No newline at end of file diff --git a/client/src/app/app-routing.module.ts b/client/src/app/app-routing.module.ts deleted file mode 100644 index a346971..0000000 --- a/client/src/app/app-routing.module.ts +++ /dev/null @@ -1,61 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; -import { AddRuleComponent } from 'src/app/components/add-rule/add-rule.component'; -import { LoginComponent } from 'src/app/components/login/login.component'; - -import { AuthGuard } from './services/auth.guard'; -import { UserSettingsComponent } from './components/user-settings/user-settings.component'; -import { RulesComponent } from './components/rules/rules.component'; -import { RulesStatusComponent } from './components/rules-status/rules.status.component'; - -const routes: Routes = [ - { - path: 'rules/new', - component: AddRuleComponent, - canActivate: [AuthGuard], - }, - { - path: 'rules/list', - component: RulesComponent, - canActivate: [AuthGuard], - }, - { - path: 'rules/status', - component: RulesStatusComponent, - canActivate: [AuthGuard], - }, - { - path: 'login', - component: LoginComponent, - }, - { - path: 'settings', - component: UserSettingsComponent, - canActivate: [AuthGuard], - }, - { - path: '', - redirectTo: '/rules/list', - pathMatch: 'full', - }, -]; - -@NgModule({ - imports: [RouterModule.forRoot(routes)], - exports: [RouterModule], -}) -// eslint-disable-next-line require-jsdoc -export class AppRoutingModule {} diff --git a/client/src/app/app.component.html b/client/src/app/app.component.html deleted file mode 100644 index bd70f3e..0000000 --- a/client/src/app/app.component.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - Home - - - - - - Create Rule - - - - - - All Rules - - - - - - Rules Status - - - - - - Settings - - - - - - Report a bug - - - - - -
    - - -
    -
    - -
    -
    -
    -
    - diff --git a/client/src/app/app.component.scss b/client/src/app/app.component.scss deleted file mode 100644 index a675002..0000000 --- a/client/src/app/app.component.scss +++ /dev/null @@ -1,47 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -mat-sidenav-container { - height: 100%; -} - -mat-sidenav { - width: 200px; -} - -.wrapper { - padding-bottom: 2rem; - height: 100%; - width: 100%; - display: flex; - flex-direction: column; -} - -.main { - margin-top: 64px; - padding-bottom: 2rem; - width: 100%; - display: flex; - flex-direction: column; - align-items: center; - flex: 1; -} - -.content { - padding-top: 1rem; - flex: 1; -} - -.sidenav-label { - margin-left: 1rem; -} diff --git a/client/src/app/app.component.spec.ts b/client/src/app/app.component.spec.ts deleted file mode 100644 index 779ee39..0000000 --- a/client/src/app/app.component.spec.ts +++ /dev/null @@ -1,46 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { TestBed } from '@angular/core/testing'; -import { RouterTestingModule } from '@angular/router/testing'; -import { AppComponent } from './app.component'; - -describe('AppComponent', () => { - beforeEach(async () => { - await TestBed.configureTestingModule({ - imports: [RouterTestingModule], - declarations: [AppComponent], - }).compileComponents(); - }); - - it('should create the app', () => { - const fixture = TestBed.createComponent(AppComponent); - const app = fixture.componentInstance; - expect(app).toBeTruthy(); - }); - - it(`should have as title 'client'`, () => { - const fixture = TestBed.createComponent(AppComponent); - const app = fixture.componentInstance; - expect(app.title).toEqual('client'); - }); - - it('should render title', () => { - const fixture = TestBed.createComponent(AppComponent); - fixture.detectChanges(); - const compiled = fixture.nativeElement as HTMLElement; - expect(compiled.querySelector('.content span')?.textContent).toContain( - 'client app is running!' - ); - }); -}); diff --git a/client/src/app/app.component.ts b/client/src/app/app.component.ts deleted file mode 100644 index e89b905..0000000 --- a/client/src/app/app.component.ts +++ /dev/null @@ -1,64 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { Component, ViewChild } from '@angular/core'; -import { - faBug, - faGear, - faHouse, - faList, - faMessage, - faSquarePlus, -} from '@fortawesome/free-solid-svg-icons'; - -import { store } from 'src/app/store'; -import { AgentsService } from './services/agents.service'; -import { AuthService } from './services/auth.service'; - -@Component({ - selector: 'app-root', - templateUrl: './app.component.html', - styleUrls: ['./app.component.scss'], -}) -// eslint-disable-next-line require-jsdoc -export class AppComponent { - faHouse = faHouse; - faList = faList; - faSquarePlus = faSquarePlus; - faGear = faGear; - faMessage = faMessage; - faBug = faBug; - title = 'IFTTA'; - - @ViewChild('sidenav') sidenav: any; - - /** - * Constructor. - * - * @param {AuthService} authService - * @param {AgentService} agentService - */ - constructor( - public authService: AuthService, - private readonly agentsService: AgentsService - ) { - store.sidenav.subscribe((v) => { - if (authService.isLoggedIn) { - this.sidenav.toggle(); - } - }); - if (authService.isLoggedIn) { - this.agentsService.fetchAgentsMetadata(); - } - } -} diff --git a/client/src/app/app.module.ts b/client/src/app/app.module.ts deleted file mode 100644 index 4188529..0000000 --- a/client/src/app/app.module.ts +++ /dev/null @@ -1,108 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { HttpClientModule } from '@angular/common/http'; -import { NgModule } from '@angular/core'; -import { FormsModule, ReactiveFormsModule } from '@angular/forms'; -import { MatButtonModule } from '@angular/material/button'; -import { MatCardModule } from '@angular/material/card'; -import { MatCheckboxModule } from '@angular/material/checkbox'; -import { MatDialogModule } from '@angular/material/dialog'; -import { MatExpansionModule } from '@angular/material/expansion'; -import { MatIconModule } from '@angular/material/icon'; -import { MatInputModule } from '@angular/material/input'; -import { MatListModule } from '@angular/material/list'; -import { MatMenuModule } from '@angular/material/menu'; -import { MatPaginatorModule } from '@angular/material/paginator'; -import { MatProgressBarModule } from '@angular/material/progress-bar'; -import { MatRadioModule } from '@angular/material/radio'; -import { MatSelectModule } from '@angular/material/select'; -import { MatSidenavModule } from '@angular/material/sidenav'; -import { MatSnackBarModule } from '@angular/material/snack-bar'; -import { MatStepperModule } from '@angular/material/stepper'; -import { MatTableModule } from '@angular/material/table'; -import { MatToolbarModule } from '@angular/material/toolbar'; -import { MatTooltipModule } from '@angular/material/tooltip'; -import { MatTreeModule } from '@angular/material/tree'; -import { BrowserModule } from '@angular/platform-browser'; -import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { AppRoutingModule } from './app-routing.module'; -import { AppComponent } from './app.component'; - -import { FontAwesomeModule } from '@fortawesome/angular-fontawesome'; -import { AddRuleComponent } from './components/add-rule/add-rule.component'; -import { DashComponent } from './components/dash/dash.component'; -import { GoogleAdsSelectorComponent } from './components/googleads-selector/googleads-selector.component'; -import { HeaderComponent } from './components/header/header.component'; -import { LocationAutoComplete } from './components/location-auto-complete/location-auto-complete.component'; -import { LoginComponent } from './components/login/login.component'; -import { MissingSettingsDialogComponent } from './components/missing-settings-dialog/missing-settings-dialog.component'; -import { RulesStatusComponent } from './components/rules-status/rules.status.component'; -import { RulesComponent } from './components/rules/rules.component'; -import { TargetSelectorComponent } from './components/target-selector/target-selector.component'; -import { UserSettingsComponent } from './components/user-settings/user-settings.component'; -import { httpInterceptorProviders } from './interceptors'; -import { IntervalFormatPipe } from './pipes/interval-format/interval-format.pipe'; -import { StringReplacePipe } from './pipes/string-replace/string-replace.pipe'; - -@NgModule({ - declarations: [ - AppComponent, - AddRuleComponent, - RulesComponent, - RulesStatusComponent, - TargetSelectorComponent, - HeaderComponent, - LoginComponent, - LocationAutoComplete, - UserSettingsComponent, - MissingSettingsDialogComponent, - GoogleAdsSelectorComponent, - DashComponent, - StringReplacePipe, - IntervalFormatPipe, - ], - imports: [ - BrowserModule, - AppRoutingModule, - BrowserAnimationsModule, - FormsModule, - ReactiveFormsModule, - MatButtonModule, - MatCheckboxModule, - MatInputModule, - MatSelectModule, - MatTableModule, - MatPaginatorModule, - MatTreeModule, - MatIconModule, - MatProgressBarModule, - MatToolbarModule, - MatMenuModule, - MatExpansionModule, - MatDialogModule, - MatSnackBarModule, - HttpClientModule, - MatStepperModule, - MatSidenavModule, - MatListModule, - MatRadioModule, - MatCardModule, - MatTooltipModule, - FontAwesomeModule, - ], - providers: [httpInterceptorProviders], - bootstrap: [AppComponent], -}) -// eslint-disable-next-line require-jsdoc -export class AppModule {} diff --git a/client/src/app/components/add-rule/add-rule.component.html b/client/src/app/components/add-rule/add-rule.component.html deleted file mode 100644 index 7d09371..0000000 --- a/client/src/app/components/add-rule/add-rule.component.html +++ /dev/null @@ -1,301 +0,0 @@ - - -
    - - -
    - Data source - - -

    Rule name

    - - Rule name - - -
    - -
    -

    Select a data source

    - - Data Source - - - {{ source.name }} - - - -
    - - -
    -

    Parameters

    - - {{ param.name }} - - - - - - -
    - - -
    - -
    - Rule conditions - - -

    Run every

    - - Interval - - - {{ interval | intervalFormat }} - - - -
    - - -
    - -

    Datapoint

    - - Datapoint - - - {{ dataPoint.name }} - - - - - - - Comparator - - {{ c.value }} - - - - - - - Value - - - {{ value }} - - - - - Yes - No - - - - - -
    - -
    - - Target -

    Application to target

    - - - -
    - DV360 - DV360 -
    -
    - -
    - Google Ads - Google Ads -
    -
    -
    - - - - - -
    - - Review & Finish -
    -

    - Rule name {{ currentRuleName }} -

    -

    - Monitor {{ currentRuleSourceAgentDescription.name }} for - - {{ param.name }} : {{ currentRuleSourceParameters[param.key] }} - -

    -

    - Trigger when - - {{ this.currentRuleConditionDataPoint }} - {{ this.currentRuleConditionComparator }} - {{ this.currentRuleConditionCompareValue }} - -

    - -

    - Run every {{ this.currentExecutionInterval }} minutes -

    - -

    Perform these actions:

    -
      -
    • - {{ target.action }} - - - {{ ap.value }}   - -
    • -
    -
    - -
    -
    -
    diff --git a/client/src/app/components/add-rule/add-rule.component.scss b/client/src/app/components/add-rule/add-rule.component.scss deleted file mode 100644 index b081358..0000000 --- a/client/src/app/components/add-rule/add-rule.component.scss +++ /dev/null @@ -1,78 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -.wrapper { - width: 100%; - height: 100%; - display: flex; - flex-direction: column; - align-items: center; -} - -.form-element { - margin-left: 10px; -} - -.rules { - width: 100%; -} - -form { - display: flex; - flex-direction: column; -} - -[hidden] { - display: none !important; -} - -.step-footer { - margin-top: 3em; - text-align: right; -} - -.mat-input-element { - min-height: 2em; -} - -button { - margin-left: 1.5em; -} - -#rule-summary > p > i { - font-weight: 300; - padding: 6px; - color: blue; -} - -.mat-radio-button ~ .mat-radio-button { - margin-left: 25px; - margin-bottom: 15px; -} - -.radio-button-content { - display: flex !important; - align-items: center; -} - -.radio-button-icon { - height: 50px; - width: 50px; - margin-right: 10px; - margin-left: 10px; -} - -.radio-button-label { - font-size: medium; - font-weight: 200; -} diff --git a/client/src/app/components/add-rule/add-rule.component.spec.ts b/client/src/app/components/add-rule/add-rule.component.spec.ts deleted file mode 100644 index 9a4219d..0000000 --- a/client/src/app/components/add-rule/add-rule.component.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { AddRuleComponent } from './add-rule.component'; - -describe('RulesComponent', () => { - let component: AddRuleComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [AddRuleComponent], - }).compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(AddRuleComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/client/src/app/components/add-rule/add-rule.component.ts b/client/src/app/components/add-rule/add-rule.component.ts deleted file mode 100644 index e0510ba..0000000 --- a/client/src/app/components/add-rule/add-rule.component.ts +++ /dev/null @@ -1,300 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { StepperOrientation } from '@angular/cdk/stepper'; -import { Component, OnInit, ViewChild } from '@angular/core'; -import { NgForm } from '@angular/forms'; -import { MatDialog } from '@angular/material/dialog'; -import { Router } from '@angular/router'; -import { MissingSettingsDialogComponent } from 'src/app/components/missing-settings-dialog/missing-settings-dialog.component'; -import { AgentSettingMetadata, ModelSpec } from 'src/app/interfaces/common'; -import { Comparator, Rule, RuleTargetAction } from 'src/app/interfaces/rule'; -import { SourceAgentMetadata } from 'src/app/interfaces/source'; -import { TargetAgentMetadata } from 'src/app/interfaces/target'; -import { AgentsService } from 'src/app/services/agents.service'; -import { RulesService } from 'src/app/services/rules.service'; -import { UserService } from 'src/app/services/user.service'; -import { store } from 'src/app/store'; - -const EMPTY_SOURCE_AGENT_DESCRIPTION: SourceAgentMetadata = { - dataPoints: [], - id: '', - name: '', - parameters: [], - type: 'source', -}; - -@Component({ - selector: 'app-add-rule', - templateUrl: './add-rule.component.html', - styleUrls: ['./add-rule.component.scss'], -}) - -/** - * Add rule component. - */ -export class AddRuleComponent implements OnInit { - isLinear = false; - stepperOrientation: StepperOrientation = 'horizontal'; // vertical - saveEnabled: boolean = false; - lockEquals: boolean = false; - - executionIntervals: number[] = [30, 60, 240, 480, 720, 1440]; - sources: SourceAgentMetadata[] = []; - comparators: any[] = [ - { key: 'gt', value: 'greater than' }, - { key: 'lt', value: 'less than' }, - { key: 'eq', value: 'equals' }, - ]; - targets: TargetAgentMetadata[] = []; - - currentRuleName: string = ''; - currentRuleSourceAgentId: string = ''; - currentRuleSourceAgentDescription = EMPTY_SOURCE_AGENT_DESCRIPTION; - currentExecutionInterval = 30; - currentRuleConditionDataPoint: string = ''; - currentRuleConditionDataType: string; - currentRuleConditionValues?: string[]; - currentRuleConditionComparator: Comparator; - currentRuleConditionCompareValue: string | boolean | number; - currentTargetAgentId: string; - currentRuleTargets: RuleTargetAction[]; - currentRuleSourceParameters: Record = {}; - - @ViewChild('name', { static: true }) nameForm: NgForm; - @ViewChild('source', { static: true }) sourceForm: NgForm; - @ViewChild('condition', { static: true }) conditionForm: NgForm; - @ViewChild('executionInterval', { static: true }) - executionIntervalForm: NgForm; - - /** - * Constructor - * @param {UserService} userService - injected - * @param {Router} router - injected - * @param {MatDialog} dialog - */ - constructor( - private userService: UserService, - private readonly rulesService: RulesService, - private readonly agentsService: AgentsService, - private router: Router, - public dialog: MatDialog - ) { - // Watch save requirements - store.saveRequirements.subscribe((_) => { - this.saveEnabled = Object.values(store.saveRequirements.value).every( - (x) => x - ); - }); - - // Watch targets update - store.targets.subscribe((targets) => { - this.currentRuleTargets = targets; - }); - } - - // eslint-disable-next-line require-jsdoc - ngOnInit(): void { - // Watch name form changes - this.nameForm.form.valueChanges.subscribe((val) => { - const valid = !!this.nameForm.valid; - - store.saveRequirements.next({ - ...store.saveRequirements.value, - ...{ name: valid }, - }); - }); - - // Watch source form changes - this.sourceForm.form.valueChanges.subscribe((val) => { - const valid = !!this.sourceForm.valid; - - store.saveRequirements.next({ - ...store.saveRequirements.value, - ...{ source: valid }, - }); - }); - - // Watch executionInterval form changes - this.executionIntervalForm.form.valueChanges.subscribe((val) => { - const valid = !!this.executionIntervalForm.valid; - - store.saveRequirements.next({ - ...store.saveRequirements.value, - ...{ executionInterval: valid }, - }); - }); - - // Watch condition form changes - this.conditionForm.form.valueChanges.subscribe((val) => { - const valid = !!this.conditionForm.valid; - - store.saveRequirements.next({ - ...store.saveRequirements.value, - ...{ condition: valid }, - }); - }); - - this.agentsService.fetchAgentsMetadata(); - store.agents.subscribe((agentsDescription) => { - this.sources = agentsDescription.source; - this.targets = agentsDescription.target; - }); - } - - /** - * Get source agent by ID. - * - * @param {string} id - * @returns {SourceAgentDescription | undefined} - */ - getSourceAgent(id: string): SourceAgentMetadata | undefined { - return this.sources.find((source) => source.id === id); - } - - /** - * Get target agent by ID. - * - * @param {string} id - * @returns {TargetAgent | undefined} - */ - getTargetAgent(id: string): TargetAgentMetadata | undefined { - return this.targets.find((agent) => agent.id === id); - } - - /** - * Handle source change. - * - * @param {string} sourceAgentId - */ - onSourceChange(sourceAgentId: string) { - const agent = this.getSourceAgent(sourceAgentId); - - if (agent) { - this.currentRuleSourceAgentDescription = agent; - store.sourceSet.next(true); - - this.checkUserSettingsForAgent(agent.settings); - } - } - - /** - * Handle source change. - * - * @param {string} val - */ - onTargetChange(val: string) { - const agent = this.getTargetAgent(val); - - if (agent && agent.settings) { - this.checkUserSettingsForAgent(agent.settings); - } - } - - /** - * Handle dataPoint change. - * - * @param {DataPoint} val - */ - onDataPointChange(val: string) { - const dataPoint = this.currentRuleSourceAgentDescription!.dataPoints.find( - (dataPoint) => dataPoint.key === val - ); - if (dataPoint) { - this.currentRuleConditionDataPoint = val; - this.currentRuleConditionComparator = 'eq'; - this.currentRuleConditionDataType = dataPoint.type; - this.currentRuleConditionValues = undefined; - - if (dataPoint.type === 'boolean') { - this.lockEquals = true; - this.currentRuleConditionCompareValue = true; - } else if (dataPoint.values) { - this.lockEquals = true; - this.currentRuleConditionCompareValue = dataPoint.values[0]; - this.currentRuleConditionValues = dataPoint.values; - } else if (dataPoint.type === 'string') { - this.lockEquals = true; - this.currentRuleConditionCompareValue = ''; - } else { - this.lockEquals = false; - this.currentRuleConditionCompareValue = ''; - } - } - } - - /** - * Resets this form to its initial state - */ - reset() { - this.currentRuleName = ''; - this.currentRuleSourceAgentId = ''; - this.currentRuleSourceAgentDescription = EMPTY_SOURCE_AGENT_DESCRIPTION; - this.currentExecutionInterval = 30; - this.currentRuleConditionDataPoint = ''; - this.currentRuleConditionDataType = ''; - this.currentRuleConditionValues = undefined; - this.currentRuleConditionComparator = 'eq'; - this.currentRuleConditionCompareValue = ''; - this.currentTargetAgentId = ''; - this.currentRuleTargets = []; - this.currentRuleSourceParameters = {}; - - // Reset forms - this.conditionForm.resetForm(); - this.sourceForm.resetForm(); - this.executionIntervalForm.resetForm(); - } - - /** - * Save rule. - */ - saveRule() { - const rule: ModelSpec = { - ownerId: this.userService.loggedInUser.id, - name: this.currentRuleName, - executionInterval: this.currentExecutionInterval, - source: { - agentId: this.currentRuleSourceAgentId, - parameters: this.currentRuleSourceParameters, - }, - condition: { - dataPoint: this.currentRuleConditionDataPoint, - comparator: this.currentRuleConditionComparator, - compareValue: this.currentRuleConditionCompareValue, - }, - targets: this.currentRuleTargets, - }; - this.rulesService.addRule(rule); - - this.reset(); - - this.router.navigate(['/rules/list']); - } - - /** - * Checks missing settings required by an agent. - * @param {AgentSettingMetadata[]} settings? the agent's required settings - */ - private checkUserSettingsForAgent(settings?: AgentSettingMetadata[]) { - const missingSettings = settings?.filter( - (setting) => !this.userService.getSetting(setting.key) - ); - - if (missingSettings && missingSettings.length) { - this.dialog.open(MissingSettingsDialogComponent, { - data: missingSettings, - }); - } - } -} diff --git a/client/src/app/components/dash/dash.component.html b/client/src/app/components/dash/dash.component.html deleted file mode 100644 index b13f6f4..0000000 --- a/client/src/app/components/dash/dash.component.html +++ /dev/null @@ -1,47 +0,0 @@ - - -
    -

    Welcome {{ this.displayName }}

    - - Overview - Total Rules - -

    - {{ this.adsManaged }} Ads managed -

    -

    - {{ this.activeRules }} Active -

    -

    - {{ this.inactiveRules }} Inactive -

    -

    - {{ this.errorRules }} Errors -

    - - - -
    -
    -
    diff --git a/client/src/app/components/dash/dash.component.scss b/client/src/app/components/dash/dash.component.scss deleted file mode 100644 index 802d446..0000000 --- a/client/src/app/components/dash/dash.component.scss +++ /dev/null @@ -1,49 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -// dash css -.rule-stats { - width: 100%; -} - -:host { - .mat-card-subtitle { - padding-top: 20px; - padding-bottom: 20px; - font-size: large; - font-weight: 300; - } - - .rule-count { - font-style: bold; - font-size: x-large; - padding-right: 15px; - } - - .card-child { - width: 50%; - float: left; - padding: 20px; - } - .card-footer { - float: left; - width: 100%; - padding: 20px; - } - p { - font-size: medium; - } - .footer { - text-align: right; - } -} diff --git a/client/src/app/components/dash/dash.component.spec.ts b/client/src/app/components/dash/dash.component.spec.ts deleted file mode 100644 index f84bf66..0000000 --- a/client/src/app/components/dash/dash.component.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { DashComponent } from './dash.component'; - -describe('DashComponent', () => { - let component: DashComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [DashComponent], - }).compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(DashComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/client/src/app/components/dash/dash.component.ts b/client/src/app/components/dash/dash.component.ts deleted file mode 100644 index 2162b6b..0000000 --- a/client/src/app/components/dash/dash.component.ts +++ /dev/null @@ -1,69 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { HttpClient } from '@angular/common/http'; -import { Component, OnInit } from '@angular/core'; -import { Rule } from 'src/app/interfaces/rule'; -import { User } from 'src/app/interfaces/user'; -import { UserService } from 'src/app/services/user.service'; -import { store } from 'src/app/store'; - -@Component({ - selector: 'app-dash', - templateUrl: './dash.component.html', - styleUrls: ['./dash.component.scss'], -}) - -/** - * Dash Component. - */ -export class DashComponent implements OnInit { - displayName: string; - user: User; - rules: Rule[]; - activeRules: number = 0; - inactiveRules: number = 0; - errorRules: number = 0; - adsManaged: number = 420; - - /** - * Constructor. - * @param {UserService} userService - */ - constructor(private userService: UserService, private http: HttpClient) {} - - /** - * Init. - */ - ngOnInit(): void { - this.displayName = this.userService.loggedInUser.displayName!; - store.rules.subscribe((rules) => { - this.rules = rules; - this.calculateStats(this.rules); - }); - } - - /** - * Calculates statics to display on the dashboard. - * - * @param {Rule[]} rules - */ - calculateStats(rules: Rule[]) { - rules.forEach((rule) => { - this.activeRules += 1; - if (!rule.latestStatus?.success) { - this.errorRules += 1; - } - }); - } -} diff --git a/client/src/app/components/googleads-selector/googleads-selector.component.html b/client/src/app/components/googleads-selector/googleads-selector.component.html deleted file mode 100644 index 65c4a46..0000000 --- a/client/src/app/components/googleads-selector/googleads-selector.component.html +++ /dev/null @@ -1,98 +0,0 @@ - -
    -
    - - Account ID - - - - -
    -
    -
    -

    Select Ad Groups

    - - - Refresh adGroups - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Status - - - - - Name{{ ad.name }}Campaign{{ ad.campaignName }}AdGroup Type - {{ ad.type | stringReplace: '_':' ' }} - Id{{ ad.id }}
    - - - - -
    diff --git a/client/src/app/components/googleads-selector/googleads-selector.component.scss b/client/src/app/components/googleads-selector/googleads-selector.component.scss deleted file mode 100644 index 7570c51..0000000 --- a/client/src/app/components/googleads-selector/googleads-selector.component.scss +++ /dev/null @@ -1,56 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -.ads-table > table { - width: 100%; -} - -.selected-rows { - background-color: #6e79b455; -} - -.mat-row .mat-cell { - border-bottom: 1px solid transparent; - border-top: 1px solid transparent; - cursor: pointer; -} - -.mat-header-cell { - font-size: large; - color: #6e79b4; -} - -.mat-row:hover .mat-cell { - border-color: #6e79b4; -} - -.adgroup-enabled { - color: yellowgreen; -} - -.adgroup-paused { - color: dimgrey; -} - -.mat-column-status { - font-size: large; - text-align: center; -} - -.refresh { - cursor: pointer; -} - -.refresh fa-icon { - margin-left: 15px; -} diff --git a/client/src/app/components/googleads-selector/googleads-selector.component.spec.ts b/client/src/app/components/googleads-selector/googleads-selector.component.spec.ts deleted file mode 100644 index fba0539..0000000 --- a/client/src/app/components/googleads-selector/googleads-selector.component.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { GoogleAdsSelectorComponent } from './googleads-selector.component'; - -describe('GoogleAdsSelectorComponent', () => { - let component: GoogleAdsSelectorComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [GoogleAdsSelectorComponent], - }).compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(GoogleAdsSelectorComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/client/src/app/components/googleads-selector/googleads-selector.component.ts b/client/src/app/components/googleads-selector/googleads-selector.component.ts deleted file mode 100644 index 4778098..0000000 --- a/client/src/app/components/googleads-selector/googleads-selector.component.ts +++ /dev/null @@ -1,154 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { HttpClient } from '@angular/common/http'; -import { AfterViewInit, Component, ViewChild } from '@angular/core'; -import { FormBuilder, FormGroup } from '@angular/forms'; -import { MatPaginator } from '@angular/material/paginator'; -import { MatTableDataSource } from '@angular/material/table'; -import { - faCircle, - faCirclePause, - faRefresh, -} from '@fortawesome/free-solid-svg-icons'; -import { map } from 'rxjs/operators'; -import { RuleTargetAction } from 'src/app/interfaces/rule'; -import { store } from 'src/app/store'; -import { environment } from 'src/environments/environment'; - -interface AdGroup { - customerId: string; - campaignId: string; - campaignName: string; - id: string; - name: string; - type: string; - status: string; -} - -const ACCOUNT_ID_IDENITFIER = 'accountId'; - -@Component({ - selector: 'app-googleads-selector', - templateUrl: './googleads-selector.component.html', - styleUrls: ['./googleads-selector.component.scss'], -}) -/** - * Google ad groups selector component - */ -export class GoogleAdsSelectorComponent implements AfterViewInit { - adGroupEnabled = faCircle; - adGroupDisabled = faCirclePause; - faRefresh = faRefresh; - isLoading = false; - account: FormGroup; - accountId: string; - adGroups: AdGroup[] = []; - displayedColumns: string[] = ['status', 'name', 'campaignName', 'type', 'id']; - selectedRows = new Set(); - dataSource = new MatTableDataSource(this.adGroups); - @ViewChild(MatPaginator) paginator!: MatPaginator; - - /** - * Constructor: Http client gets injected. - * - * @param {HttpClient} http Http client - */ - constructor(private http: HttpClient, private formBuilder: FormBuilder) { - const group: { [key: string]: string } = {}; - group[ACCOUNT_ID_IDENITFIER] = ''; - this.account = this.formBuilder.group(group); - } - - // eslint-disable-next-line require-jsdoc - ngAfterViewInit() { - this.dataSource.paginator = this.paginator; - } - - /** - * Fetch Google ads data to display - */ - onSubmit() { - this.accountId = this.account.value[ACCOUNT_ID_IDENITFIER]; - - this.fetchAccountData(); - } - - /** - * Handle select row click event. - * - * @param {AdGroup} r Clicked row - */ - selectRow(r: AdGroup) { - if (this.selectedRows.has(r)) { - this.selectedRows.delete(r); - } else { - this.selectedRows.add(r); - } - const targetAgentActions = this.transformToActions(this.selectedRows); - store.targets.next(targetAgentActions); - - // Update save requirements - const valid = this.selectedRows.size > 0; - store.saveRequirements.next({ - ...store.saveRequirements.value, - ...{ target: valid }, - }); - } - - /** - * Transform user selection into a TargetAgent object. - * - * @param {Set} userSelection - * @returns {TargetAgent} TargetAgent Object - */ - private transformToActions(userSelection: Set): RuleTargetAction[] { - const actions: RuleTargetAction[] = [...userSelection].map((row) => ({ - agentId: 'google-ads', - action: 'ACTIVATE', - parameters: { - customerAccountId: row.customerId, - adGroupId: row.id, - }, - })); - return actions; - } - - /** - * Refresh ad groups. - */ - refreshAdGroups() { - this.isLoading = true; - this.fetchAccountData(); - } - - /** - * Fetch Google Ads account data. - */ - private fetchAccountData() { - this.isLoading = true; - this.http - .get(`${environment.apiUrl}/agents/google-ads/list/adgroup`, { - params: { - customerAccountId: this.accountId, - }, - }) - .pipe(map((res: AdGroup[]) => res)) - .subscribe((adGroups) => { - this.adGroups = adGroups; - this.dataSource.data = this.adGroups; - this.dataSource.paginator = this.paginator; - this.isLoading = false; - }); - } -} diff --git a/client/src/app/components/header/header.component.html b/client/src/app/components/header/header.component.html deleted file mode 100644 index 2352087..0000000 --- a/client/src/app/components/header/header.component.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - If This Then Ad - - - - - - - - - - - - -
    -
    -
    - -
    -
    -
    diff --git a/client/src/app/components/header/header.component.scss b/client/src/app/components/header/header.component.scss deleted file mode 100644 index 86ecece..0000000 --- a/client/src/app/components/header/header.component.scss +++ /dev/null @@ -1,82 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -.header { - position: fixed; - z-index: 1000; -} - -.spacer { - flex: 1 1 auto; -} - -.avatar-wrapper { - display: flex; - justify-content: center; - align-items: center; -} - -.avatar { - height: 25px; - width: 25px; - border-radius: 50%; - background-size: 100%; - background-size: cover; -} - -.avatar-big { - height: 75px; - width: 75px; -} - -.avatar-wrapper-padding { - padding: 10px 10px; -} - -.centered-content { - justify-content: center; - align-items: center; - width: 100%; - display: flex; -} - -.user-info { - margin: 15px; -} - -.email { - font-size: 14px; -} - -.name { - font-size: 16px; -} - -.logout, -.settings { - padding-top: 15px; -} - -.menu-links { - display: none; -} - -fa-icon { - margin-right: 5px; -} - -@media only screen and (min-width: 768px) { - .menu-links { - display: block; - } -} diff --git a/client/src/app/components/header/header.component.spec.ts b/client/src/app/components/header/header.component.spec.ts deleted file mode 100644 index 367a569..0000000 --- a/client/src/app/components/header/header.component.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { HeaderComponent } from './header.component'; - -describe('HeaderComponent', () => { - let component: HeaderComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [HeaderComponent], - }).compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(HeaderComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/client/src/app/components/header/header.component.ts b/client/src/app/components/header/header.component.ts deleted file mode 100644 index 5352d9c..0000000 --- a/client/src/app/components/header/header.component.ts +++ /dev/null @@ -1,60 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { Component, OnInit } from '@angular/core'; -import { faGear } from '@fortawesome/free-solid-svg-icons'; -import { User } from 'src/app/interfaces/user'; - -import { AuthService } from 'src/app/services/auth.service'; -import { UserService } from 'src/app/services/user.service'; -import { store } from 'src/app/store'; - -@Component({ - selector: 'app-header', - templateUrl: './header.component.html', - styleUrls: ['./header.component.scss'], -}) - -/** - * Header component. - */ -export class HeaderComponent implements OnInit { - user?: User; - faGear = faGear; - - /** - * Constructor. - * - * @param {AuthService} authService - * @param {UserService} userService - */ - constructor( - public authService: AuthService, - public userService: UserService - ) {} - - // eslint-disable-next-line require-jsdoc - ngOnInit(): void { - // Get user's profile picture - this.userService.userWatch.subscribe((user?: User) => { - this.user = user; - }); - } - - /** - * Toggle sidenav. - */ - toggleSidenav() { - store.sidenav.next(true); - } -} diff --git a/client/src/app/components/location-auto-complete/config.ts b/client/src/app/components/location-auto-complete/config.ts deleted file mode 100644 index 60a8bec..0000000 --- a/client/src/app/components/location-auto-complete/config.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -export const config = { - apiUrl: 'https://maps.googleapis.com/maps/api/js?libraries=places&key=', -}; diff --git a/client/src/app/components/location-auto-complete/location-auto-complete.component.html b/client/src/app/components/location-auto-complete/location-auto-complete.component.html deleted file mode 100644 index 008aec4..0000000 --- a/client/src/app/components/location-auto-complete/location-auto-complete.component.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - diff --git a/client/src/app/components/location-auto-complete/location-auto-complete.component.scss b/client/src/app/components/location-auto-complete/location-auto-complete.component.scss deleted file mode 100644 index cf15541..0000000 --- a/client/src/app/components/location-auto-complete/location-auto-complete.component.scss +++ /dev/null @@ -1,21 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -span { - opacity: 0; - transition: opacity 200ms; -} - -:host.floating span { - opacity: 1; -} diff --git a/client/src/app/components/location-auto-complete/location-auto-complete.component.spec.ts b/client/src/app/components/location-auto-complete/location-auto-complete.component.spec.ts deleted file mode 100644 index 115aef3..0000000 --- a/client/src/app/components/location-auto-complete/location-auto-complete.component.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { LocationAutoComplete } from './location-auto-complete.component'; - -describe('InputGeoComponent', () => { - let component: LocationAutoComplete; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [LocationAutoComplete], - }).compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(LocationAutoComplete); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/client/src/app/components/location-auto-complete/location-auto-complete.component.ts b/client/src/app/components/location-auto-complete/location-auto-complete.component.ts deleted file mode 100644 index 2f730fa..0000000 --- a/client/src/app/components/location-auto-complete/location-auto-complete.component.ts +++ /dev/null @@ -1,353 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { - Component, - Input, - Output, - EventEmitter, - HostBinding, - Optional, - Self, - ViewChild, - ElementRef, - Inject, -} from '@angular/core'; -import { FormGroup, NgControl, FormBuilder } from '@angular/forms'; -import { MatFormFieldControl } from '@angular/material/form-field'; -import { Subject } from 'rxjs'; -import { coerceBooleanProperty } from '@angular/cdk/coercion'; -import { HttpClient } from '@angular/common/http'; -import { DOCUMENT } from '@angular/common'; - -import { config } from './config'; -import { UserService } from 'src/app/services/user.service'; -declare const google: any; - -@Component({ - selector: 'app-location-auto-complete', - templateUrl: './location-auto-complete.component.html', - styleUrls: ['./location-auto-complete.component.scss'], - providers: [ - { provide: MatFormFieldControl, useExisting: LocationAutoComplete }, - ], -}) - -/** - * Location auto completion component. - */ -export class LocationAutoComplete implements MatFormFieldControl { - @Input() dataPoint: string | undefined; - @Input() value: string; - @ViewChild('geoInput') geoInput: ElementRef; - - targetLocationValue: string | number | undefined = ''; - @Output() targetLocationChange = new EventEmitter(); - - geoForm: FormGroup; - static scriptIsLoaded = false; - - // START: Implementing the MatFormFieldControl interface - private _disabled = false; - private _placeholder: string; - private _required = false; - focused = false; - touched = false; - - controlType = 'location-auto-complete'; - static nextId = 0; - @HostBinding() id = `${this.controlType}-${LocationAutoComplete.nextId++}`; - stateChanges = new Subject(); - - /** - * Constructor. - * - * @param {FormBuilder} fb - * @param {NgControl} ngControl - * @param {HttpClient} http - * @param {UserService} userService - * @param {Document} document - */ - constructor( - fb: FormBuilder, - @Optional() @Self() public ngControl: NgControl, - private http: HttpClient, - private userService: UserService, - @Inject(DOCUMENT) private document: Document - ) { - this.geoForm = fb.group({ - targetLocation: '', - }); - } - - /** - * Get placeholder. - * - * @returns {string} - */ - @Input() - get placeholder() { - return this._placeholder; - } - - /** - * Set placeholder. - * - * @param {string} plh - */ - set placeholder(plh: string) { - this._placeholder = plh; - this.stateChanges.next(); - } - - /** - * Focus in handler. - * - * @param {FocusEvent} event - */ - onFocusIn(event: FocusEvent) { - if (!this.focused) { - this.focused = true; - this.stateChanges.next(); - } - } - - /** - * Focus out handler. - * - * @param {FocusEvent} event - */ - onFocusOut(event: FocusEvent) { - this.touched = true; - this.focused = false; - this.stateChanges.next(); - } - - /** - * Check for empty geo input. - * - * @returns {boolean} - */ - get empty() { - return !this.geoInput?.nativeElement.value; - } - - /** - * Check for floating label. - * - * @returns {boolean} - */ - @HostBinding('class.floating') - get shouldLabelFloat() { - return this.focused || !this.empty; - } - - /** - * Get required. - * - * @returns {string} - */ - @Input() - get required() { - return this._required; - } - - /** - * Set required. - * - * @param {boolean} req - */ - set required(req) { - this._required = coerceBooleanProperty(req); - this.stateChanges.next(); - } - - /** - * Get disabled. - * - * @returns {boolean} - */ - @Input() - get disabled(): boolean { - return this._disabled; - } - - /** - * Set disabled. - * - * @param {boolean} value - */ - set disabled(value: boolean) { - this._disabled = coerceBooleanProperty(value); - this.stateChanges.next(); - } - - /** - * Get error state - */ - get errorState(): boolean { - return !this.geoInput?.nativeElement.value && this.touched; - } - - /** - * Set described by IDs. - */ - setDescribedByIds() {} - - /** - * Container click handler. - */ - onContainerClick() {} - // END: Implementing the MatFormFieldControl interface - - /** - * Get target location. - * - * @returns {string|number|undefined} - */ - @Input() - get targetLocation() { - return this.targetLocationValue; - } - - /** - * Set target location value. - * - * @param {string|number|undefined} value - */ - set targetLocation(value: string | number | undefined) { - this.targetLocationValue = value; - this.targetLocationChange.emit(this.targetLocationValue as string); - this.stateChanges.next(); - } - - /** - * After view init. - */ - ngAfterViewInit(): void { - this.initGeoSearch(); - } - - /** - * Init geo search. - */ - private async initGeoSearch() { - const apiKey = this.userService.getSetting('GOOGLEMAPS_API_KEY'); - if (apiKey) { - const url = config.apiUrl + apiKey; - this.getScriptOnce(url, () => { - this.setGeoListener(); - }); - } - } - - /** - * Load script. - * - * @param {string} url - * @param {Function} callback - */ - private getScriptOnce(url: string, callback: Function) { - if (LocationAutoComplete.scriptIsLoaded) { - callback(); - } else { - const script = this.document.createElement('script'); - script.innerHTML = ''; - script.src = url; - script.async = true; - script.defer = true; - script.onload = () => { - callback(); - }; - this.document.head.appendChild(script); - - LocationAutoComplete.scriptIsLoaded = true; - } - } - - /** - * Set geo listener. - */ - private setGeoListener() { - const currentInput = this.geoInput.nativeElement; - const autocomplete = new google.maps.places.Autocomplete(currentInput); - - autocomplete.setFields(['address_components', 'name']); - - autocomplete.addListener('place_changed', () => { - const place = autocomplete.getPlace(); - const currentAddress = this.getFormattedAddress(place); - - currentInput.value = currentAddress; - this.targetLocation = currentAddress; - }); - } - - /** - * Get formatted address - * @param {any} place - * @returns {string} - */ - private getFormattedAddress(place: any): string { - let locality = ''; - let country = ''; - for (const component of place.address_components) { - switch (component.types[0]) { - case 'locality': - locality = component.long_name; - break; - - case 'country': - country = component.long_name; - break; - } - } - - return (locality ? `${locality}, ` : '') + country; - } - - /** - * Check if iterable. - * - * @param {any} a - * @returns {boolean} - */ - private isIterable(a: any) { - return a != null && Symbol.iterator in Object(a); - } - - /** - * Get API key from user settings. - * - * @param {string} name - * @returns {any} - */ - private getApiKey(name: string) { - const settings = (this.userService as any)?.currentUser.settings; - if (this.isIterable(settings)) { - // eslint-disable-next-line guard-for-in - for (const s in settings) { - const param = settings[s]?.params; - if (this.isIterable(param)) { - for (const p in param) { - if ('key' in (param[p] as Object) && name == param[p].key) { - return param[p].value; - } - } - } - } - } - - return ''; - } -} diff --git a/client/src/app/components/login/login.component.html b/client/src/app/components/login/login.component.html deleted file mode 100644 index f876345..0000000 --- a/client/src/app/components/login/login.component.html +++ /dev/null @@ -1,21 +0,0 @@ - - -
    - - - - -
    diff --git a/client/src/app/components/login/login.component.scss b/client/src/app/components/login/login.component.scss deleted file mode 100644 index 4470065..0000000 --- a/client/src/app/components/login/login.component.scss +++ /dev/null @@ -1,46 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -.wrapper { - height: 100%; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; -} - -.brand { - margin-top: 2.5rem; - margin-bottom: 1.5rem; - font-size: 2rem; - font-family: Verdana, Geneva, Tahoma, sans-serif; - letter-spacing: 5px; -} - -.login { - width: 191px; - height: 46px; - background: url('/assets/img/btn_google_signin_dark_normal_web.png'); - background-size: 100%; - background-repeat: no-repeat; - border: none; - cursor: pointer; - - &:active { - background: url('/assets/img/btn_google_signin_dark_pressed_web.png'); - } - - &:disabled { - background: url('/assets/img/btn_google_signin_dark_disabled_web.png'); - } -} diff --git a/client/src/app/components/login/login.component.spec.ts b/client/src/app/components/login/login.component.spec.ts deleted file mode 100644 index 63a1643..0000000 --- a/client/src/app/components/login/login.component.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { LoginComponent } from './login.component'; - -describe('LoginComponent', () => { - let component: LoginComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [LoginComponent], - }).compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(LoginComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/client/src/app/components/login/login.component.ts b/client/src/app/components/login/login.component.ts deleted file mode 100644 index b391473..0000000 --- a/client/src/app/components/login/login.component.ts +++ /dev/null @@ -1,63 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { Component, OnInit } from '@angular/core'; -import { ActivatedRoute, Router } from '@angular/router'; -import { User } from 'src/app/interfaces/user'; - -import { AuthService } from 'src/app/services/auth.service'; -import { UserService } from 'src/app/services/user.service'; - -@Component({ - selector: 'app-login', - templateUrl: './login.component.html', - styleUrls: ['./login.component.scss'], -}) - -/** - * Login component. - */ -export class LoginComponent implements OnInit { - bannerImage = 'assets/img/iftta-banner.png'; - - /** - * Constructor. - * - * @param {Router} router - * @param {ActivatedRoute} route - * @param {AuthService} authService - * @param {UserService} userService - */ - constructor( - private router: Router, - private route: ActivatedRoute, - public authService: AuthService, - private userService: UserService - ) {} - - /** - * Handle login if user is in query params. - */ - ngOnInit() { - const userString = this.route.snapshot.queryParamMap.get('user'); - - if (userString) { - const user = JSON.parse(userString) as User; - this.userService.updateUser(user); - - // Redirect user to where they came from - const returnTo = this.route.snapshot.queryParamMap.get('returnTo') || ''; - this.router.navigate([returnTo]); - } - } -} diff --git a/client/src/app/components/missing-settings-dialog/missing-settings-dialog.component.html b/client/src/app/components/missing-settings-dialog/missing-settings-dialog.component.html deleted file mode 100644 index 9f96285..0000000 --- a/client/src/app/components/missing-settings-dialog/missing-settings-dialog.component.html +++ /dev/null @@ -1,36 +0,0 @@ - - -

    WARNING: Missing User Settings

    - - You are missing the following settings for this rule type: -
      -
    • - {{ setting.key }} ({{ setting.name }}) -
    • -
    - Note: You can add the missing settings later, but your rules won't - work. -
    - - - - diff --git a/client/src/app/components/missing-settings-dialog/missing-settings-dialog.component.scss b/client/src/app/components/missing-settings-dialog/missing-settings-dialog.component.scss deleted file mode 100644 index 7864e0e..0000000 --- a/client/src/app/components/missing-settings-dialog/missing-settings-dialog.component.scss +++ /dev/null @@ -1,13 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - diff --git a/client/src/app/components/missing-settings-dialog/missing-settings-dialog.component.spec.ts b/client/src/app/components/missing-settings-dialog/missing-settings-dialog.component.spec.ts deleted file mode 100644 index e11a0db..0000000 --- a/client/src/app/components/missing-settings-dialog/missing-settings-dialog.component.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { MissingSettingsDialogComponent } from './missing-settings-dialog.component'; - -describe('MissingSettingsDialogComponent', () => { - let component: MissingSettingsDialogComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [MissingSettingsDialogComponent], - }).compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(MissingSettingsDialogComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/client/src/app/components/missing-settings-dialog/missing-settings-dialog.component.ts b/client/src/app/components/missing-settings-dialog/missing-settings-dialog.component.ts deleted file mode 100644 index 0e05fd8..0000000 --- a/client/src/app/components/missing-settings-dialog/missing-settings-dialog.component.ts +++ /dev/null @@ -1,47 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { Component, Inject } from '@angular/core'; -import { MAT_DIALOG_DATA } from '@angular/material/dialog'; -import { Router } from '@angular/router'; -import { AgentSettingMetadata } from '../../interfaces/common'; - -@Component({ - selector: 'missing-settings-dialog', - templateUrl: './missing-settings-dialog.component.html', - styleUrls: ['./missing-settings-dialog.component.scss'], -}) - -/** - * User Settings Dialog Component. - */ -export class MissingSettingsDialogComponent { - /** - * Component constructor. - * - * @param {AgentSettingMetadata[]} settings - * @param {Router} router - */ - constructor( - @Inject(MAT_DIALOG_DATA) public settings: AgentSettingMetadata[], - private router: Router - ) {} - - /** - * Navigate to user settings. - */ - goToUserSettings() { - const fragment = this.settings.map((s) => s.name).join(','); - this.router.navigate(['/settings'], { fragment }); - } -} diff --git a/client/src/app/components/rules-status/rules.status.component.html b/client/src/app/components/rules-status/rules.status.component.html deleted file mode 100644 index a069a05..0000000 --- a/client/src/app/components/rules-status/rules.status.component.html +++ /dev/null @@ -1,79 +0,0 @@ - -
    -

    Execution Status

    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Status - - - - Rule name{{ rule.name }}Source{{ rule.source }}Last exec. - {{ - rule.status ? (rule.lastExecution | date: 'medium') : 'Not executed' - }} - Message{{ rule.message }}
    - - - - -
    diff --git a/client/src/app/components/rules-status/rules.status.component.scss b/client/src/app/components/rules-status/rules.status.component.scss deleted file mode 100644 index afcaed7..0000000 --- a/client/src/app/components/rules-status/rules.status.component.scss +++ /dev/null @@ -1,65 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -.wrapper { - margin-top: 2rem; - width: 100%; - display: flex; - flex-direction: column; - align-items: center; -} - -.table { - width: 100%; -} - -.paginator { - width: 100%; -} - -th.mat-header-cell { - text-align: left; - padding: 15px; - font-size: medium; -} - -td { - margin: 20px; -} - -.mat-column-status { - width: 7%; -} - -.mat-column-message { - word-wrap: break-word; - min-width: 40%; -} - -.fa-lg { - font-size: 1.5em; - line-height: 0.05em; - vertical-align: -0.075em; -} - -.error-icon { - color: red !important; -} - -.success-icon { - color: #3a9e07 !important; -} - -.unknown-status-icon { - color: #cccccc !important; -} diff --git a/client/src/app/components/rules-status/rules.status.component.spec.ts b/client/src/app/components/rules-status/rules.status.component.spec.ts deleted file mode 100644 index 0e86c0b..0000000 --- a/client/src/app/components/rules-status/rules.status.component.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { RulesStatusComponent } from './rules.status.component'; - -describe('RulesComponent', () => { - let component: RulesStatusComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [RulesStatusComponent], - }).compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(RulesStatusComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/client/src/app/components/rules-status/rules.status.component.ts b/client/src/app/components/rules-status/rules.status.component.ts deleted file mode 100644 index 9e2286c..0000000 --- a/client/src/app/components/rules-status/rules.status.component.ts +++ /dev/null @@ -1,111 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { HttpClient } from '@angular/common/http'; -import { AfterViewInit, Component, OnInit, ViewChild } from '@angular/core'; -import { MatPaginator } from '@angular/material/paginator'; -import { MatTableDataSource } from '@angular/material/table'; -import { - faCircleCheck, - faQuestion, - faTriangleExclamation, -} from '@fortawesome/free-solid-svg-icons'; -import { AgentsMetadata } from 'src/app/interfaces/api'; -import { Rule } from 'src/app/interfaces/rule'; -import { UserService } from 'src/app/services/user.service'; -import { store } from 'src/app/store'; - -interface RulesDataSourceItem { - status?: string; - name: string; - source: string; - lastExecution?: Date; - message?: string; -} - -@Component({ - selector: 'app-rules-status', - templateUrl: './rules.status.component.html', - styleUrls: ['./rules.status.component.scss'], -}) - -/** - * Rules component. - */ -export class RulesStatusComponent implements AfterViewInit, OnInit { - errorIcon = faTriangleExclamation; - successIcon = faCircleCheck; - unknownStatusIcon = faQuestion; - columnHeaders: string[] = [ - 'status', - 'name', - 'source', - 'lastExecution', - 'message', - ]; - dataSource = new MatTableDataSource([]); - @ViewChild(MatPaginator) paginator!: MatPaginator; - - agentsMetadata: AgentsMetadata; - - /** - * Constructor. - * - * @param {HttpClient} http - */ - constructor(private http: HttpClient, private userService: UserService) {} - - /** - * @inheritdoc - */ - ngOnInit(): void { - store.agents.subscribe((agentsMetadata) => { - this.agentsMetadata = agentsMetadata; - }); - - store.rules.subscribe((rules) => { - this.dataSource.data = this.createRulesDataSource(rules); - }); - } - - // eslint-disable-next-line require-jsdoc - ngAfterViewInit() { - this.dataSource.paginator = this.paginator; - } - - /** - * Transforms a set of rules into a table data source. - * @param {Rule[]} rules the rules to display - * @returns {RulesDataSourceItem[]} - */ - private createRulesDataSource(rules: Rule[]): RulesDataSourceItem[] { - return rules.map((rule) => { - const sourceAgentMetadata = this.agentsMetadata.source?.find( - (agentMetadata) => agentMetadata.id === rule.source.agentId - ); - const status = rule.latestStatus - ? rule.latestStatus.success - ? 'success' - : 'failed' - : undefined; - - return { - status, - name: rule.name, - source: sourceAgentMetadata?.name ?? '[Unknown source]', - lastExecution: rule.latestStatus?.lastExecution, - message: rule.latestStatus?.error, - }; - }); - } -} diff --git a/client/src/app/components/rules/rules.component.html b/client/src/app/components/rules/rules.component.html deleted file mode 100644 index c60d451..0000000 --- a/client/src/app/components/rules/rules.component.html +++ /dev/null @@ -1,124 +0,0 @@ - - -
    -

    All Rules

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Status - - - - Name{{ rule.name }}Source{{ rule.source.agentName }}Type{{ rule.condition.name }}Comparator - {{ rule.condition.comparator }} - Value{{ rule.condition.value }}Interval - {{ rule.executionInterval | intervalFormat }} - Last execustion - {{ - rule.status - ? (rule.latestStatus?.lastExecution | date: 'medium') - : 'Not executed' - }} - Execution Info -
    - {{ - rule?.latestStatus?.error?.length > 30 - ? rule?.status?.error.slice(0, 30) + '...' - : rule?.status?.error - }} -
    -
    Actions - -
    - - - - -
    diff --git a/client/src/app/components/rules/rules.component.scss b/client/src/app/components/rules/rules.component.scss deleted file mode 100644 index e200d77..0000000 --- a/client/src/app/components/rules/rules.component.scss +++ /dev/null @@ -1,51 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -.wrapper { - margin-top: 2rem; - width: 100%; - display: flex; - flex-direction: column; - align-items: center; -} - -.table { - width: 100%; -} - -.paginator { - width: 100%; -} - -.error-icon { - color: #f44336; -} - -[data-full-message] { - position: relative; - cursor: help; -} - -[data-full-message]:hover::before { - content: attr(data-full-message); - position: absolute; - bottom: -46px; - padding: 10px; - background: #3f51b5; - color: #fff; - font-size: 14px; - white-space: nowrap; - z-index: 100000; - box-shadow: 0px 3px 1px -2px rgb(0 0 0 / 20%), 0px 2px 2px 0px rgb(0 0 0 / 14%), 0px 1px 5px 0px rgb(0 0 0 / 12%); - border-radius: 5px; -} \ No newline at end of file diff --git a/client/src/app/components/rules/rules.component.spec.ts b/client/src/app/components/rules/rules.component.spec.ts deleted file mode 100644 index f5f6b9a..0000000 --- a/client/src/app/components/rules/rules.component.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { RulesComponent } from './rules.component'; - -describe('RulesComponent', () => { - let component: RulesComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [RulesComponent], - }).compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(RulesComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/client/src/app/components/rules/rules.component.ts b/client/src/app/components/rules/rules.component.ts deleted file mode 100644 index 6babfa9..0000000 --- a/client/src/app/components/rules/rules.component.ts +++ /dev/null @@ -1,155 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { HttpClient } from '@angular/common/http'; -import { AfterViewInit, Component, OnInit, ViewChild } from '@angular/core'; -import { MatPaginator } from '@angular/material/paginator'; -import { MatTableDataSource } from '@angular/material/table'; -import { - faCircleCheck, - faQuestion, - faTriangleExclamation, -} from '@fortawesome/free-solid-svg-icons'; -import { combineLatestWith } from 'rxjs'; -import { AgentsMetadata } from 'src/app/interfaces/api'; -import { Rule, RuleStatus } from 'src/app/interfaces/rule'; -import { RulesService } from 'src/app/services/rules.service'; -import { UserService } from 'src/app/services/user.service'; -import { store } from 'src/app/store'; - -interface RulesDataSourceItem { - id: string; - latestStatus?: RuleStatus; - name: string; - executionInterval: number; - source: { - agentId: string; - agentName: string; - }; - condition: { - dataPoint?: string; - comparator: string; - value: string | number | boolean; - }; -} - -@Component({ - selector: 'app-rules', - templateUrl: './rules.component.html', - styleUrls: ['./rules.component.scss'], -}) - -/** - * Rules component. - */ -export class RulesComponent implements AfterViewInit, OnInit { - dataSource = new MatTableDataSource([]); - columnHeaders = [ - 'status', - 'name', - 'source', - 'type', - 'comparator', - 'value', - 'interval', - 'lastExecution', - 'message', - 'actions', - ]; - - errorIcon = faTriangleExclamation; - successIcon = faCircleCheck; - unknownStatusIcon = faQuestion; - - @ViewChild(MatPaginator) paginator!: MatPaginator; - - /** - * Constructor. - * - * @param {HttpClient} http - */ - constructor( - private readonly http: HttpClient, - private readonly userService: UserService, - private readonly rulesService: RulesService - ) {} - - /** - * @inheritdoc - */ - ngOnInit(): void { - store.rules - .pipe(combineLatestWith(store.agents)) - .subscribe(([rules, agentsMetadata]) => { - this.dataSource.data = this.createRulesDataSource( - rules, - agentsMetadata - ); - }); - this.rulesService.fetchRulesForCurrentUser(); - } - - /** - * Transforms rules into a table data source. - * @param {Rule[]} rules the rules - * @param {AgentsMetadata} agentsMetadata the agent metadata - * @returns {RulesDataSourceItem[]} the table data source - */ - private createRulesDataSource( - rules: Rule[], - agentsMetadata: AgentsMetadata - ): RulesDataSourceItem[] { - return rules.map((rule) => { - const sourceAgentMetadata = agentsMetadata?.source.find( - (agentMetadata) => agentMetadata.id === rule.source.agentId - ); - const sourceDataPointMetadata = sourceAgentMetadata?.dataPoints.find( - (dataPointMetadata) => - (dataPointMetadata.key = rule.condition.dataPoint) - ); - return { - id: rule.id, - latestStatus: rule.latestStatus, - name: rule.name, - executionInterval: rule.executionInterval, - source: { - agentId: rule.source.agentId, - agentName: sourceAgentMetadata?.name ?? '[Unknown agent]', - }, - condition: { - dataPoint: sourceDataPointMetadata?.name, - comparator: this.rulesService.getComparatorLabel( - rule.condition.comparator - ), - value: rule.condition.compareValue, - }, - }; - }); - } - - /** - * @inheritdoc - */ - ngAfterViewInit() { - this.dataSource.paginator = this.paginator; - } - - /** - * Delete rule. - * - * @param {Rule} rule - */ - removeRule(rule: Rule) { - this.rulesService.deleteRule(rule.id); - } -} diff --git a/client/src/app/components/target-selector/target-selector.component.html b/client/src/app/components/target-selector/target-selector.component.html deleted file mode 100644 index 544d6af..0000000 --- a/client/src/app/components/target-selector/target-selector.component.html +++ /dev/null @@ -1,81 +0,0 @@ - - -
    - - - - - - - {{ node.name }} - - - {{ node.name }} - - - - - - - - - - - - {{ node.name }} - - - {{ node.name }} - - - - - - -
    diff --git a/client/src/app/components/target-selector/target-selector.component.scss b/client/src/app/components/target-selector/target-selector.component.scss deleted file mode 100644 index 24bd4d2..0000000 --- a/client/src/app/components/target-selector/target-selector.component.scss +++ /dev/null @@ -1,25 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -.mat-form-field { - margin-right: 4px; -} - -.example-tree-progress-bar { - margin-left: 30px; -} - -.wrapper { - display: flex; - flex-direction: column; -} diff --git a/client/src/app/components/target-selector/target-selector.component.spec.ts b/client/src/app/components/target-selector/target-selector.component.spec.ts deleted file mode 100644 index aa148f1..0000000 --- a/client/src/app/components/target-selector/target-selector.component.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { TargetSelectorComponent } from './target-selector.component'; - -describe('TargetSelectorDebugComponent', () => { - let component: TargetSelectorComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [TargetSelectorComponent], - }).compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(TargetSelectorComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/client/src/app/components/target-selector/target-selector.component.ts b/client/src/app/components/target-selector/target-selector.component.ts deleted file mode 100644 index f6b8b5d..0000000 --- a/client/src/app/components/target-selector/target-selector.component.ts +++ /dev/null @@ -1,289 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { SelectionModel } from '@angular/cdk/collections'; -import { FlatTreeControl } from '@angular/cdk/tree'; -import { Component } from '@angular/core'; -import { RuleTargetAction } from 'src/app/interfaces/rule'; - -import { DynamicDataSource } from 'src/app/models/dynamic-data-source.model'; -import { DynamicDatabase } from 'src/app/models/dynamic-database.model'; -import { TargetEntityTreeNode } from 'src/app/models/entity-node.model'; -import { store } from 'src/app/store'; - -/** - * @title Tree with dynamic data - */ -@Component({ - selector: 'app-target-selector', - templateUrl: './target-selector.component.html', - styleUrls: ['./target-selector.component.scss'], -}) - -/** - * Target Selector component. - */ -export class TargetSelectorComponent { - treeControl: FlatTreeControl; - dataSource: DynamicDataSource; - allowSelectionBubbling: boolean = false; - - // The selection for checklist - checklistSelection = new SelectionModel( - true /* multiple */ - ); - - /** - * Constructor. - * - * @param {DynamicDatabase} database - */ - constructor(private database: DynamicDatabase) { - this.treeControl = new FlatTreeControl( - this.getLevel, - this.isExpandable - ); - this.dataSource = new DynamicDataSource(this.treeControl, database); - - // Initialize data source - this.init(); - - store.ruleAdded.subscribe((added) => { - this.init(); - }); - } - - /** - * Initialize data source. - */ - init(): void { - this.dataSource.data = this.database.initialData(); - } - - /** - * Get node level. - * - * @param {TargetEntityTreeNode} node - * @returns {number} - */ - getLevel(node: TargetEntityTreeNode): number { - return node.level; - } - - /** - * Check if node is expandable. - * - * @param {TargetEntityTreeNode} node - * @returns {boolean} - */ - isExpandable(node: TargetEntityTreeNode): boolean { - return node.expandable; - } - - /** - * Check if node has children. - * - * @param {number} _ - * @param {TargetEntityTreeNode} _nodeData - * @returns {boolean} - */ - hasChild(_: number, _nodeData: TargetEntityTreeNode): boolean { - return _nodeData.expandable; - } - - /** - * Check whether all the descendants of the node are selected. - * - * @param {TargetEntityTreeNode} node - * @returns {boolean} - */ - descendantsAllSelected(node: TargetEntityTreeNode): boolean { - const descendants = this.treeControl.getDescendants(node); - - const descAllSelected = - descendants.length > 0 && - descendants.every((child) => { - return this.checklistSelection.isSelected(child); - }); - - return descAllSelected; - } - - /** - * Check whether part of the descendants are selected - * - * @param {TargetEntityTreeNode} node - * @returns {boolean} - */ - descendantsPartiallySelected(node: TargetEntityTreeNode): boolean { - if (this.allowSelectionBubbling) { - const descendants = this.treeControl.getDescendants(node); - const result = descendants.some((child) => - this.checklistSelection.isSelected(child) - ); - - return result && !this.descendantsAllSelected(node); - } - - return false; - } - - /** - * Toggle the entity selection. - * Select/deselect all the descendants node - * - * @param {TargetEntityTreeNode} node - */ - entitySelectionToggle(node: TargetEntityTreeNode): void { - this.checklistSelection.toggle(node); - - if (this.allowSelectionBubbling) { - const descendants = this.treeControl.getDescendants(node); - - this.checklistSelection.isSelected(node) - ? this.checklistSelection.select(...descendants) - : this.checklistSelection.deselect(...descendants); - - // Force update for the parent - descendants.forEach((child) => this.checklistSelection.isSelected(child)); - this.checkAllParentsSelection(node); - } - - // Publish selection change to store - this.publishSelectionChange(); - } - - /** - * Publish selection change to store. - */ - publishSelectionChange() { - store.targets.next( - this.entitiesToRuleTargetAction(this.checklistSelection.selected) - ); - - // Update save requirements - const valid = this.checkAllParentsSelection.length > 0; - store.saveRequirements.next({ - ...store.saveRequirements.value, - ...{ target: valid }, - }); - } - - /** - * Toggle a leaf entity selection. - * Check all the parents to see if they changed - * - * @param {TargetEntityTreeNode} node - */ - entityLeafItemSelectionToggle(node: TargetEntityTreeNode): void { - this.checklistSelection.toggle(node); - - if (this.allowSelectionBubbling) { - this.checkAllParentsSelection(node); - } - - // Publish selection change to all components - this.publishSelectionChange(); - } - - /** - * Check if node is selected. - * - * @param {TargetEntityTreeNode} node - * @returns {boolean} - */ - isSelected(node: TargetEntityTreeNode): boolean { - const selected = this.checklistSelection.isSelected(node); - return selected; - } - - /** - * Transform entities to Target Agent. - * - * @param {TargetEntityTreeNode[]} nodes - * @returns {TargetAgent} - */ - entitiesToRuleTargetAction( - nodes: TargetEntityTreeNode[] - ): RuleTargetAction[] { - return nodes.map((node) => ({ - agentId: 'dv360', - action: 'ACTIVATE', - parameters: node.parameters, - })); - } - - /** - * Checks all the parents when a leaf node is selected/unselected. - * - * @param {TargetEntityTreeNode} node - */ - checkAllParentsSelection(node: TargetEntityTreeNode): void { - let parent: TargetEntityTreeNode | null = this.getParentNode(node); - - while (parent) { - this.checkRootNodeSelection(parent); - parent = this.getParentNode(parent); - } - } - - /** - * Check root node checked state and change it accordingly. - * - * @param {TargetEntityTreeNode} node - */ - checkRootNodeSelection(node: TargetEntityTreeNode): void { - if (!node.selectable) { - return; - } - - const nodeSelected = this.checklistSelection.isSelected(node); - const descendants = this.treeControl.getDescendants(node); - const descAllSelected = - descendants.length > 0 && - descendants.every((child) => { - return this.checklistSelection.isSelected(child); - }); - - if (nodeSelected && !descAllSelected) { - this.checklistSelection.deselect(node); - } else if (!nodeSelected && descAllSelected) { - this.checklistSelection.select(node); - } - } - - /** - * Get the parent node of a node. - * - * @param {TargetEntityTreeNode} node - * @returns {TargetEntityTreeNode | null} - */ - getParentNode(node: TargetEntityTreeNode): TargetEntityTreeNode | null { - const currentLevel = this.getLevel(node); - - if (currentLevel < 1) { - return null; - } - - const startIndex = this.treeControl.dataNodes.indexOf(node) - 1; - - for (let i = startIndex; i >= 0; i--) { - const currentNode = this.treeControl.dataNodes[i]; - - if (this.getLevel(currentNode) < currentLevel) { - return currentNode; - } - } - return null; - } -} diff --git a/client/src/app/components/user-settings/user-settings.component.html b/client/src/app/components/user-settings/user-settings.component.html deleted file mode 100644 index e05c245..0000000 --- a/client/src/app/components/user-settings/user-settings.component.html +++ /dev/null @@ -1,54 +0,0 @@ - - - -
    - -
    diff --git a/client/src/app/components/user-settings/user-settings.component.scss b/client/src/app/components/user-settings/user-settings.component.scss deleted file mode 100644 index 79eeda0..0000000 --- a/client/src/app/components/user-settings/user-settings.component.scss +++ /dev/null @@ -1,34 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -.user-settings-action-buttons { - padding-bottom: 20px; -} - -.user-settings-headers-align .mat-expansion-panel-header-title, -.user-settings-headers-align .mat-expansion-panel-header-description { - flex-basis: 0; -} - -.user-settings-headers-align .mat-expansion-panel-header-description { - justify-content: space-between; - align-items: center; -} - -.user-settings-headers-align .mat-form-field + .mat-form-field { - margin-left: 8px; -} - -.mat-form-field { - width: 80% !important; -} diff --git a/client/src/app/components/user-settings/user-settings.component.spec.ts b/client/src/app/components/user-settings/user-settings.component.spec.ts deleted file mode 100644 index 27d46a3..0000000 --- a/client/src/app/components/user-settings/user-settings.component.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { UserSettingsComponent } from './user-settings.component'; - -describe('UserSettingsComponent', () => { - let component: UserSettingsComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [UserSettingsComponent], - }).compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(UserSettingsComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/client/src/app/components/user-settings/user-settings.component.ts b/client/src/app/components/user-settings/user-settings.component.ts deleted file mode 100644 index 20aefe5..0000000 --- a/client/src/app/components/user-settings/user-settings.component.ts +++ /dev/null @@ -1,193 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { Location } from '@angular/common'; -import { HttpClient } from '@angular/common/http'; -import { Component, ViewChild } from '@angular/core'; -import { FormBuilder, FormGroup } from '@angular/forms'; -import { MatAccordion } from '@angular/material/expansion'; -import { MatSnackBar } from '@angular/material/snack-bar'; -import { ActivatedRoute } from '@angular/router'; -import { environment } from 'src/environments/environment'; - -import { of } from 'rxjs'; -import { debounceTime, switchMap } from 'rxjs/operators'; -import { UserService } from 'src/app/services/user.service'; - -interface UserSettingUiInfo { - title: string; - description: string; - field: string; - settingName: string; - expanded?: boolean; - value?: string; -} - -@Component({ - selector: 'app-user-settings', - templateUrl: './user-settings.component.html', - styleUrls: ['./user-settings.component.scss'], -}) - -/** - * User Settings Component. - */ -export class UserSettingsComponent { - @ViewChild(MatAccordion) accordion: MatAccordion; - - public savingUserSettings = false; - public userSettings: FormGroup; - private requiredSettings: string[] = []; - public settings: UserSettingUiInfo[] = [ - { - title: 'OpenWeatherMap API', - description: 'Required to fetch the weather', - field: 'Api Key', - settingName: 'OPENWEATHER_API_KEY', - }, - { - title: 'Ambee API', - description: 'Required to fetch the pollen and air quality infos', - field: 'Api Key', - settingName: 'AMBEE_API_KEY', - }, - { - title: 'Google Maps API', - description: 'Required to do autocompletion of the city name', - field: 'Api Key', - settingName: 'GOOGLEMAPS_API_KEY', - }, - { - title: 'Google Ads Developer Token', - description: 'Required to access Google Ads API', - field: 'Developer Token', - settingName: 'GOOGLEADS_DEV_TOKEN', - }, - { - title: 'Google Ads Manager Account ID', - description: 'Specifies the manager account to use', - field: 'ID without dashes', - settingName: 'GOOGLEADS_MANAGER_ACCOUNT_ID', - }, - { - title: 'Google Ads Account ID', - description: 'Specifies the account to modify', - field: 'ID without dashes', - settingName: 'GOOGLEADS_ACCOUNT_ID', - }, - ]; - - /** - * Constructor. - * - * @param {ActivatedRoute} route - * @param {Location} location - * @param {HttpClient} http - * @param {UserService} userService - * @param {FormBuilder} formBuilder - * @param {MatSnackBar} message - */ - constructor( - private route: ActivatedRoute, - private location: Location, - private http: HttpClient, - private userService: UserService, - private formBuilder: FormBuilder, - private message: MatSnackBar - ) { - this.route.fragment.subscribe((f) => { - if (f) { - this.requiredSettings = (f as string).split(','); - } - }); - - this.settings = this.settings.map((v) => { - return { - ...v, - expanded: this.requiredSettings.includes(v.settingName), - }; - }); - - const group: { [key: string]: Array } = {}; - for (const setting of this.settings) { - group[setting.settingName] = []; - } - - this.userSettings = this.formBuilder.group(group); - if (this.userService.loggedInUser.settings) { - const filteredUserSettings: Record = {}; - for (const setting of this.settings) { - filteredUserSettings[setting.settingName] = - this.userService.loggedInUser?.settings[setting.settingName] || ''; - } - - this.userSettings.setValue(filteredUserSettings); - } - } - - /** - * Init. - */ - ngOnInit(): void { - this.userSettings.valueChanges - .pipe( - debounceTime(1000), - switchMap((settings) => of(settings)) - ) - .subscribe((settings: Record) => { - this.showSavedStatus('Saving...', true); - this.save(settings); - }); - } - - /** - * Move back in browser history. - */ - back() { - this.location.back(); - } - - /** - * Save user settings. - * - * @param {Record} settings - */ - save(settings: Record) { - this.http - .post( - `${environment.apiUrl}/accounts/${this.userService.loggedInUser.id}/settings`, - settings - ) - .subscribe({ - next: (_) => { - this.userService.setSettings(settings); - this.showSavedStatus('Saved'); - }, - error: (_) => { - console.log('Error saving user settings', _); - this.showSavedStatus('Error'); - }, - }); - } - - /** - * Show saved status. - * - * @param {string} message - * @param {boolean} saving - */ - showSavedStatus(message: string, saving: boolean = false) { - this.savingUserSettings = saving; - this.message.open(message, 'Dismiss', { duration: 5000 }); - } -} diff --git a/client/src/app/interceptors/auth.interceptor.spec.ts b/client/src/app/interceptors/auth.interceptor.spec.ts deleted file mode 100644 index 992a3fe..0000000 --- a/client/src/app/interceptors/auth.interceptor.spec.ts +++ /dev/null @@ -1,29 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { TestBed } from '@angular/core/testing'; - -import { AuthInterceptor } from './auth.interceptor'; - -describe('AuthInterceptor', () => { - beforeEach(() => - TestBed.configureTestingModule({ - providers: [AuthInterceptor], - }) - ); - - it('should be created', () => { - const interceptor: AuthInterceptor = TestBed.inject(AuthInterceptor); - expect(interceptor).toBeTruthy(); - }); -}); diff --git a/client/src/app/interceptors/auth.interceptor.ts b/client/src/app/interceptors/auth.interceptor.ts deleted file mode 100644 index 9b28653..0000000 --- a/client/src/app/interceptors/auth.interceptor.ts +++ /dev/null @@ -1,92 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { - HttpEvent, - HttpHandler, - HttpInterceptor, - HttpRequest, -} from '@angular/common/http'; -import { Injectable } from '@angular/core'; -import { catchError, Observable, switchMap, throwError } from 'rxjs'; -import { AuthService } from '../services/auth.service'; - -const REFRESH_ERROR_CODES = new Set([401]); - -@Injectable() -/** - * Interceptor for HTTP requests, it attaches Authorization - * Header and attempts to do a token refresh when current - * access Token expires. - * At other layers ensure user is redirected to login - * if Token expired error is thrown. - */ -export class AuthInterceptor implements HttpInterceptor { - /** - * Constructor - * @param {AuthService} authService injected - */ - constructor(private authService: AuthService) {} - - /** - * Applies an access token to the request's authorization header. - * @param {HttpRequest} request the request to be sent - * @param {string} accessToken the access token for the authorization header - * @returns {HttpRequest} the authorized request - */ - private applyToken(request: HttpRequest, accessToken: string) { - return request.clone({ - setHeaders: { Authorization: 'Bearer ' + accessToken }, - }); - } - - /** - * Handles the access token refresh. - * @param {HttpRequest} request the request to be sent - * @param {HttpHandler} next the next handler in the chain. - * @returns {Observable>} - */ - private handleRefresh(request: HttpRequest, next: HttpHandler) { - return this.authService - .refreshAccessToken() - .pipe( - switchMap((credentials) => - next.handle(this.applyToken(request, credentials.accessToken)) - ) - ); - } - - /** - * Handle HTTP request. - * @param {HttpRequest} request the request to authorize - * @param {HttpHandler} next the next handler in the chain. - * @returns {Observable>} - */ - intercept( - request: HttpRequest, - next: HttpHandler - ): Observable> { - const accessToken = this.authService.accessToken; - const authRequest = this.applyToken(request, accessToken); - - return next - .handle(authRequest) - .pipe( - catchError((err) => - REFRESH_ERROR_CODES.has(err.status) - ? this.handleRefresh(authRequest, next) - : throwError(() => err) - ) - ); - } -} diff --git a/client/src/app/interceptors/index.ts b/client/src/app/interceptors/index.ts deleted file mode 100644 index d898ff7..0000000 --- a/client/src/app/interceptors/index.ts +++ /dev/null @@ -1,23 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { HTTP_INTERCEPTORS } from '@angular/common/http'; -import { AuthInterceptor } from './auth.interceptor'; - -export const httpInterceptorProviders = [ - { - provide: HTTP_INTERCEPTORS, - useClass: AuthInterceptor, - multi: true, - }, -]; diff --git a/client/src/app/interfaces/api.ts b/client/src/app/interfaces/api.ts deleted file mode 100644 index 7812124..0000000 --- a/client/src/app/interfaces/api.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { SourceAgentMetadata } from './source'; -import { TargetAgentMetadata } from './target'; - -export interface AgentsMetadata { - source: SourceAgentMetadata[]; - target: TargetAgentMetadata[]; -} diff --git a/client/src/app/interfaces/common.ts b/client/src/app/interfaces/common.ts deleted file mode 100644 index eac0149..0000000 --- a/client/src/app/interfaces/common.ts +++ /dev/null @@ -1,65 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -/** - * Base interface of all IFTTA DB models. - */ -export interface Model { - id: string; -} - -/** - * A model's data (excluding the ID). - */ -export type ModelSpec = Omit; - -export interface OperationResult { - status: 'success' | 'failed'; - error?: string; -} - -/** - * Represents the scheduled fetching of data via a source agent. - */ -export interface Job extends Model { - ownerId: string; - executionInterval: number; - lastExecutionDate?: Date; - sourceAgentId: string; - sourceParameters: AgentParameters; - ruleIds: string[]; -} - -export type AgentParameters = Record; - -export interface Agent { - /** The unique ID of this agent. */ - readonly id: string; - - /** - * Provides descriptive metadata about this agent, including its name, id and - * additional capabilities. - */ - describe(): Promise; -} - -export interface AgentSettingMetadata { - key: string; - name: string; -} -export interface AgentMetadata { - id: string; - name: string; - type: 'source' | 'target'; - settings?: AgentSettingMetadata[]; -} diff --git a/client/src/app/interfaces/rule.ts b/client/src/app/interfaces/rule.ts deleted file mode 100644 index fcc0769..0000000 --- a/client/src/app/interfaces/rule.ts +++ /dev/null @@ -1,94 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { AgentParameters, Model, OperationResult } from './common'; -import { TargetAgentAction } from './target'; - -export type Comparator = 'eq' | 'gt' | 'lt'; - -/** - * A rule's condition definition - */ -export interface Condition { - /** The source data point to compare. */ - dataPoint: string; - /** The condition's comparator. */ - comparator: Comparator; - /** The value to compare against. */ - compareValue: string | number | boolean; -} - -/** - * A rule's source definition. - */ -export interface RuleSourceAction { - /** The source agent ID. */ - agentId: string; - /** The source agent parameters. */ - parameters: AgentParameters; -} - -/** - * A rule's target definition. - */ -export interface RuleTargetAction { - /** The target agent ID. */ - agentId: string; - /** The target agent parameters. */ - parameters: AgentParameters; - /** The action to execute if the condition evaluates to true. */ - action: TargetAgentAction; -} - -export interface RuleStatus { - /** A flag indicating that the rule evaluation succeeded. */ - success: boolean; - /** The rule's last evaluation date. */ - lastExecution: Date; - /** The reason the rule evaluation did not succeed. */ - error?: string; -} - -/** - * The rule definition. - */ -export interface Rule extends Model { - /** The rule's human-readable name */ - name: string; - /** The user ID of the rule owner. */ - ownerId: string; - /** The execution interval in minutes. */ - executionInterval: number; - /** The rule's source definition. */ - source: RuleSourceAction; - /** The rule's condition definition. */ - condition: Condition; - /** The rule's target defintion. */ - targets: RuleTargetAction[]; - - /** The status of the rule's last evaluation. */ - latestStatus?: RuleStatus; -} - -/** - * The result of evaluating a rule. - * - * During evaluation source agent data is translated to the resulting - * actions for the target agent. - */ -export interface RuleEvaluationResult extends OperationResult { - /** The rule which was evaluated */ - rule: Rule; - /** The resulting target actions after evaluation. */ - targetActions?: RuleTargetAction[]; -} diff --git a/client/src/app/interfaces/source.ts b/client/src/app/interfaces/source.ts deleted file mode 100644 index e68c1be..0000000 --- a/client/src/app/interfaces/source.ts +++ /dev/null @@ -1,151 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { - Agent, - AgentMetadata, - AgentParameters, - OperationResult, -} from './common'; - -/** - * A description of a parameter a source agent requires to make calls - * to the ultimate API. - */ -export interface SourceAgentParameterMetadata { - /** The parameter's human readable name. */ - name: string; - /** The parameter's unique key. */ - key: string; - /** The type of the parameter. */ - type: string; - /** Optional enumeration values. */ - values?: string[]; -} - -/** - * A description of a data point provided by a source agent. - * - * Source agent can provide data point values as strings, numbers or booleans. - * - * Numeric data points should also specify the unit of measurement if applicable. - * E.g. temperature data points should specify whether they are in °C, °F or K. - * - * Enumeration values may be specified via the values property. - * E.g. index data points should specify possible values like 'low', 'medium', - * 'high', etc. - */ -export interface SourceAgentDataPointMetadata { - /** The data point's unique key. */ - key: string; - /** The data point's human readable name. */ - name: string; - /** The type of the data point. */ - type: 'string' | 'number' | 'boolean'; - /** Optional enumeration values. */ - values?: string[]; -} - -/** - * A description of an agent and it's capabilities. - */ -export interface SourceAgentMetadata extends AgentMetadata { - /** - * Parameters which a source agent requires to fetch data. - */ - readonly parameters: SourceAgentParameterMetadata[]; - /** - * Data points which a source agent provides. - */ - readonly dataPoints: SourceAgentDataPointMetadata[]; -} - -/** - * A query task for the source agent to execute. - */ -export interface SourceAgentTask { - /** - * Parameters for this task. - */ - parameters: AgentParameters; - - /** - * The ID of the user who owns this task. - */ - ownerId: string; - - /** - * The task owners settings object. - */ - ownerSettings: Record; - /** - * The data points for which this task requires data. - */ - dataPoints: string[]; -} - -/** - * The source agent's response data object. When executing tasks, the - * source agent must respons with an object that contains values for each - * queried data point. - * - * If a task's data points contain ["a", "b", "c"] the source agent must provide - * a response object in the form of { "a": , "b": , "c": }, - * where values must be of the type specified by the data point description. - */ -export interface SourceAgentData { - [dataPoint: string]: number | boolean | string; -} - -/** - * The result of a data fetching job. The data object must contain values for - * each queried data point. The data can be undefined in error cases (i.e. if - * the result's status is 'failed' rather than 'success'.) - */ -export interface SourceAgentTaskResult extends OperationResult { - /** The agent's response data. */ - data?: SourceAgentData; -} - -/** - * The source agent is responsible for fetching data from a source. - * - * Source agents access an external API to request input signals and translate - * those signals into data for the rule engine. The process of fetching data - * is asynchronous and source agent implementations will be invoked via tasks. - * - * A source agent task encapsulates the query for a set of data points. Source - * agents must provide data for all queried data points. Tasks will also - * receive a set of parameters for the query and the task owner's settings. - * Source agents should inspect parameters and owner settings to draw required - * values for the ultimate API query. - * - * In addition to the process of executing tasks, source agents must also - * implement the method "describe", which provides metadata for the agent, - * including the agent's name and ID, which data points this source agent - * provides, etc. Please refer to the SourceAgentDescription interface for - * information on descriptive metadat. - */ -export interface SourceAgent extends Agent { - /** - * Executes a query task. - * @param task the task to be executed - */ - executeTask(task: SourceAgentTask): Promise; - - /** - * Provides descriptive metadata about this agent, including its name, id and - * available source data points . - */ - describe(): Promise; -} diff --git a/client/src/app/interfaces/target.ts b/client/src/app/interfaces/target.ts deleted file mode 100644 index 3020a16..0000000 --- a/client/src/app/interfaces/target.ts +++ /dev/null @@ -1,79 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { - Agent, - AgentMetadata, - AgentParameters, - OperationResult, -} from './common'; -import { User } from './user'; - -export interface TargetEntity { - type: string; - name: string; - parameters: Record; -} - -export interface TargetEntityMetadata { - key: string; - name: string; - parameters?: string[]; -} - -export interface TargetAgent extends Agent { - /** - * Executes a set of tasks that result from rule evaluations - * @param {TargetAgentTask[]} tasks the tasks to execute - */ - executeTasks(tasks: TargetAgentTask[]): Promise; - - /** - * @inheritdoc - */ - describe(): Promise; - - /** - * List a set of target entities this agent can interact with. - * @param {string} type the entity type - * @param {AgentParameters} parameters the call parameters - * @param {User} requestor the requesting user - * @param {Record} requestorSettings the requestor's user - * settings. - * @returns {Promise} the agent's response - */ - listTargetEntities( - type: string, - parameters: AgentParameters, - requestor: User, - requestorSettings: Record - ): Promise; -} - -export interface TargetAgentMetadata extends AgentMetadata { - targetEntities: TargetEntityMetadata[]; -} - -export type TargetAgentAction = 'ACTIVATE' | 'DEACTIVATE'; - -export interface TargetAgentTask { - agentId: string; - action: TargetAgentAction; - parameters: AgentParameters; - owner: User; - ownerSettings: Record; -} - -export interface TargetEntityResponse extends OperationResult { - entities?: TargetEntity[]; -} diff --git a/client/src/app/interfaces/user.ts b/client/src/app/interfaces/user.ts deleted file mode 100644 index 3477aae..0000000 --- a/client/src/app/interfaces/user.ts +++ /dev/null @@ -1,33 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { Model } from './common'; - -export interface Credentials { - accessToken: string; - expiry: Date; -} - -export interface User extends Model { - profileId: string; - displayName?: string; - givenName?: string; - familyName?: string; - gender?: string; - email: string; - verified?: boolean; - profilePhoto?: string; - locale?: string; - credentials: Credentials; - settings: Record; -} diff --git a/client/src/app/models/dynamic-data-source.model.spec.ts b/client/src/app/models/dynamic-data-source.model.spec.ts deleted file mode 100644 index da966be..0000000 --- a/client/src/app/models/dynamic-data-source.model.spec.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { DynamicDataSource } from './dynamic-data-source.model'; - -describe('DynamicDataSource', () => { - it('should create an instance', () => { - expect(new DynamicDataSource()).toBeTruthy(); - }); -}); diff --git a/client/src/app/models/dynamic-data-source.model.ts b/client/src/app/models/dynamic-data-source.model.ts deleted file mode 100644 index eb9aaf1..0000000 --- a/client/src/app/models/dynamic-data-source.model.ts +++ /dev/null @@ -1,155 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { - CollectionViewer, - DataSource, - SelectionChange, -} from '@angular/cdk/collections'; -import { FlatTreeControl } from '@angular/cdk/tree'; -import { BehaviorSubject, merge, Observable } from 'rxjs'; -import { map } from 'rxjs/operators'; -import { DynamicDatabase } from './dynamic-database.model'; -import { TargetEntityTreeNode } from './entity-node.model'; - -/** - * Dynamic data source. - */ -export class DynamicDataSource implements DataSource { - dataChange = new BehaviorSubject([]); - - /** - * Getter function for data. - * - * @returns {TargetEntityTreeNode[]} - */ - get data(): TargetEntityTreeNode[] { - return this.dataChange.value; - } - - /** - * Setter function for data. - * - * @param {TargetEntityTreeNode[]} value - */ - set data(value: TargetEntityTreeNode[]) { - this._treeControl.dataNodes = value; - this.dataChange.next(value); - } - - /** - * - * @param {FlatTreeControl} _treeControl - * @param {DynamicDatabase} _database - */ - constructor( - private _treeControl: FlatTreeControl, - private _database: DynamicDatabase - ) {} - - /** - * Connect. - * - * @param {CollectionViewer} collectionViewer - * @returns {Observable} - */ - connect( - collectionViewer: CollectionViewer - ): Observable { - this._treeControl.expansionModel.changed.subscribe((change) => { - if ( - (change as SelectionChange).added || - (change as SelectionChange).removed - ) { - this.handleTreeControl(change as SelectionChange); - } - }); - - return merge(collectionViewer.viewChange, this.dataChange).pipe( - map(() => this.data) - ); - } - - /** - * Disconnect. - * - * @param {CollectionViewer} collectionViewer - */ - disconnect(collectionViewer: CollectionViewer): void {} - - /** - * Handle expand/collapse behaviors - * - * @param {SelectionChange} change - */ - handleTreeControl(change: SelectionChange) { - if (change.added) { - change.added.forEach((node) => this.toggleNode(node, true)); - } - if (change.removed) { - change.removed - .slice() - .reverse() - .forEach((node) => this.toggleNode(node, false)); - } - } - - /** - * Toggle node expansion, remove from display list - * - * @param {TargetEntityTreeNode} node - * @param {boolean} expand - * @returns {Promise} - */ - async toggleNode(node: TargetEntityTreeNode, expand: boolean): Promise { - if (!node.expandable) { - return; - } - - // Set node to loading - node.isLoading = true; - - // Get child nodes - try { - const children = await this._database.getChildren(node); - const index = this.data.indexOf(node); - - if (!children || index < 0) { - node.expandable = false; - node.children = null; - // If no children, or cannot find the node, no op - return; - } - - if (expand) { - this.data.splice(index + 1, 0, ...children); - } else { - let count = 0; - for ( - let i = index + 1; - i < this.data.length && this.data[i].level > node.level; - i++, count++ - ) {} - this.data.splice(index + 1, count); - } - - // Notify the change - this.dataChange.next(this.data); - } catch (err) { - console.error('Error loading children', err); - return; - } finally { - node.isLoading = false; - } - } -} diff --git a/client/src/app/models/dynamic-database.model.spec.ts b/client/src/app/models/dynamic-database.model.spec.ts deleted file mode 100644 index 14fb417..0000000 --- a/client/src/app/models/dynamic-database.model.spec.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { DynamicDatabase } from './dynamic-database.model'; - -describe('DynamicDatabase', () => { - it('should create an instance', () => { - expect(new DynamicDatabase()).toBeTruthy(); - }); -}); diff --git a/client/src/app/models/dynamic-database.model.ts b/client/src/app/models/dynamic-database.model.ts deleted file mode 100644 index b8e54ed..0000000 --- a/client/src/app/models/dynamic-database.model.ts +++ /dev/null @@ -1,154 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { Injectable } from '@angular/core'; -import { map, tap } from 'rxjs'; -import { TargetEntity } from '../interfaces/target'; -import { AgentsService } from '../services/agents.service'; -import { TargetEntityTreeNode } from './entity-node.model'; - -const ENTITY_TYPES: Record< - string, - { childType?: string; expandable: boolean; selectable: boolean } -> = { - dv360: { childType: 'partner', expandable: true, selectable: false }, - partner: { childType: 'advertiser', expandable: true, selectable: false }, - advertiser: { childType: 'campaign', expandable: true, selectable: false }, - campaign: { childType: 'insertionOrder', expandable: true, selectable: true }, - insertionOrder: { childType: 'lineItem', expandable: true, selectable: true }, - lineItem: { expandable: true, selectable: true }, -}; - -@Injectable({ providedIn: 'root' }) -/** - * Database for dynamic data. When expanding a node in the tree, the data source will need to fetch - * the descendants data from the database. - */ -export class DynamicDatabase { - /** - * Constructor. - * - * @param {HttpClient} http - */ - constructor(private agents: AgentsService) {} - - /** - * Initial data from database. - * - * @returns {TargetEntityTreeNode[]} - */ - initialData(): TargetEntityTreeNode[] { - const root = new TargetEntityTreeNode('dv360', 'DV360', 0, true); - root.type = 'dv360'; - return [root]; - } - - /** - * Derive ID from entity. - * - * @param {TargetEntityTreeNode} entity - * @returns {string} - */ - getEntityId(entity: TargetEntityTreeNode): string { - switch (entity.type) { - case 'lineItem': - return entity.parameters['lineItemId']; - case 'insertionOrder': - return entity.parameters['insertionOrderId']; - case 'campaign': - return entity.parameters['campaignId']; - case 'advertiser': - return entity.parameters['advertiserId']; - case 'partner': - return entity.parameters['partnerId']; - default: - throw new Error(`Unknown entity type: ${entity.type}`); - } - } - - /** - * Get node children. - * - * @param {TargetEntityTreeNode} node - * @returns {Promise} - */ - getChildren( - node: TargetEntityTreeNode - ): Promise { - const agentId = 'dv360'; - const entityType = ENTITY_TYPES[node.type].childType; - if (!entityType) { - return Promise.resolve(undefined); - } - - const params = node.parameters; - - // Build request URL - const url = `agents/${agentId}/list/${entityType}`; - - // Build cache key - const hash = btoa(`${url}-${JSON.stringify(params)}`); - - // Fetch children from cache if available - if (localStorage.getItem(hash)) { - return new Promise((resolve) => { - const children = JSON.parse(localStorage.getItem(hash)!); - resolve(children); - }); - } - - // Fetch children from server - return new Promise((resolve, reject) => { - this.agents - .fetchTargetEntities(agentId, entityType, params) - .pipe( - map((targetEntities) => { - return targetEntities?.map((entity) => - this.parseEntity(entity, node) - ); - }), - tap((targetNodes) => { - localStorage.setItem(hash, JSON.stringify(targetNodes)); - }) - ) - .subscribe({ next: resolve, error: reject }); - }); - } - - /** - * Parse entity from JSON to proper model. - * - * @param {TargetEntity} entity - * @param {TargetEntityTreeNode} parent - * @returns {TargetEntityTreeNode} - */ - parseEntity(entity: TargetEntity, parent: TargetEntityTreeNode) { - const child = TargetEntityTreeNode.fromJSON(entity); - child.id = this.getEntityId(child); - child.level = parent.level + 1; - child.selectable = ENTITY_TYPES[child.type].selectable; - child.expandable = ENTITY_TYPES[child.type].expandable; - - return child; - } - - /** - * Check if node is expandable. - * - * @param {TargetEntityTreeNode} node - * @returns {boolean} - */ - isExpandable(node: TargetEntityTreeNode): boolean { - return node.expandable; - } -} diff --git a/client/src/app/models/entity-node.model.spec.ts b/client/src/app/models/entity-node.model.spec.ts deleted file mode 100644 index c392ed8..0000000 --- a/client/src/app/models/entity-node.model.spec.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { TargetEntityTreeNode } from './entity-node.model'; - -describe('EntityNode', () => { - it('should create an instance', () => { - expect(new TargetEntityTreeNode()).toBeTruthy(); - }); -}); diff --git a/client/src/app/models/entity-node.model.ts b/client/src/app/models/entity-node.model.ts deleted file mode 100644 index 96bf8c7..0000000 --- a/client/src/app/models/entity-node.model.ts +++ /dev/null @@ -1,53 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { AgentParameters } from '../interfaces/common'; - -/** - * Entity node. - */ -export class TargetEntityTreeNode { - /** - * - * @param {string} id - * @param {string} name - * @param {number} level - * @param {boolean} expandable - * @param {boolean} selectable - * @param {boolean} isLoading - * @param {Record} parameters - * @param {string} type - * @param {TargetEntityTreeNode} children - */ - constructor( - public id?: string, - public name?: string, - public level: number = 1, - public expandable: boolean = false, - public selectable: boolean = false, - public isLoading: boolean = false, - public type: string = '', - public parameters: AgentParameters = {}, - public children: TargetEntityTreeNode[] | null = null - ) {} - - /** - * Parse User from JSON Object. - * - * @param {any} input - * @returns {User} - */ - static fromJSON(input: any): TargetEntityTreeNode { - return Object.assign(new TargetEntityTreeNode(), input); - } -} diff --git a/client/src/app/pipes/interval-format/interval-format.pipe.spec.ts b/client/src/app/pipes/interval-format/interval-format.pipe.spec.ts deleted file mode 100644 index e51c0f7..0000000 --- a/client/src/app/pipes/interval-format/interval-format.pipe.spec.ts +++ /dev/null @@ -1,21 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { IntervalFormatPipe } from './interval-format.pipe'; - -describe('IntervalFormatPipe', () => { - it('create an instance', () => { - const pipe = new IntervalFormatPipe(); - expect(pipe).toBeTruthy(); - }); -}); diff --git a/client/src/app/pipes/interval-format/interval-format.pipe.ts b/client/src/app/pipes/interval-format/interval-format.pipe.ts deleted file mode 100644 index 9de44e5..0000000 --- a/client/src/app/pipes/interval-format/interval-format.pipe.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { Pipe, PipeTransform } from '@angular/core'; - -@Pipe({ - name: 'intervalFormat', -}) - -/** - * Pipe to format rule interval. - */ -export class IntervalFormatPipe implements PipeTransform { - /** - * Format interval to 'min' and 'hrs' respectively. - * - * @param {number} minutes - * @returns {string} - */ - transform(minutes: number, ...args: unknown[]): string { - if (minutes <= 60) { - return `${minutes} min`; - } else { - return `${minutes / 60} hrs`; - } - } -} diff --git a/client/src/app/pipes/string-replace/string-replace.pipe.spec.ts b/client/src/app/pipes/string-replace/string-replace.pipe.spec.ts deleted file mode 100644 index 79148dd..0000000 --- a/client/src/app/pipes/string-replace/string-replace.pipe.spec.ts +++ /dev/null @@ -1,21 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { StringReplacePipe } from './string-replace.pipe'; - -describe('StringReplacePipe', () => { - it('create an instance', () => { - const pipe = new StringReplacePipe(); - expect(pipe).toBeTruthy(); - }); -}); diff --git a/client/src/app/pipes/string-replace/string-replace.pipe.ts b/client/src/app/pipes/string-replace/string-replace.pipe.ts deleted file mode 100644 index b38e65f..0000000 --- a/client/src/app/pipes/string-replace/string-replace.pipe.ts +++ /dev/null @@ -1,33 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { Pipe, PipeTransform } from '@angular/core'; - -@Pipe({ - name: 'stringReplace', -}) -/** - * String replace Pipe - */ -export class StringReplacePipe implements PipeTransform { - /** - * Replaces a given character in a string - * @param { string } value Original value - * @param { string } match Characters to match - * @param { string } replacement Replacement String / char - * @returns { string } replaced string. - */ - transform(value: string, match: string, replacement: string): string { - return value.split(match).join(replacement); - } -} diff --git a/client/src/app/services/agents.service.ts b/client/src/app/services/agents.service.ts deleted file mode 100644 index 09a7d2c..0000000 --- a/client/src/app/services/agents.service.ts +++ /dev/null @@ -1,68 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; -import { map } from 'rxjs'; -import { environment } from 'src/environments/environment'; -import { AgentsMetadata } from '../interfaces/api'; -import { TargetEntityResponse } from '../interfaces/target'; -import { store } from '../store'; - -@Injectable({ providedIn: 'root' }) -/** - * Central agent management. - */ -export class AgentsService { - /** - * Constructor. - * @param {HttpClient} http injected - */ - constructor(private readonly http: HttpClient) {} - - /** - * Fetches the metadata for all available agents. - */ - fetchAgentsMetadata() { - const url = `${environment.apiUrl}/agents/metadata`; - this.http.get(url).subscribe((agentsMetadata) => { - store.agents.next(agentsMetadata); - store.agents.complete(); - }); - } - - /** - * Fetches a list of target entities. - * @param {string} agentId the agent ID - * @param {string} type entity type - * @param {Record} parameters - * @returns {Observable} a list of target entities - */ - fetchTargetEntities( - agentId: string, - type: string, - parameters: Record - ) { - const url = `${environment.apiUrl}/agents/${agentId}/list/${type}`; - return this.http - .get(url, { params: parameters }) - .pipe( - map((response) => { - if (response.status === 'failed') { - throw new Error(response.error ?? 'Unknown error'); - } - return response.entities!; - }) - ); - } -} diff --git a/client/src/app/services/auth.guard.spec.ts b/client/src/app/services/auth.guard.spec.ts deleted file mode 100644 index e972272..0000000 --- a/client/src/app/services/auth.guard.spec.ts +++ /dev/null @@ -1,29 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { TestBed } from '@angular/core/testing'; - -import { AuthGuard } from './auth.guard'; - -describe('AuthGuard', () => { - let guard: AuthGuard; - - beforeEach(() => { - TestBed.configureTestingModule({}); - guard = TestBed.inject(AuthGuard); - }); - - it('should be created', () => { - expect(guard).toBeTruthy(); - }); -}); diff --git a/client/src/app/services/auth.guard.ts b/client/src/app/services/auth.guard.ts deleted file mode 100644 index 8cb55a4..0000000 --- a/client/src/app/services/auth.guard.ts +++ /dev/null @@ -1,65 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { Injectable } from '@angular/core'; -import { - CanActivate, - ActivatedRouteSnapshot, - RouterStateSnapshot, - UrlTree, - Router, -} from '@angular/router'; -import { Observable } from 'rxjs'; -import { AuthService } from 'src/app/services/auth.service'; - -@Injectable({ - providedIn: 'root', -}) - -/** - * Auth guard to protect routes. - */ -export class AuthGuard implements CanActivate { - /** - * Constructor. - * - * @param {AuthService} authService - * @param {Router} router - */ - constructor(public authService: AuthService, public router: Router) {} - - /** - * Evaluate if can access the page. - * - * @param {ActivatedRouteSnapshot} next - * @param {RouterStateSnapshot} state - * @returns {Observable|Promise|booleanUrlTree} - */ - canActivate( - next: ActivatedRouteSnapshot, - state: RouterStateSnapshot - ): - | Observable - | Promise - | boolean - | UrlTree { - if (this.authService.isLoggedIn) { - return true; - } - - // Redirect to login page, preserving last route - this.router.navigate(['/login'], { queryParams: { returnTo: state.url } }); - - return false; - } -} diff --git a/client/src/app/services/auth.service.spec.ts b/client/src/app/services/auth.service.spec.ts deleted file mode 100644 index bbedab6..0000000 --- a/client/src/app/services/auth.service.spec.ts +++ /dev/null @@ -1,29 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { TestBed } from '@angular/core/testing'; - -import { AuthService } from './auth.service'; - -describe('AuthService', () => { - let service: AuthService; - - beforeEach(() => { - TestBed.configureTestingModule({}); - service = TestBed.inject(AuthService); - }); - - it('should be created', () => { - expect(service).toBeTruthy(); - }); -}); diff --git a/client/src/app/services/auth.service.ts b/client/src/app/services/auth.service.ts deleted file mode 100644 index e9e6df9..0000000 --- a/client/src/app/services/auth.service.ts +++ /dev/null @@ -1,103 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { Injectable } from '@angular/core'; -import { ActivatedRoute, Router } from '@angular/router'; - -import { environment } from 'src/environments/environment'; - -import { HttpClient } from '@angular/common/http'; -import { catchError, Observable, retry, tap, throwError } from 'rxjs'; -import { Credentials, User } from '../interfaces/user'; -import { UserService } from './user.service'; -@Injectable({ - providedIn: 'root', -}) - -/** - * Authentication service to handle all auth API requests. - */ -export class AuthService { - /** - * Constructor. - * - * @param {ActivatedRoute} route - * @param {Router} router - */ - constructor( - private route: ActivatedRoute, - private router: Router, - private http: HttpClient, - private userService: UserService - ) {} - - /** - * Login. - */ - login() { - this.route.queryParamMap.subscribe((params) => { - const returnTo = params.get('returnTo') || ''; - const clientUrl = - this.router['location']._platformLocation.location.origin; - - window.location.href = `${environment.apiUrl}/auth/login?returnTo=${returnTo}&clientUrl=${clientUrl}`; - }); - } - - /** - * Check if logged in. - * @returns {boolean} - */ - get isLoggedIn(): boolean { - return !!this.userService.currentUser; - } - - /** - * Logout. - */ - logout() { - this.userService.updateUser(undefined); - this.router.navigate(['/login']); - } - - /** - * Get access token. - */ - get accessToken() { - return this.userService.currentUser?.credentials?.accessToken ?? ''; - } - - /** - * Request access token refresh from the server. - * - * @param {number} maxRetries - * @returns {Observable} - */ - refreshAccessToken(maxRetries = 2): Observable { - const user: User = this.userService.loggedInUser; - const token = this.accessToken; - const userId = user.id; - const data = { userId, token }; - - return this.http - .post(`${environment.apiUrl}/auth/refresh`, data) - .pipe( - retry(maxRetries), - catchError((err) => { - this.logout(); - return throwError(() => err); - }), - tap((token) => this.userService.updateCredentials(token)) - ); - } -} diff --git a/client/src/app/services/rules.service.ts b/client/src/app/services/rules.service.ts deleted file mode 100644 index 1a0a1d5..0000000 --- a/client/src/app/services/rules.service.ts +++ /dev/null @@ -1,86 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; -import { environment } from 'src/environments/environment'; -import { ModelSpec } from '../interfaces/common'; -import { Comparator, Rule } from '../interfaces/rule'; -import { store } from '../store'; -import { UserService } from './user.service'; - -const COMPARATOR_LABELS: Record = { - eq: 'Equals', - gt: 'Greater than', - lt: 'Less than', -}; - -@Injectable({ providedIn: 'root' }) -/** - * Central rule management. - */ -export class RulesService { - /** - * Constructor. - * @param {HttpClient} http injected - * @param {UserService} userService injected - */ - constructor( - private readonly http: HttpClient, - private readonly userService: UserService - ) {} - - /** - * Fetches the rules for the current user. - */ - fetchRulesForCurrentUser() { - const user = this.userService.loggedInUser; - const url = `${environment.apiUrl}/rules/user/${user.id}`; - this.http.get(url).subscribe((rules) => { - store.rules.next(rules); - }); - } - - /** - * Inserts a new rule. - * @param {ModelSpec} ruleData the rule data to insert. - */ - addRule(ruleData: ModelSpec) { - const url = `${environment.apiUrl}/rules`; - this.http.post(url, ruleData).subscribe(() => { - this.fetchRulesForCurrentUser(); - }); - } - - /** - * Deletes a rule. - * @param {string} id the ID of the rule to delete - */ - deleteRule(id: string) { - const user = this.userService.loggedInUser; - const url = `${environment.apiUrl}/rules/${user.id}/${id}`; - this.http.delete(url).subscribe(() => { - // reload rules after delete. - this.fetchRulesForCurrentUser(); - }); - } - - /** - * Returns the human-readable comparator name. - * @param {Comparator} comparator the comparator - * @returns {string} the human-readable comparator name - */ - getComparatorLabel(comparator: Comparator) { - return COMPARATOR_LABELS[comparator]; - } -} diff --git a/client/src/app/services/user.service.spec.ts b/client/src/app/services/user.service.spec.ts deleted file mode 100644 index 6535cf0..0000000 --- a/client/src/app/services/user.service.spec.ts +++ /dev/null @@ -1,29 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { TestBed } from '@angular/core/testing'; - -import { UserService } from './user.service'; - -describe('UserService', () => { - let service: UserService; - - beforeEach(() => { - TestBed.configureTestingModule({}); - service = TestBed.inject(UserService); - }); - - it('should be created', () => { - expect(service).toBeTruthy(); - }); -}); diff --git a/client/src/app/services/user.service.ts b/client/src/app/services/user.service.ts deleted file mode 100644 index cb7cfff..0000000 --- a/client/src/app/services/user.service.ts +++ /dev/null @@ -1,116 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { Injectable } from '@angular/core'; -import { BehaviorSubject } from 'rxjs'; -import { Credentials, User } from '../interfaces/user'; - -@Injectable({ - providedIn: 'root', -}) - -/** - * User service to store and retrieve user. - */ -export class UserService { - localStorageUserKey: string = 'user'; - currentUser?: User; - userWatch: BehaviorSubject = new BehaviorSubject< - User | undefined - >(undefined); - - /** - * Constructor. - */ - constructor() { - this.loadFromLocalStorage(); - } - - /** - * Get user from local storage. - */ - private loadFromLocalStorage() { - if (localStorage.getItem(this.localStorageUserKey)) { - const userString = localStorage.getItem(this.localStorageUserKey); - const user = JSON.parse(userString!) as User; - this.updateUser(user); - } - } - - /** - * Get logged in user. - * - * @returns {User} - */ - get loggedInUser(): User { - if (this.currentUser) { - return this.currentUser; - } else { - throw new Error('No logged in user'); - } - } - - /** - * Update user. - * - * @param {User|undefined} user - */ - updateUser(user?: User) { - this.currentUser = user; - - if (user) { - // Write to LocalStorage - localStorage.setItem(this.localStorageUserKey, JSON.stringify(user)); - } else { - localStorage.removeItem(this.localStorageUserKey); - } - - // Propagate - this.userWatch.next(user); - } - - /** - * Get user setting. - * - * @param {string} setting - * @returns {string|number} - */ - getSetting(setting: string) { - return this.currentUser && - this.currentUser.settings && - setting in this.currentUser.settings - ? (this.currentUser.settings[setting] as string) - : ''; - } - - /** - * Set user settings. - * - * @param {Record} settings - */ - setSettings(settings: Record) { - if (this.currentUser) { - this.currentUser.settings = settings; - this.updateUser(this.currentUser); - } - } - - /** - * Set new user token. - * @param {Credentials} credentials the new user credentials - */ - updateCredentials(credentials: Credentials) { - this.loggedInUser.credentials = credentials; - this.updateUser(this.loggedInUser); - } -} diff --git a/client/src/app/store/index.ts b/client/src/app/store/index.ts deleted file mode 100644 index 1874c95..0000000 --- a/client/src/app/store/index.ts +++ /dev/null @@ -1,45 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { BehaviorSubject, ReplaySubject, Subject } from 'rxjs'; -import { AgentsMetadata } from '../interfaces/api'; -import { Rule, RuleTargetAction } from '../interfaces/rule'; - -interface SaveRequirements { - name: boolean; - source: boolean; - params: true; - condition: boolean; - target: boolean; - executionInterval: boolean; -} - -const saveRequirements: SaveRequirements = { - name: false, - source: false, - params: true, - condition: false, - target: false, - executionInterval: false, -}; - -export const store = { - rules: new BehaviorSubject([]), - agents: new ReplaySubject(1), - - saveRequirements: new BehaviorSubject(saveRequirements), - sourceSet: new BehaviorSubject(false), - ruleAdded: new Subject(), - targets: new Subject(), - sidenav: new Subject(), -}; diff --git a/client/src/assets/img/ads.png b/client/src/assets/img/ads.png deleted file mode 100644 index 19a9c914144e0769db8b7100e9e52b618c2f08a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11317 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 L=)Tpy9sWN6vSS?l diff --git a/client/src/assets/img/btn_google_signin_dark_disabled_web.png b/client/src/assets/img/btn_google_signin_dark_disabled_web.png deleted file mode 100644 index 735d17eea04ff2022721523504b4a9444fff49b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2308 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 diff --git a/client/src/assets/img/btn_google_signin_dark_normal_web.png b/client/src/assets/img/btn_google_signin_dark_normal_web.png deleted file mode 100644 index b1327b4f7b47c04368da6c4b066645453398eca5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3983 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 diff --git a/client/src/assets/img/dv360.png b/client/src/assets/img/dv360.png deleted file mode 100644 index 4e2241839ddaef430f1eed61a4ee4c94520904ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4512 zcmX9?c|4Te7r!%OjD09;VI-C8MYd>=Ld6(mNq8x1ys~d$M)pKemdGB8ELq1sqo^pO z6bfThmaJnL`|^AGy?@;2e(t&Ve9v;vx%b>B-qgf^o8u4%0D#-bP~Qyd$$uLgEA%xR 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 diff --git a/client/src/assets/img/iftta-banner.png b/client/src/assets/img/iftta-banner.png deleted file mode 100644 index c3af8cb311e22b1b376ba91b2b6b4b4e93f6b2d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36435 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 WYzBtGuYp6;2sG8-sMS5UiugY~YSq2~ diff --git a/client/src/assets/style/normalize.scss b/client/src/assets/style/normalize.scss deleted file mode 100644 index 703ed40..0000000 --- a/client/src/assets/style/normalize.scss +++ /dev/null @@ -1,364 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ - -/* Document - ========================================================================== */ - -/** - * 1. Correct the line height in all browsers. - * 2. Prevent adjustments of font size after orientation changes in iOS. - */ - -html { - line-height: 1.15; /* 1 */ - -webkit-text-size-adjust: 100%; /* 2 */ -} - -/* Sections - ========================================================================== */ - -/** - * Remove the margin in all browsers. - */ - -body { - margin: 0; -} - -/** - * Render the `main` element consistently in IE. - */ - -main { - display: block; -} - -/** - * Correct the font size and margin on `h1` elements within `section` and - * `article` contexts in Chrome, Firefox, and Safari. - */ - -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -/* Grouping content - ========================================================================== */ - -/** - * 1. Add the correct box sizing in Firefox. - * 2. Show the overflow in Edge and IE. - */ - -hr { - box-sizing: content-box; /* 1 */ - height: 0; /* 1 */ - overflow: visible; /* 2 */ -} - -/** - * 1. Correct the inheritance and scaling of font size in all browsers. - * 2. Correct the odd `em` font sizing in all browsers. - */ - -pre { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ -} - -/* Text-level semantics - ========================================================================== */ - -/** - * Remove the gray background on active links in IE 10. - */ - -a { - background-color: transparent; -} - -/** - * 1. Remove the bottom border in Chrome 57- - * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. - */ - -abbr[title] { - border-bottom: none; /* 1 */ - text-decoration: underline; /* 2 */ - text-decoration: underline dotted; /* 2 */ -} - -/** - * Add the correct font weight in Chrome, Edge, and Safari. - */ - -b, -strong { - font-weight: bolder; -} - -/** - * 1. Correct the inheritance and scaling of font size in all browsers. - * 2. Correct the odd `em` font sizing in all browsers. - */ - -code, -kbd, -samp { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ -} - -/** - * Add the correct font size in all browsers. - */ - -small { - font-size: 80%; -} - -/** - * Prevent `sub` and `sup` elements from affecting the line height in - * all browsers. - */ - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sub { - bottom: -0.25em; -} - -sup { - top: -0.5em; -} - -/* Embedded content - ========================================================================== */ - -/** - * Remove the border on images inside links in IE 10. - */ - -img { - border-style: none; -} - -/* Forms - ========================================================================== */ - -/** - * 1. Change the font styles in all browsers. - * 2. Remove the margin in Firefox and Safari. - */ - -button, -input, -optgroup, -select, -textarea { - font-family: inherit; /* 1 */ - font-size: 100%; /* 1 */ - line-height: 1.15; /* 1 */ - margin: 0; /* 2 */ -} - -/** - * Show the overflow in IE. - * 1. Show the overflow in Edge. - */ - -button, -input { - /* 1 */ - overflow: visible; -} - -/** - * Remove the inheritance of text transform in Edge, Firefox, and IE. - * 1. Remove the inheritance of text transform in Firefox. - */ - -button, -select { - /* 1 */ - text-transform: none; -} - -/** - * Correct the inability to style clickable types in iOS and Safari. - */ - -button, -[type='button'], -[type='reset'], -[type='submit'] { - -webkit-appearance: button; -} - -/** - * Remove the inner border and padding in Firefox. - */ - -button::-moz-focus-inner, -[type='button']::-moz-focus-inner, -[type='reset']::-moz-focus-inner, -[type='submit']::-moz-focus-inner { - border-style: none; - padding: 0; -} - -/** - * Restore the focus styles unset by the previous rule. - */ - -button:-moz-focusring, -[type='button']:-moz-focusring, -[type='reset']:-moz-focusring, -[type='submit']:-moz-focusring { - outline: 1px dotted ButtonText; -} - -/** - * Correct the padding in Firefox. - */ - -fieldset { - padding: 0.35em 0.75em 0.625em; -} - -/** - * 1. Correct the text wrapping in Edge and IE. - * 2. Correct the color inheritance from `fieldset` elements in IE. - * 3. Remove the padding so developers are not caught out when they zero out - * `fieldset` elements in all browsers. - */ - -legend { - box-sizing: border-box; /* 1 */ - color: inherit; /* 2 */ - display: table; /* 1 */ - max-width: 100%; /* 1 */ - padding: 0; /* 3 */ - white-space: normal; /* 1 */ -} - -/** - * Add the correct vertical alignment in Chrome, Firefox, and Opera. - */ - -progress { - vertical-align: baseline; -} - -/** - * Remove the default vertical scrollbar in IE 10+. - */ - -textarea { - overflow: auto; -} - -/** - * 1. Add the correct box sizing in IE 10. - * 2. Remove the padding in IE 10. - */ - -[type='checkbox'], -[type='radio'] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ -} - -/** - * Correct the cursor style of increment and decrement buttons in Chrome. - */ - -[type='number']::-webkit-inner-spin-button, -[type='number']::-webkit-outer-spin-button { - height: auto; -} - -/** - * 1. Correct the odd appearance in Chrome and Safari. - * 2. Correct the outline style in Safari. - */ - -[type='search'] { - -webkit-appearance: textfield; /* 1 */ - outline-offset: -2px; /* 2 */ -} - -/** - * Remove the inner padding in Chrome and Safari on macOS. - */ - -[type='search']::-webkit-search-decoration { - -webkit-appearance: none; -} - -/** - * 1. Correct the inability to style clickable types in iOS and Safari. - * 2. Change font properties to `inherit` in Safari. - */ - -::-webkit-file-upload-button { - -webkit-appearance: button; /* 1 */ - font: inherit; /* 2 */ -} - -/* Interactive - ========================================================================== */ - -/* - * Add the correct display in Edge, IE 10+, and Firefox. - */ - -details { - display: block; -} - -/* - * Add the correct display in all browsers. - */ - -summary { - display: list-item; -} - -/* Misc - ========================================================================== */ - -/** - * Add the correct display in IE 10+. - */ - -template { - display: none; -} - -/** - * Add the correct display in IE 10. - */ - -[hidden] { - display: none; -} diff --git a/client/src/assets/style/reset.scss b/client/src/assets/style/reset.scss deleted file mode 100644 index 6c3b0fb..0000000 --- a/client/src/assets/style/reset.scss +++ /dev/null @@ -1,55 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -html, -body { - height: 100%; - margin: 0; - padding: 0; -} - -button { - cursor: pointer; - background-color: transparent; - background-image: none; -} - -button, -input { - border: none; - outline: none; -} - -input::placeholder, -textarea::placeholder { - color: #9ca3af; -} - -* { - box-sizing: border-box; -} - -a { - color: inherit; - text-decoration: inherit; -} - -button, -input, -optgroup, -select, -textarea { - padding: 0; - line-height: inherit; - color: inherit; -} diff --git a/client/src/assets/style/responsive.scss b/client/src/assets/style/responsive.scss deleted file mode 100644 index 14f42cc..0000000 --- a/client/src/assets/style/responsive.scss +++ /dev/null @@ -1,177 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -/* For mobile phones: */ -[class*='col-'] { - width: 100%; -} - -@media only screen and (min-width: 600px) { - /* For tablets: */ - .col-s-1 { - width: 8.33%; - } - .col-s-2 { - width: 16.66%; - } - .col-s-3 { - width: 25%; - } - .col-s-4 { - width: 33.33%; - } - .col-s-5 { - width: 41.66%; - } - .col-s-6 { - width: 50%; - } - .col-s-7 { - width: 58.33%; - } - .col-s-8 { - width: 66.66%; - } - .col-s-9 { - width: 75%; - } - .col-s-10 { - width: 83.33%; - } - .col-s-11 { - width: 91.66%; - } - .col-s-12 { - width: 100%; - } -} - -@media only screen and (min-width: 768px) { - /* For medium desktops */ - .col-m-1 { - width: 8.33%; - } - .col-m-2 { - width: 16.66%; - } - .col-m-3 { - width: 25%; - } - .col-m-4 { - width: 33.33%; - } - .col-m-5 { - width: 41.66%; - } - .col-m-6 { - width: 50%; - } - .col-m-7 { - width: 58.33%; - } - .col-m-8 { - width: 66.66%; - } - .col-m-9 { - width: 75%; - } - .col-m-10 { - width: 83.33%; - } - .col-m-11 { - width: 91.66%; - } - .col-m-12 { - width: 100%; - } -} - -@media only screen and (min-width: 992px) { - /* For large desktops */ - .col-l-1 { - width: 8.33%; - } - .col-l-2 { - width: 16.66%; - } - .col-l-3 { - width: 25%; - } - .col-l-4 { - width: 33.33%; - } - .col-l-5 { - width: 41.66%; - } - .col-l-6 { - width: 50%; - } - .col-l-7 { - width: 58.33%; - } - .col-l-8 { - width: 66.66%; - } - .col-l-9 { - width: 75%; - } - .col-l-10 { - width: 83.33%; - } - .col-l-11 { - width: 91.66%; - } - .col-l-12 { - width: 100%; - } -} - -@media only screen and (min-width: 1200px) { - /* For extra large desktops */ - .col-xl-1 { - width: 8.33%; - } - .col-xl-2 { - width: 16.66%; - } - .col-xl-3 { - width: 25%; - } - .col-xl-4 { - width: 33.33%; - } - .col-xl-5 { - width: 41.66%; - } - .col-xl-6 { - width: 50%; - } - .col-xl-7 { - width: 58.33%; - } - .col-xl-8 { - width: 66.66%; - } - .col-xl-9 { - width: 75%; - } - .col-xl-10 { - width: 83.33%; - } - .col-xl-11 { - width: 91.66%; - } - .col-xl-12 { - width: 100%; - } -} diff --git a/client/src/environments/environment.prod.ts b/client/src/environments/environment.prod.ts deleted file mode 100644 index 4e4504b..0000000 --- a/client/src/environments/environment.prod.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -export const environment = { - production: true, - apiUrl: '/api', -}; diff --git a/client/src/environments/environment.ts b/client/src/environments/environment.ts deleted file mode 100644 index ada7eea..0000000 --- a/client/src/environments/environment.ts +++ /dev/null @@ -1,30 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -// This file can be replaced during build by using the `fileReplacements` array. -// `ng build` replaces `environment.ts` with `environment.prod.ts`. -// The list of file replacements can be found in `angular.json`. - -export const environment = { - production: false, - apiUrl: '/api', -}; - -/* - * For easier debugging in development mode, you can import the following file - * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. - * - * This import should be commented out in production mode because it will have a negative impact - * on performance if an error is thrown. - */ -// import 'zone.js/plugins/zone-error'; // Included with Angular CLI. diff --git a/client/src/favicon.ico b/client/src/favicon.ico deleted file mode 100644 index 8f14793f4d444bdcd944fc6d358b736040c42f76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15406 zcmeHNX^a#_6mF0I>JR_o;(>UhQM}?2;}H|QV~mPQj1kmCR5bBKjYh>2P(vPYT~4_?I8*w3H397 zEcf%w>T@Nz<^%OHvwMxCejJ1Qk0rBfiKI4-kkp3H{QKC9o7GSHf0%eXR`ri$4jjoG z)Up*9g~JeXovFg_di=OPwU*=!J|F(OHte&o&yEQUM5kVlJw}7S&xy^t6MK?v5}kBqi}uB5-;KPj5}kN?S)TRH zqmteClbB=AFUYIU(dYR5p86cGc>p%*#BO*4&z;N5VvoZV`?`m(%jfvK2g>yLj*8dx zWR}p6(sx#3$D{J+4!tGRM%S6N9EB;SLn0d z(7#NN^{{>>Yf{FpL?$_ckSJh-a18}6HEI^-ib?O%-OnEEA^eSyqm%P>=V_s zSG+0tYzq6iWnwMpg*xx^>x_ rajZuX?9h#`a>rC;6NtmOigz;OzWX+v~=6Ng8`t zXGe|t$NglPZItD6cK2HB2N&yoblMG)X=+e??mfA`EiIGTRf~2_Et6>-dp7#}V{`0z z!gfeLufE##uS#zJW^uOHv?#~2Y`dF^!1wbcI^|j+o|xjZ?`olMH@q%c*edl&>sU7k zZKy4gcb44VAF#K6MPr9JlLxJV1I_s&G-oWBJ7J01OGV&+VUGnzeC$drPuV<$*M#C!2}oM<$3%C`3CYHDhL0N z-Mb0;dF36*<5=?__RDx>c_lZ(Gi;_rZC_u9aVyy(XOLX|o-Z#g>)n$BVj>^p#k+WU z-jy*eOyp~PP6_tSFE3U(|E&2BsU5a27yS*sCndRh0M6sT)|eVE7RRfTSM?K|1{339 zygc#_EXTz2d{18KYAtv~^~fy*c`#3(u{%sWw>QUMTvne8j)2Kp{FE=}SmtwSjroZ% zrf0)YiB;e}*jA1y6FD8vUIg=koB>D+Z9CiJ=LIliPVBCFuJvaTt1Z9zJwA(A)iz?D zFvcl9?|vOO+9!|37%6kYrFySEp%2wI+CZOL`p_A3X8`Qylt+vdvB_~JH$(r)m!vig zL!BRKn>OkAW4a7kZET6UMs^rtAxTwbk z-{U6ts*Gb(n7=Li#ItWLd|Z8W6HUU{Dawg8a$>}w){QIcWSbIPX98o8-aJ9|7`GM7 z^Pb87u|L@Fo{ZcW`^B|^A>=9F)3^v&n2$NIUF#(ONXE_PMRr zsdWHbY&S8KT>Y+&7x`7@*>x{z9bDg|z@=w1c;y)9fQ3wBf%6RJ^O<9-+#S~SU_NBBIQs-}aiF!kQaeIf>uYt`H(}p|7zi;CVj#poh=C9T zZGwT0%t0383EHIJ4q*>}2!0h}Av$vW0Ae6Ia{PuDgW|_RwCDLy#CvJ{4E+yN*aQEz G2mS$5+OXvS diff --git a/client/src/index.html b/client/src/index.html deleted file mode 100644 index c64d008..0000000 --- a/client/src/index.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - If This Then Ad - - - - - - - - - - - diff --git a/client/src/main.ts b/client/src/main.ts deleted file mode 100644 index 86f2757..0000000 --- a/client/src/main.ts +++ /dev/null @@ -1,26 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { enableProdMode } from '@angular/core'; -import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; - -import { AppModule } from './app/app.module'; -import { environment } from './environments/environment'; - -if (environment.production) { - enableProdMode(); -} - -platformBrowserDynamic() - .bootstrapModule(AppModule) - .catch((err) => console.error(err)); diff --git a/client/src/polyfills.ts b/client/src/polyfills.ts deleted file mode 100644 index 114698c..0000000 --- a/client/src/polyfills.ts +++ /dev/null @@ -1,66 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -/** - * This file includes polyfills needed by Angular and is loaded before the app. - * You can add your own extra polyfills to this file. - * - * This file is divided into 2 sections: - * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. - * 2. Application imports. Files imported after ZoneJS that should be loaded before your main - * file. - * - * The current setup is for so-called "evergreen" browsers; the last versions of browsers that - * automatically update themselves. This includes recent versions of Safari, Chrome (including - * Opera), Edge on the desktop, and iOS and Chrome on mobile. - * - * Learn more in https://angular.io/guide/browser-support - */ - -/*************************************************************************************************** - * BROWSER POLYFILLS - */ - -/** - * By default, zone.js will patch all possible macroTask and DomEvents - * user can disable parts of macroTask/DomEvents patch by setting following flags - * because those flags need to be set before `zone.js` being loaded, and webpack - * will put import in the top of bundle, so user need to create a separate file - * in this directory (for example: zone-flags.ts), and put the following flags - * into that file, and then add the following code before importing zone.js. - * import './zone-flags'; - * - * The flags allowed in zone-flags.ts are listed here. - * - * The following flags will work for all browsers. - * - * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame - * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick - * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames - * - * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js - * with the following flag, it will bypass `zone.js` patch for IE/Edge - * - * (window as any).__Zone_enable_cross_context_check = true; - * - */ - -/*************************************************************************************************** - * Zone JS is required by default for Angular itself. - */ -import 'zone.js'; // Included with Angular CLI. - - -/*************************************************************************************************** - * APPLICATION IMPORTS - */ diff --git a/client/src/proxy.conf.json b/client/src/proxy.conf.json deleted file mode 100644 index bb84d53..0000000 --- a/client/src/proxy.conf.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "/api/*": { - "target": "http://localhost:8080", - "secure": false, - "changeOrigin": true, - "logLevel": "debug" - - } - } \ No newline at end of file diff --git a/client/src/styles.scss b/client/src/styles.scss deleted file mode 100644 index 0b51f99..0000000 --- a/client/src/styles.scss +++ /dev/null @@ -1,57 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - - -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -/* You can add global styles to this file, and also import other style files */ - -@import 'assets/style/normalize.scss'; -@import 'assets/style/reset.scss'; -@import 'assets/style/responsive.scss'; -@import '~@angular/material/prebuilt-themes/indigo-pink.css'; - -html, -body { - height: 100%; - width: 100%; -} - -body { - margin: 0; - font-family: Roboto, 'Helvetica Neue', sans-serif; -} diff --git a/client/src/test.ts b/client/src/test.ts deleted file mode 100644 index c50d0d5..0000000 --- a/client/src/test.ts +++ /dev/null @@ -1,39 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -// This file is required by karma.conf.js and loads recursively all the .spec and framework files - -import 'zone.js/testing'; -import { getTestBed } from '@angular/core/testing'; -import { - BrowserDynamicTestingModule, - platformBrowserDynamicTesting -} from '@angular/platform-browser-dynamic/testing'; - -declare const require: { - context(path: string, deep?: boolean, filter?: RegExp): { - keys(): string[]; - (id: string): T; - }; -}; - -// First, initialize the Angular testing environment. -getTestBed().initTestEnvironment( - BrowserDynamicTestingModule, - platformBrowserDynamicTesting(), -); - -// Then we find all the tests. -const context = require.context('./', true, /\.spec\.ts$/); -// And load the modules. -context.keys().map(context); diff --git a/client/tsconfig.app.json b/client/tsconfig.app.json deleted file mode 100644 index 82d91dc..0000000 --- a/client/tsconfig.app.json +++ /dev/null @@ -1,15 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "./out-tsc/app", - "types": [] - }, - "files": [ - "src/main.ts", - "src/polyfills.ts" - ], - "include": [ - "src/**/*.d.ts" - ] -} diff --git a/client/tsconfig.json b/client/tsconfig.json deleted file mode 100644 index 23ddff6..0000000 --- a/client/tsconfig.json +++ /dev/null @@ -1,32 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "compileOnSave": false, - "compilerOptions": { - "baseUrl": "./", - "outDir": "./dist/out-tsc", - "forceConsistentCasingInFileNames": true, - "strict": true, - "strictPropertyInitialization": false, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true, - "sourceMap": true, - "declaration": false, - "downlevelIteration": true, - "experimentalDecorators": true, - "moduleResolution": "node", - "importHelpers": true, - "target": "es2017", - "module": "es2020", - "lib": ["es2020", "dom"] - }, - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true, - "strictPropertyInitialization": false, - "strict": true - } -} diff --git a/client/tsconfig.spec.json b/client/tsconfig.spec.json deleted file mode 100644 index 092345b..0000000 --- a/client/tsconfig.spec.json +++ /dev/null @@ -1,18 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "./out-tsc/spec", - "types": [ - "jasmine" - ] - }, - "files": [ - "src/test.ts", - "src/polyfills.ts" - ], - "include": [ - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} diff --git a/cloudbuild.yaml b/cloudbuild.yaml deleted file mode 100644 index a46f80c..0000000 --- a/cloudbuild.yaml +++ /dev/null @@ -1,67 +0,0 @@ -# Copyright 2022 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -steps: - # Build image from source - - name: gcr.io/cloud-builders/docker - id: Build image - args: - - build - - '-f' - - 'Dockerfile' - - '-t' - - '$_GCR_HOSTNAME/$PROJECT_ID/$_SERVICE_NAME/$_IMAGE_NAME:$SHORT_SHA' - - '-t' - - '$_GCR_HOSTNAME/$PROJECT_ID/$_SERVICE_NAME/$_IMAGE_NAME:latest' - - '--cache-from' - - '$_GCR_HOSTNAME/$PROJECT_ID/$_SERVICE_NAME/$_IMAGE_NAME:latest' - - '.' - - # Push image to Google Container Registry - - name: gcr.io/cloud-builders/docker - id: Push image - args: - - push - - '$_GCR_HOSTNAME/$PROJECT_ID/$_SERVICE_NAME/$_IMAGE_NAME:$SHORT_SHA' - - # Deploy to Cloud Run - - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk:slim' - id: Deploy to cloudrun - args: - - run - - deploy - - $_SERVICE_NAME - - '--image=$_GCR_HOSTNAME/$PROJECT_ID/$_SERVICE_NAME/$_IMAGE_NAME:$SHORT_SHA' - - '--platform=managed' - - '--region=$_DEPLOY_REGION' - - '--port=$_SERVICE_PORT' - - '--quiet' - entrypoint: gcloud - -# General configuration -images: - - '$_GCR_HOSTNAME/$PROJECT_ID/$_SERVICE_NAME/$_IMAGE_NAME:$SHORT_SHA' - - '$_GCR_HOSTNAME/$PROJECT_ID/$_SERVICE_NAME/$_IMAGE_NAME:latest' -options: - substitutionOption: ALLOW_LOOSE - logging: CLOUD_LOGGING_ONLY -substitutions: - _DEPLOY_REGION: europe-west3 - _GCR_HOSTNAME: eu.gcr.io - _PLATFORM: managed - _SERVICE_NAME: iftta - _SERVICE_PORT: '8080' - _IMAGE_NAME: 'iftta-service' -tags: - - iftta-service-$SHORT_SHA diff --git a/git/pre-commit b/git/pre-commit deleted file mode 100755 index 4d996c7..0000000 --- a/git/pre-commit +++ /dev/null @@ -1,67 +0,0 @@ -#!/bin/sh -# -# Copyright 2021 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# An example hook script to verify what is about to be committed. -# Called by "git commit" with no arguments. The hook should -# exit with non-zero status after issuing an appropriate message if -# it wants to stop the commit. - -PROJECT_DIR=$(pwd) -SERVER_DIR=$PROJECT_DIR/server -CLIENT_DIR=$PROJECT_DIR/client - -$PROJECT_DIR/add-licence-headers.sh - -# Test the server side -npm run pre-commit --prefix $SERVER_DIR - -# Test the client side -#npm run test-no-browser --prefix $PROJECT_DIR/client - -# Lint client -ESLINT_CLIENT_EXIT=0 -STAGED_FILES_CLIENT=($(git diff --diff-filter=d --cached --name-only ./client | grep -E '^.*src\/.*\.(js|jsx|tsx|ts)$')) - -if [[ ${#STAGED_FILES_CLIENT[@]} > 0 ]]; then - LINT_PATHS=() - - # Remove 'client/' from all paths - # eslint will be running from within client/ - for i in "${!STAGED_FILES_CLIENT[@]}" - do - DATA=${STAGED_FILES_CLIENT[$i]} - pattern="client/" - DATA=${DATA/$pattern/} - LINT_PATHS[$i]=$DATA - done - - # Actually lint - npm run lint --prefix ./client -- "${LINT_PATHS[@]}" --fix - - # Store exit code - ESLINT_CLIENT_EXIT="$?" - - # Re-add files since they may have been fixed - git add "${STAGED_FILES_CLIENT[@]}" -fi - -# Check if everything went well -if [[ "${ESLINT_CLIENT_EXIT}" == 0 ]]; then - printf "\n\e[30m\e[42mPRE-COMMIT CHECKS PASSED\e[0m\n" -else - printf "\n\e[41mPRE-COMMIT CHECKS FAILED\e[0m\n" - exit 1 -fi \ No newline at end of file diff --git a/img/api-notation-agg.png b/img/api-notation-agg.png new file mode 100644 index 0000000000000000000000000000000000000000..6496c0cdec6b6daeccce6444988c9ed824b5618e GIT binary patch literal 69369 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 BJiq_| literal 0 HcmV?d00001 diff --git a/img/dynamic-column-notation-headers-2.png b/img/dynamic-column-notation-headers-2.png new file mode 100644 index 0000000000000000000000000000000000000000..cf70816df9e25100f8764d0d0903f8acd79ff23a GIT binary patch literal 26601 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�xiL%&d3vQ0-MsRrYwPRgtFCkPYHRxzfZK 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 literal 0 HcmV?d00001 diff --git a/img/dynamic-column-notation-result-agg-json.png b/img/dynamic-column-notation-result-agg-json.png new file mode 100644 index 0000000000000000000000000000000000000000..80c51eef84561e47a1681a379c56971a9ae3b61a GIT binary patch literal 136813 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%0AoD#R+Y6JV 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 V{j7VNiHCxJloizEi)GD%{}0eOo8$lh literal 0 HcmV?d00001 diff --git a/img/dynamic-column-notation-result-agg.png b/img/dynamic-column-notation-result-agg.png new file mode 100644 index 0000000000000000000000000000000000000000..df71baa863da53cfed338496b7049419ba023d77 GIT binary patch literal 22352 zcmZU)1y~%xwg!l6kU)UogF|q4cL?rIaCdhJ?j9V1JHcIo1rP2F?(WVG(?giNtT++^4gwe$7?Pxfh$0vmBpj$64F?1In*>EK2L|?m-&|N&UQ$>X zAn#ynVs2#&1||`fqz0?5G>Dm{6(1{LmMab44o}SLmx!tfwy&csga%0b3@O;Bi;1D# zs@@e`8BVEgj`>M}h96t+p@n`>M*qu|p6TTR zg7?>Y4sJep1B6~o(STlwP!%EFU< zd_?ju<<=YxZFKhq_~CBwT(h9eLbJ3~3eQ*UNi z+rb|XR&rse`T6j6&U26loAaE*{4xdw}>|fwAWPSr;t#(ymPpe`igR+m zz<(HWbg7T~QcKnV#~oU4Nb$>YUZEWP?=Q^qkB42+lILd!9yD4y!m9?x=UYPf-TY5T zyc*`@h#3|c9+@3~9ue-93Qolmdrn@vJFnn=a>HwDYjLOA>WE;EylXeM4`T}qYemA?ezh{%VNDWa>ywD!9c0sM zvQx1AU3l|d_Z*O}Ye-LmsBn-90D^o!c!me7rm;SKgdgBL0ci3t$$_l;kn?2wlI%Zgyzz@FFe?;-(k@VUe+B7}^BG#@>CvA+R2Bv8@(dx@ze zxZ;E0KEg9Wrp6=^QO6#wC5`vU}i7g%BBzJB2k$o?*M^-sy+#s&sf zn5yAPhAQf`vmdfAG0Jfdd-yg)GJ>buHS8(?7~lN1XHUJ?qV$R)ALLYi`m!WKk2|4jWE{ttaGw`m7@mnBO(rAyvqsstXb3(@>x*r%aw*14cA6Az zK3##TlAOY+5`XceGQP?}DbLJ8DMsmaX^M(oY1|CW%nu9n>F}AM8RSwO(4x8uY^(E>RzHk_OIw)o%Ye^ z7Mq*>?c^-zdg%Ux773UMyH3_z30dNL;^^r`LHEems(XWqFG}%G&kT{(=X(@*tjgXV7Oo%D|otk`ag?3R>pmg%OVLPDHB_@ zlegFB`ouZS!DBaVA8D7dJHK}4kl0r|tw1eSAM>!YwUfA8x3WKGHahVwZ#T+@;CXRj zEcH-(-D@W30PTorsbFF|sjQtE=$vpU!=ARJ-WX(4VWYRgyWDqDf6`8XNw80lM8N)8 zGt#UdtzSbfz|?QoYCJECuzk55p&i-ndHZ-R^RRvCapChJ;}hf30M7;E<@%k~_5Mx4 zW8tIC`SA_&_2!+*J?|C!?e6{QneR}Y@eac+gB}bAbSNY;Y@4b3FOwQsC=o=5O}z z{E^iWsNyU!q65KEI;=M~`NsJSHADy^zw%T?S0Wmsv+%r0gFmC=D}B5qb#Xe1oWJ4F zT<&dJu|M5_+(_vIN>)q8lGc%zk` zgRZ6=d&~ao{N{qBd>uktUY~atQkH#scxA5u#NC9e`xt!^atGi;` zCnNYH(nDp#YD044wrCazjzQK5krXnS(_}SRNuezio-(@3&3brrs|tRfBI(U&rUUpd z@X>Gw>EmHVJ47)=2@6SOIXP4eOYJNMSX#{^ig;;}>0Ye4_%gZMorCuyo0$nljK-F^ z5L1&F%bXkTkDzNkcfOA-u%3WG3eJ+FAl@{2RT%%gk;HlHw(tnM4m{RpxL*&_0 zAMO|4BGoh0mvqX0!KS;q)mh?FJF!zUn%w}`u)K^@Q{ORETIz*suQky?v4q~(_}YJ0 z;StguU4yUZis0&U8on~4daR(+zGQb>gHtD_IMqsFJzmi6?}=-PZ_zlrKb>?8`AGVh zbt(t+eHOU$pAC!*tPi0hV@D4MxtH)3~UFJy6H4Pvcl^JFLF+i)}5RhY`d z7^sV(<(B2_Si94gwjb_-p9t$n(4Zi!m$hnl{Bl1%)9|BVY-+t|JPV%Bu{3jG)nRt` zXu?rYMOT&yi|0Y`%$@>@=TZAhUT_CqH;5X zI7eLNtRvUtb1AkMb&}qeK5nzU;^Ex7ceBgwc!GA4ysFfx<^w$QnIUZOopx?@CGF2$)evWuhRsfDF0}WV3&!MC1ao#H@=T?(K{FnvVAmTgv zXB_Oc@XvS#fA6y+Vt#4m+U||sAitMF^zzl)b49qZx}=GW4A>V?8x9N#90v><)B*>c zeBikMZHs|Zfnc$ z|ECQW4WfYwDhW$Ug04!24#vhdj%Kz_Ni^WjpbmID2@OXuFif(y6I@b}^bCYQYp$&B zq%QN7%h1-E?wgUVfiaz%wcQ&I7>^qlsA+BN^bO!e(RM~00001wgOLfBqKMdk*gsoSdBW3{3P)Othd8w2tmJPT$;UZ5&Ddf&34Sh_R!ggSnlPxvdT04fmUYt+Nv^ zG4Y$A|9<}IY3yeHzmjYm|6>-&K>9ZdJtG|h{eQ7RtUPbMT=M2_##S04=GGvefn@M8 zvM}+ykN^Ks{#WAv;Z*-$PIh*-|I7J*DF0th6-Q$SVOwjENGHDk4cC8||1a@Bj6C#j zmj545{B!erFUZe)2t4%vjTs-pT#6MavB2=mMdXx0*SGfDM;vrg{^ts66Dm=4OC5u* zgpwkH%5LCCnec8ZeG3D?Sg3d~G#5Di-xFPo}L@mph}}g7X4kQ2(z(;G=}UK$j;N1mOQ304PP-Vj0rjU)f%Cpfnac?xZqSxM5yt!yK%a2OvMBc z2BrYi(h&A6h&S*gasV_tlu&^JG1wa!3>@p7uD!N~_6Fw`=l5wD6;5{qzZd>ZL$qwa zd2G1vz2nmPAdLZ%a1z}}{;{Ok(MADpvRTpJWXq4PopZdQg(kmqPoRD0e+T!sgX$d< z0DRB;?)hfd8WDt|oiMvZ8R$V zyJj0nkZyEuswv05gJVF!?*4Pq$B%EqQ9sggK!6PKzeA4=z=a@sargiH<`+Lg_|Qy$ zfiuGsVj0l*4$?Qf1L$k9!rn(Wy=#toTQ2Y(2msT&Y9jrJmH*=MMNHu61C&r-Q#b3I z@ZP9*;r7E2JfGhfyky?U0adlwVUQq0(BGZ@lvpN#_%_-t?o6WLB zEzmo~!O?O5r_ZzY${H~oDf7F-2A?qR0LPbDG&zhYF=3QsD9f*4nKP}fA~x%AP;C+d z2sUs~^gGBKpKKxKfNms7iB^RZC{cyXo;OZWW1fyXf9D7K6?exn_kW2Gw6t`KqDq*& zyE^`!_Dpb*-Fo%wKs&$KPMMli3loprC*Z8=Q1*{9lkA=}4?6 z(EJ2KlkuMX{r)*~6iS>A0Or3I_*Dc=2<<(Xq{Pb-1`w!lk{S0B9wTsX0S(1ggxZ1z z_38eB?#(TIS3+Lp`$rpMbUy)!t!3fmcA@v!s5wBLhr)vt`=KuaARv1Wzc@48L^w65 zuW4hT$NS$nIi^p8a3EE>($`Gili-dsC9c5?UH~8>jr=0eMGkO*f#@~~AR$Ec6F3tj zCx$0_j~pu6M;lT`5Eki}7b&mFd#3k(pn|x700+5$3t~fF<=xieFTdf~<3Mnv4ktt> zxkqe0(M*}zRB@}g0+7#Jdy~m|ktL16 z9^!g$BCtR5C9e!u8_M74T`i(iAOv9{K16p&YB;IJySVDuH83a|h;doB=t8+{Sx8vq zpWI^6b(M#(c>_;zm~`3_Js~JXmchtVw(Fo&7I>dTeskSwPyke~q)drO!T0=u{2(hR z@bT_0L2l0I$&t4F>KCVL4YxmK9-l zH2=#lFe3wx%j1gD8rZ>Wmz9<#wV91A?(Xh>0>1VIj+FC#x=6kd-_hP%!9D0P0b*>B=;#SU~tHo8RenwnC5!zoHpiJ!huQVImdsWHKvpRv5l&Ke^ZL4GS3 zR_~(bzuG~)mv~g}_Zep}@QKL(t&k?Yr$DY0BZ=KxWt7nTHz98@1b%}AqW!BrVabl6 z^l$Zr6y_Z~EKVtO#-1mRU&O)*b{3D4=-(3n92FLzS z_?LI#LS%s7)bC!QcwfOv6S%UV-@pfj-`IsNwm20*!eZCnxh2jbMXuiSKkq%9ZY+VQ zv~OlJylbu>-_7}kw|Xw0vu zmTzEZTp+V0=}`+YPf72o_Hn4FoZJO_nzmNNac?JQpT)~fUpcA>SVzL2<`mUVcqF77 zd~NSfr#T`JX7r33x4Du3GF?+>rI6Q`80LNDEO0yDJD7FlIrJrOinr);t3jMU*6+f*oh^QjD?LQb10 zk=)JjkXpNHLby9tY2E+xYttc}?)a~tMIlVjqnI~6;*2XvIyQYX-Qz-8XTfv9z?QQ2 zVN|hLxN{mRtfC!7t3aq)vtb8m5^dw?*_Ky#FmK)Q<64!;Wj$X-ZHbSG=GsjqWWiPU z1Mf!Sm2H2Ex+v_xw0N_{oZuJLo1NY;^y%DhchwHY;+X+$i!1 zi~G|Zg5=IN@uIw1(^2Gqq#of1Iw$?bu?3nqf;=fW#!bqXWd@Xe&RwKNl@I1BeG-3# zW;VJlB*{}T9K*L#R}nP0UGgo~-By$Qc{x5*I(EAC_>;j3oXF}C$3KB}wUQ_yU=}ej zjn@URJRPb_qYRI9^^}G zNN2sK3PUC#4(w}sE$&3sn8iouzEf%A{F6t0l6Hn-eAX&0W-&(DBYgtBwjeS3`EO(! zZOdsa$E6U58A$R8;wkF858YQp?#PTpw?4Ps9v(N2t??vtkM*NDgDI|X89uIOl=a@F z5;o8`mZwJ|*GvHz1!^6OvaaooGxo1}hf7L=aNm|4HxxB5D`?pofGabO(6uCtbQJ&M zn7=If-C>C=0y3r2!w`B@$5f4nuc;E>*;19;?i7)%oIazj|Dx2FdA9Eh$6dJ*;q%p~ zbKRvt_0JN1gNrq#yiz9uN?zF>pmqUNOr|P)W6LDj_|)zC-Qh{;C5Lv#?{;*pTm0Oy z%@i$#y}Poe8P}-{Q6JZT2GOu`y+f-+21`t(tGWsW|hiZcE_Fk9N^kAt&*1 zE049dn(JPf zt*sW>J*+<}wyKTu9=mx`SzJ6S-Epj>ZzqeMEXks+(oe&Y-!fMRlls#4yX>wxvkTZC z@2^|)hCXe%W@=>nyyhtl1DL1}Hw3CaiIAXr)PF5X?LioPbU9AP?SZ+J0Gc@Un9KCEFxv9HlvsHEux01lyKVkuI=w)9B|YPU z7wuaw`rA#uiGwU%pg2;8u^L9U8LMnXN!tANW6_;;VvXj^l77s~ z8rUw9t+-Aa3^Z>xp-Pn5Zil)Ewd(@!yt75&-(7YLdBYjQoq8mQb))F-%q*u>&(XnO zSM;~>p&%66JW<7-J@KEPJ8!Dds2w8%7v}0pf)A5gl;QO3Y}H@u}2KOjeJyck(~N|ldt9_OPZr~ zF3upTRVmJGcE!~r%5mK1qr3eGM>DgOeq>)=PJaQ8RP^-^NHJKrT(r&55Uz5S@|!Zo zmP>#@*$OpjSt>mKVTDL!w+!Q#slMpHFRXQ}nU#@$=405WfS5}wff&c49Iu3;bw;>Q z0gxwy2}5vD$ObdVLDBatJU&m!sbn@W;b8)6;X`VTpA>Hf8J8{qa8N{XcaL`4vcySC zxefuls@8KmfQ;PW^r5FxyMMlU(4LWZNt%^UR%(P9?I7o8Xf*2`VU1oF1c}>wwP5tt zG#Ia^tYT74byDuNZ5nbD{T)`YWM{vz?i9g(TuU%VNj+-OeY1&5B5PLX(if1A|HGB583vukEF0csH+*qYR5!1+lfavS zB?%eXuPWhth^(@nd1(L-lL)TFL#7X#o~$43?xO?!2frSLP}DalCJkNapUq!@))3Vm z_vqrvEJI~A84l~b->0Shx-IwHF#*(3HLQQW7L_~gewScI;yG8#X2Bl%Yo&@VhiNk} z-DtTvd?$MEnBCU3shNTH6~&b?$t*$nhg{RILp-2y=^3!?R>Dtuw@^b_TBe0XOHpW4 zaP8_-nPd--LU|Al$tz@E@PJV|y;(6QTq_D*0Y)qGU-n07^K6TPbt&cNNM(#@YrpRl zrwdVhCBYQ2`{|)vU%WkM@^gu7%Uzsa+nt>)S$m5yXH?Kzj7C~};|yCB z>Ty1mxn?}?vX984U)Kz^d2Z-tb?-hrcAs*LyHhHh3aQQD4+6vZG{UB?X4rvKbFC=Q zWkCsE{4OD4EEKmaC%0uCQ4Th@?rAA;muyJ98BgtFG^JVd)L50)s6@^UlhI7?&}ncPhQmt#s^X4#}Rm4r_(iP-)K&V@d&j7&`}R;`v>!E;kj= z*NhWfj&F0O9OkmsUaJm zhQ(tVhMVgaU-WedQ%<`dnp}eVF{N^2SwSY&q|xT7H|B_1lY()od>lNEfs?O|15OQ$ zlUHL%l|}I;ar4vAY8cS$W__agR)3{tV4^$_xKkAnJUJW}B3cswK5`_Wh5S8=mbPs^k#k@(haoEEb&VCI;oo`nq!pHFh#Sm`P!jJN2kJ(a}DC4@jx_= z@x&qXb{xe*a_ZBeT|#2>!);qy=o79ran1L0MAor%elu^TUsR|~@g6|flkpTgw~^fy zi;*I_{*jowD(|$3sG_CKuQIYcgPtK4_Xl^8wFN-y3rfVc(_t)<@kdN}AjMZLxSVUf9{r82bhsupVc^8tZ zE?p|nXi%uZ%`5fK8s((+Vh~+n@Jn8^UwE>!UQgN5?t&cS={mWYLmH6ko}P482(M3V zY4{xg6=)7)kF~n$CSka2e``aWa}G_tj?GdHU6;LICylL>a(=1hZX9k~@30#&F+xKW z2@?*NfPQE~;OgZO#v0P=RF*<9F(UYP${_s6=p!6u<8@<~yY|X9+il0o$@8^wKc#f} z-E%g_*))^z=aHecfb9Ar*;0SMMtO+t42rIARqeG$cjj4EUccBh;;k>kms+`oyu%1j zxy^vo*@sBP3(Dm(VgvG8Q|FcOR`Y zd$(*6pkDe3(mGig*cD^hmjJ8%@gxr8*T&jYN;v*+so(JR?9}WeD%*G2L{N!ZpIZdhFaxsN zIs!0l>6{%8nr<$qOqZNWUXmWZaQ0?a`@k4Qi>t;CPV#L8Z#LMYG1BY4 z3uW#&mwHv5esy0>$_Q8%W~Br;yTmn}sa8$h5OUbB=vM8UDcvobLo6$=uB0iKvHi3( zeA%xEIOCW>3309QFpgINs8`oR-V-R;z~-L0nz9`!H!Sb`8pKMj%?U7qXGeP$p>?Iy z68#c*F>1#NT-_7hCi-F8h(L!+^X+xL2Ps;NXNo+Wdo>-%rnkgcnx4mGlg$5$I}xWD zw8v=j+Lr1QpmzM~k@}78!$Rdz9^%sU&lKND!E2iNQLTxNB|Hm`ms}j%qj{*9yG+fq z+9w3Hj8VHS9_@^;{(w`cMuD4}WlNks#l!bhCjUtdh zk7|`N&CyC`3#82__1+^;zc+9%A-^n?XV?e0i^f3~P~aK1-ak+b#nc(3VaQkN>%{BP zSKr(RAX(@bRXoN$ALuZL5u*~QAY99(32i&sf&TykqWFNC2M_D}5bK*Vo=JC_1FPjx zh}kEjQ|2=#dC@6aczY1tRtiS!%V`-YnU%p2_;gAdGb!;bmlTTr`VA)b9X>7zwTBCz zcx@^+;|W&NF?ejkY>Q@xlSiL82zjdDS1LU+e_O{PKsAQdXN2J67EYOJxk=zPM!~XI zUh#QKa&wX?0sbIWO3an1(M-QUOJYJFuMxI(r=t)nW5~Z?4NV>JQ1EK)`l(G$H&NKNqqWbW2)7~p22c&W zot>A4cFaL3o9)vYgQFX^?BMs&>HBl+*$9@+BhaklGj3}y#i{8BYGRKt8L` zqkm2I^*(EX1I^m_Z(WZ`AWGvM7LVcW+IcNjX@S4+vk5XvCKX;|MkX{Hosw$lDvUQS zL-YK^9g8^a#Hb_rZ|mG4nsX9}?m7~$>>ytkF(l2p!G*Q!UeVG0#Y!2{P=T1{RsCLe z;*x~wR{1B5@2qoTAF8$JPA{kJlwYhv?+;Npt^Bp}$R5K?5HTo_sd4SEENd6O{DGgL zZrZtX^FCI)EJz853h7pLAMYakRs@u~|$iaYxjgKd@ zI9avMEMo)#=R!+XW@@RXf+7Sh%@epiSy*FX{nTC*(aoJzqtqA@KS$6@e(=w;c}bh? z&urdFd4Ah=PCn1%7#bD7ysA89abyTG2tPj#jJNx)!iW!ZwoX9*uBh!Oq!M+Zu2>c7 z+Dy`V9_1VnKOKu!1vJs(7KT{fwAp2hN{V~Q07rE3YYT?TkASlz>0&9Dtr$Eb`)hHV zPN@gqCi?a|RZc~8+dq`1CjZpD2JNR=DSG@%5nX?Gx%mH%9Wd7AFb~R`@tHunpG6sJ zhKJJmkV@;3VKTOft%e2Fa&RwhWAkHO``foE`c`#Eg5}7HRpR{}JwowvW*6?AUlq`c zv5bzg{^Bqddj;H3KeA)cg*`Dz1M$ zcyYs6?dop%>c%3i@_H7yP}@<;4V|*hW}P&qjMBriLkM^l4-?LV zOb+elcgoUUR`ZS9eyvu)RA(^e&~X<^RI1@9`|=E@{CSIpaV%d3=m#t7D+g1Y7L~uT zDN;D7Re~xw6%rw-PwVDk0CBgOK$DkkNCLxyCXg`;4WCR7+;CF2o8#=N=6cnZaYDXL!43cD@ zs7T=OkAmR+tI6Q~9~)aK?FUodyD*42N&q|RS(B^Jq0x>RqNb}|%uDI&F{Zxw`*kxwiu2r3Nw>Il`Gtfz{2`bE}1D}>1^|W`)j{fc%r1Hb`0Y}E` zIgQb57w8q+=K||iEgQ4+9Z%GXjf2U)dfU>`SHz$)^ua$amG7|cMMVDC5D9Kp-dWk% z{k}1tknd?JOu9guqVW`Q-mW!+^yGqk+j6#eQ`1Y<8rFviN-`Hw(7s4pthAqnoyajW zEt^3)UEeYsZptN<_nXalyk+4^FN1hbg*$pe>x`% zyW33qt0>@!AN0oj^;Pu9mk#vy{OIjf`Ee#}28QUx03xY$EFNhQ87}gtbNR@OknjwL zECRrRf9Pj<#%IO|1F_ye-~p5rIRHRbcn(AW9w6RvjMH@9caCPJst7pJR@Z9VW6PJl zlDf~r3rtm;nbBEEFr72pEr=gyvpAPMVEdL3ZLP>hDASym%a;;J;iD}LxqFnL)KcRi z_@MPX`H+F4oBbiKV7Ly^+kuYliFkQ zpxxop?JSMm$o}C zrQ}}NS}G^PJk98I$R0WBGhdaGn6{s7Leud9or^_fs4)tzAEPIr32A2v)V?IAU@kAI zXAgJh0V@iLeDPwHJQ`FqJl1|nJ!m605b(&pE_uc7ly(By&Vle@laIe%iv?-RFkQ!B zM;3*~U+Q!QuA6IkoGmp4vtiG*>Yf>NZUzxD8x}d;&28rDTKLb7zdTrV3*xgM6@Hm6 zw4w4oan{$f)NS-oE^rgftOJgWUTx5GU)@7uB`M`wS0*ATg2Th4#m(0oi&Sz7Z zmc3;IP;^Xecm%BZ^eTGN)W+n1%c}y};#?Bg4B0LOvgjBWOG!LMvPFu`>^s9$gN`=5 zULQwSGx`%x_lG;@@@IS0_MOJHb(3x6$J-XVjJe94D}=7@N2$i{S4k*JW?Lhi@CeI& za)^>B6UX5nuVRj`{<>;8J(a1c<@oBTXNl3w3-WfXl=s~0J3Ss;-Q{1`S;$GiSo_w& zXBzW~s705%*PQDwp4K}kG}5qGS`Op=IUY$_+PPdae2E%gafscq;uGk!;W>I}ms%W+ zVJQqS-FB9>#jj5!uizwCU};ve=BoO=Fm{he)>_5tBfeuBj6TnGJ$4yBfm>mT_Ue)D zRqe+{2=@$=ygcVOlzIG0H>x_v^{k)2LDtWL5? zoBu^>S|Q4HXR3R1b(DN(s?dhfLa8WmHdkBM!^+2bqb6`Qj21RpDGwzXO0`?s)Gjyz zhR$wq#4|lPC)jvuRXExd;TE^1;cFaEU3rL>t36jIEw+c~!NqCwQlczeJ+G2fwrJ<- zip03#Wc6SUi_vyN4jjQ$iA_FwaXfEJ&1Z}!h2Nc^gOLyykvi1*a^EKXCrhtm?mG8 zTS!bG)?a^C2caHmR2{mxd}ufpk90UWKjeB+3GQALcB^v>n=|4R`*6&jqtAde z##qV;3fX7Br1ET>E0u!ZhFWxyO_HxiK%HmTm=LZo zSy=bB*inpd`<4jSOJhX;U`vA%be5VHSaa#S#m8ykYPV`8kiq91ofS`$f2oaJt@VrC zxg4iyC!YDmJ9}m1+&R%C1k%dZi-WIy#i*wI-s530Mi-GzGM=d6Tqr@lJEF zAwlu`_tQUa&md6u*^kWRv98~wIZ1BU5$uT|eJ8qXn8*W$lwXOfoVs5Q_31#|=wV?N zsZ~`HQF`6F*akDie`xnn&+{0+8K!!E>>sk&8sv>HAgKrhKz<88@a|mQ^KPv1$g0Un zohkT*Zi)+6Rg!hmsv_5D)!@H&9cjpjTDYPSa*#qx+{gVm;~Cw8v!ToDU-@BHGNdYb zqLDg=D|d$y7j`~eL=4qOw>9R4&7mS;;E<3y9_cZr`M~%lxSujTuE z<9Vd-BHL`8wzef>xqM=~v2B4gxO7#z(`02FV_t-t)*psgPY4Ok-=oC!!(~uCmKKa#6|mNIUl-F#;BUtdi{yO-UW# z@!6PUnm$x~Re)o*u8H1cLTz~|fogY9xvu8AeLA(kVFMnoIw(om^+c|a{<|9^rN8QU^>@3VC4tou+TVuRwST)rwNC}FSJPk4TSc{p^^ROF?zcOs?^o{EuWSZMBm|*XmFWg^Rq;M<=xIL#K zIL$$0n*u)AswGvHDNU9~UwT?RX8)C#o?%6p#5xZ2L>Yx3$gT^1;dSkFA!OQo`T)iD zRMye{_iJg)_Cv#Zye5ykb{(N(gYoE6s>DEe*4%IZxg7dY`51tle9L-uGp!^7*&7JTFg`E4W>RU zWJ<<8Asni&y}+IuLoZS+`JGO5E7Z}!iAH>Vz66U6mp8LF%o`kW>0FOEF-&lbQfoyJ zN29q$Q{#+t*rUEkD)=;dc+BM$P*@y|O0fTGzCtuQ_w};gVd41_J4J_?XLd7(s}Gbw z6w14oLoIF8O+9w9bHT{`CF#%6HPnjoo7p;S<580wTb884RcFrDDOSi4F3iq}TkB)x z5wNr_&UTl!Ru4K<)Axr-bnIMX2{SrTBICVV23xyR)+o>}7K)LpFVZsKcCQ%tSlwxp zD1XE#CVEO{Dh3t%AFT5fE=M$d?6A01(Cj#@zF6Xt=~bMXwg9{sBts&#HE3s6}FMtNK3fHOG(6<5-7Uc%(yz_-$UCy?&DH zrC_)a$-D(=0bhG*)|M8NKLZKRs|Ol<7Y2Z8urlthWB$(b^?tfO{TN-ZJTcU?qA55C zpmfSP^ z-sTWbdeW|!+0+G!j*al>>8xLPS+lk^%`JncPsVZSbsUayQ{QLfwXs_E#9N4QTze&6UPuvgu1EbDqQg=-&vKE@voH&EZyxt`2=aJP#S4 z@$~t!QAszX6ATzTtK~I)_zpV*1vHI>@9@fNt5D*b#=_y7#v^ZUU6y#&zrpk{kuv*9 zJy5kb5i46pMMtH&dA&b8#C7>$9&Nk-yjYZbf7O=F9@CV0g&y;i<11}Qc`T*r_}n)9 zBy4o%PakIXX7Xr<0FXsXq5;s;^S=3%>voA_YUncRsK4Tr_D7*xkQ-viZ>zP-$>Y+{ z>oh`9<~_*VH@XtEl7Eej0DVKX6vh4G?|ajD5RLnnoE5xe>AMOYq5K#LOu(_{ zn7vXGA_A^ik&=>mPFnHhbj%Wmx~-v2g=~rn^?C*cS3pBZJzk57hd!2BrqNNY|t zf4CIO^~wD;pFD!Um|O*gom}NoV)k$P0cCdY)4@Wfyx5wen(!47>)h5pv!e{tlEB*I zdhSipi*^t~NnGT&%Z4&Z&s@)4Hy6&PHjhQ-=-z%Cs56oJl*;n4J`OF=_G=t5jt5wF z4?Dt2f&|r(Y`ryn?f&0%y%DjWMZ9b&xSn^+3&k?8=9XbAiB1em8^skAQyj zy{^J2BbpUtz%XtJ*LbC3rs;Wuq!fmvCF#St?@Q73w6E$PnFx)i<>suD4;u!Msysw2*ygOk*{5$aZZ3qQgsb@uDsu`hRwjOp=vGMx;SDKeeBJfcj} zjoozEQ@`z70M4S^G~|~P%;Y|7)$M$zU$V{EYzFsID1cz`eLSxYuHEk(g~%^t9oD{h ztYAWo@L!t&Y+tx1z(iXEevsgqQ%OGiEtfG$xcyyaL1p_w{mj$TM+S;on12^c+FU8( z(FUWf7Kh%L?G0Lfh(GFdx-kMthf6H#*4N058vGaJY^`Mj>>NgkHq_-1J z>oTjqD$_&rZwa1Ts2>R-WXpK%62bm}>$62i+ri?_kmU&CU#U5(K<*Dfsq@REn!pd= z^%7h4Tj^(|6x*@bzelp6-Uaxe4>+{?cUb`%Q-#vT;^Ow}Vtcn5Qcm<&{{D0TpDX2d zpj}NbtAQTu&gsw5SPj<^FTT(Ddtin(0MkXdGB2Ydvg;dM~qDjgbinYHUd*>de?#;g_qQe4)Oe&1}jQ7!Z%r2iC>3hy5jUqa2n!Leb8IhNwDbD0uR z;kw)?)aXfxY5kJ2@;C{qCe*INyR-sFuw75$7kQ_(qY7%Y&zDn6gF$8Cl2I^ zF)jS?L;!77SNo(UQ$3X=9Na*Ufj5^dhy783jE%Fic}#d%VKT%4%a#NI%^p%FpWzw; zJ`pgWO0*BhEUV4-mzCq&FU7JM?ARX0C7L#OiiVQ* zl_AaL+}WPiJOjPjGVxPqM%#p{$GP2?LWp^Gcb69RqXhjH>3IE1A5{9UgQa;w>|r;J zuJ^(0tv9R7t3{0gks2)#FRV6sl~oIuRgh7TFN`R6Kogvofy(NXFxpB2tfYcU-!Fs> z8D#7={OO&-+baYn-|WwM(9XBAsV9Nc;Vim`$)2=i1N;Hvn#%bmLs8vN(E>D}y<==4f*&}-Hfw!M@$Gkm9T53URG)6=FMP2 zKl-Cv+6mRoWNzH22xXt^m#O}Nl&3~6z|S6#Z6jnMVi7Draw)m=f-wZ}GIfBG?sRzTz{oy`I;wuXdTSHFE|InPty2XY& z;5{=reEMozb?9u6`n*%GvX>!b+MF!M27Cr^HVNE!H!|(ir`~I0DN^WW3g2A(&7i>H z93xraC9g!j9M}OqhRn^$x9_bVw!*H!>aoZBcbU6win;66uZ7-^ey{t%;yRQyIzD5= zhc@=;wnQ3tFiIk_Jd52-S;r9Su5*&)QzvSi(rwT`;E1POl;cVa0&sRe-@Tq5zl)Bk zxSgLj$b1B~i;!~KOjV)UUJW?tHIL6#JDMSA9yjk+k=QF(7rPf+_X9>@X zzJ<>`>g=|EtXRMOw9PD+7R%QqYVg=nbYJY(9s{B1WMgFVnjQ~X?${`PBv0Giaw-eg z*+5dbeRli%+2BMsE4$#t_&!Yrpw>F`RF9&mG5VFj=()b=nT{Bxx*e`({pZ)GjLH#3#`- zP5rIrepR$`3TtO>vN_51VTfZTcOf5})j)VFqfCn0aw;GZ%Qa{943>Jewq zi>F1~VWW07CbE67M9$c)oyD~(bJ;spf4V%|;6-`mE0Qml+*;S&M{W(ycHn5#SAW`s zMarV$Iuz;K2*G%hgIr8l28g)2jV1}d5Z4~ zHjGY}u57KoihF&jQ)Y~eBxU+NuUj#O_!;m+Yo5Dz)&^A^D!TCUuG+$~rz%i^y~+*K zVrCXY<4Al);nA4gBA>Y-miDacVwsC-yxa*Pix3RFwNs{U2KJGIS*%X`W87=ix{=U2 zr|S7zI?MA(|CCl;rsgd#`z$MeP&w@YeN)E~_Ent_-*oM#!FRt_R;EmSgcEftZL**d)Cfc%4CCNUHY-~Gfn>b zYV+e|d09?5F%W;d5pvwEs+%?MYOWf{Y$x$TCMDp3tgO2AkYxF!W|ismp@}~dj;@1j zz7$!h%=u~o>lh(kj3Bf!cwRgD1!=Wf94E-Cn-JFLIW|GORY&ctP>r0PE{M5NQxfIo z+WSTiN>X4_fGM%d9`0md%EMyd&J6a)zLpy1msmx8;4u}NwTkwiP_PaZ(vYi^<&$eIz3AxK+S;ohX>-P0&;ml@x2G)dkHejY=HQ-12nd2JB^+I#ixOzyA;AsJP(R9 z1wk~IDFzaS!jT&gJ#sS=PvAEPyEg|6T~tI;Ut4%Ah?Inb-Ifs2N>qfA1RyH+$FHmS^4xr-ad+8LB3$z?I(YSSA3%JoD;G>1ugKz& zL=nHeF*S%g@uH&1dlsdkJ{b_$=eoH#R4jY_Lmy3HrNF+%t61DHAJmy=fRQZBL3lj6<-ng=8saa~D)91%EpLRE>H?7CkZ6VdzlT7r@1?M|z z6h)|{J(C?-S_i%hRP4HTi2ysR_^> z^HU@)r_65`Vsk>CqC;p_lBjs@u6M4z53GMQ7aGJ1xMuIHwaZ&npc{nJ$3u2E&9;`u zsOw}Mzn;?Mp!u=7>dpn=v;|gi=m%<~H?TC3&^IGV-0Gd8TdAc6UbX?F%m`P1qqD;% z=Zbu^eTURS_xx?GMR51}%Q8`t1OJ3*ibEaw-Z0_jHvpjvfxqVP11iD4J+fyqv4mCQ zyq0{dA=?CKG`++koEP|YC|ZFVU2A*Ag@m=sGyHNdc{F>X+O8|LCR-ob3t<1oQXKv-mn1TIAeCV#}=R3{- z*3|c+MMFKNlb?LJH!^=Vno~FhLvEmZJAyw9N@sI3zTeTE4_awRFNspL82USYUs-Uu z8)|-zQo@oY5J;2p-Pxe3$9vs0o<{Rdr{uTvj3DurlI3K8I-OlI`q&&$(}ErL9HeZa zO;^)}=c8~ctLK49Jap26>|Z%85=JeU?UY(Bd+hT>jal;s`Ld*Ry7cQazDvW?(uCPH zDI06DnGcHea@$^BPNU}(J*+rsjt9u~Mt)4MV!P99(EOEqfXP4|F<8!2lvH`1`D5=< zAE&T7(K?WHnptdEJ(ISszQ56HN^4lfU+g-C(>TpB39LPEnOi6u(+9z+=(!&AJ zLt7Y-pS&ek|4TP}zxrorY{vMNBr{fBgip%ODl~d%p|vsp!gJ_y?pZv@Z3IlGGA(Y$ zI-%cmasLik6u)Wbq4vt1a+HO(M6mQ#OJUVcCwq?|?zKd5c&oRcZ=g(Xv&{z`O|F`s ze&-0+(|ZH~mXLZWJV-$g<0-DuVBD{HwiF!v#(Z`f2X)T& zv?@089UTph1MNAo*#t1V>^DsJc5A8$v#Fo!;zf1P3y}WAdJ^lxA*mYzJEEb#9VaCE zlqOJUG}YAFAfDGVVHfNKR_jHTobjb% zwjs#X>%jwc!mu<9!6fl0|A;*D#KRM8@D8=j{7e|4Q>o- z;?La6#K{ulKtX6sUyP*Lb1n77o3*aJuZmVKL;U*qlVEg6c`-&fQ~BRcxpn91dp?G1|ep4sLS6Sh>Hqzu?ZQJ(Bkl((jVNe-8TqA}GO> zeIO`~VYdZYWA2KE?N#>sjlTF&+cMs>=QvZ zbc)MRx|B(f9?In(iLiTnyZbZWjk0!gT#Rw*=@;ashnfLvUEX9Z!|nB1KYfRwrT6*P z?jE0>$~hQINlBIeb}=OcuU(oSsjheu44n92S^L11T$ZiwgOCW%CT1#QYnLx5wO%W% z9uJJ|3mi?!POa1pZVJ8r{?3m%LeTPR>?^<^X?OzBAI;<;6bz54kd)Wh)Yyc6yKjX# zn=3y>k9+B8c~eM7?+m|_l10}KN)wr!j{@9<}bmhF8` zeI@^TV{nakxxFnFa38skkDp2LiuFm**`@$d+3QG(eTylV7ouDF#D!l;35rv@6gP&e|6se|Tx-WN*3`NhJ%v-D4jnRn z2p&m70>|sGolRP@)t=zb$Ig6zK6{O%`>lHGVl*d5P<=fvCA(95_UqSfqHYWjxx=FP z83BaFzyMov_v10@Xgf0LI3Krz@Ta}=&j)-c=!cN%{Fnk%iQ(znoB$rr((wqNFr_2Q zW{RibOL<|pd-4W*o%A-p4sh7V;XUGM`OL8w7ug)-i$zz4Bx0I+gub6*WwMVurgj(H z4Z=_oJ>02k>D3hmgE?)c#ZURxE?)c6mPJS)Vt$3tf2?P9qE4u?uDk#B^dMA0s(NdT5=pE9Bt=>Z=$G_({d4C$<1)chVFT4EU!+WPw9M zfL&Y#0k>6E>l9J~xJAO1!1jo@x`*k_86pM`(eoLYh6V+^&4+>cjMQ&WGf@2Mf%w%# z0ad`uCs`bbw;-He25IP3ya(d@y)WFOi*HT`^O;6G3}lAGlNiAF+~N2#a49mubcl3i zp2$nbJVgXd#wY}Af(8qao6Q`&p5fyDK|d2GLgpaxmDvfu3KG%Zfawh8$-hMOKziaE zty7#O!ji`h&If39a78TAze;R|MG=|*eFVNRQf2zfg?<)`R2=6x!vOp)>7(?@buqaA E0Ub59P5=M^ literal 0 HcmV?d00001 diff --git a/img/dynamic-column-notation-result-json.png b/img/dynamic-column-notation-result-json.png new file mode 100644 index 0000000000000000000000000000000000000000..2dcceafed42b15c74b343528dc31ad320ca08aa8 GIT binary patch literal 135024 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 SY#Lk-4pLI#NrAY5@BaeGUB3YU literal 0 HcmV?d00001 diff --git a/img/dynamic-column-notation-result.png b/img/dynamic-column-notation-result.png new file mode 100644 index 0000000000000000000000000000000000000000..eaadb9c15e55ab08ee419ed62180538bae8ec36e GIT binary patch literal 26821 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 literal 0 HcmV?d00001 diff --git a/imgs/demo-video.png b/imgs/demo-video.png deleted file mode 100644 index 85d30d69f47ad0fea294946baa48f7d29c9e2d80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49026 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≀ad!0I8DMCcrV`QD{;;d-~LP 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/dist'], +}; diff --git a/license-headers/html b/license-headers/html deleted file mode 100644 index 24e4f4f..0000000 --- a/license-headers/html +++ /dev/null @@ -1,12 +0,0 @@ - \ No newline at end of file diff --git a/license-headers/js b/license-headers/js deleted file mode 100644 index 24851d7..0000000 --- a/license-headers/js +++ /dev/null @@ -1,12 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ \ No newline at end of file diff --git a/license-headers/md b/license-headers/md deleted file mode 100644 index 24e4f4f..0000000 --- a/license-headers/md +++ /dev/null @@ -1,12 +0,0 @@ - \ No newline at end of file diff --git a/license-headers/scss b/license-headers/scss deleted file mode 100644 index 24851d7..0000000 --- a/license-headers/scss +++ /dev/null @@ -1,12 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ \ No newline at end of file diff --git a/license-headers/ts b/license-headers/ts deleted file mode 100644 index 24851d7..0000000 --- a/license-headers/ts +++ /dev/null @@ -1,12 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ \ No newline at end of file diff --git a/license-headers/yaml b/license-headers/yaml deleted file mode 100644 index 6f36eec..0000000 --- a/license-headers/yaml +++ /dev/null @@ -1,13 +0,0 @@ -# Copyright 2022 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. \ No newline at end of file diff --git a/server/package-lock.json b/package-lock.json similarity index 52% rename from server/package-lock.json rename to package-lock.json index a4982a3..57e12ef 100644 --- a/server/package-lock.json +++ b/package-lock.json @@ -1,58 +1,28 @@ { - "name": "server", - "version": "1.0.0", + "name": "event-based-marketing", + "version": "0.0.1", "lockfileVersion": 2, "requires": true, "packages": { "": { - "version": "1.0.0", - "license": "Apache-2.0", - "dependencies": { - "@google-cloud/connect-firestore": "^2.0.2", - "@google-cloud/debug-agent": "^5.2.8", - "@google-cloud/firestore": "^4.15.1", - "@google-cloud/logging-winston": "^4.1.1", - "@google-cloud/pubsub": "^2.18.4", - "axios": "^0.25.0", - "body-parser": "^1.19.1", - "cors": "^2.8.5", - "dotenv": "^10.0.0", - "express": "^4.17.1", - "express-session": "^1.17.2", - "googleapis": "^91.0.0", - "module-alias": "^2.2.2", - "oauth": "^0.10.0", - "passport": "^0.5.2", - "passport-google-oauth20": "^2.0.0", - "typescript": "^4.5.4", - "winston": "^3.3.3" - }, + "name": "event-based-marketing", + "version": "0.0.1", "devDependencies": { - "@types/cors": "^2.8.12", - "@types/errorhandler": "^1.5.0", - "@types/express": "^4.17.13", - "@types/express-session": "^1.17.4", - "@types/jest": "^27.4.0", - "@types/node": "^16.11.10", - "@types/passport": "^1.0.7", - "@types/passport-google-oauth20": "^2.0.11", - "@typescript-eslint/eslint-plugin": "^5.4.0", - "@typescript-eslint/parser": "^5.4.0", - "axios-mock-adapter": "^1.21.2", - "concurrently": "^6.4.0", - "eslint": "^8.16.0", + "@google/clasp": "^2.4.2", + "@rollup/plugin-node-resolve": "^15.0.1", + "@types/google-apps-script": "^1.0.57", + "@types/google-apps-script-oauth2": "^38.0.0", + "@types/jest": "^29.4.0", + "eslint": "^8.34.0", "eslint-config-google": "^0.14.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-prettier": "^4.0.0", - "jest": "^27.5.1", - "nodemon": "^2.0.15", - "prettier": "^2.5.0", - "ts-jest": "^27.1.3", - "ts-node": "^10.4.0", - "typescript": "^4.5.4" - }, - "engines": { - "node": ">= 12.0.0" + "eslint-config-prettier": "^8.6.0", + "eslint-plugin-prettier": "^4.2.1", + "jest": "^29.4.3", + "prettier": "^2.8.4", + "rollup": "^3.17.2", + "rollup-plugin-cleanup": "^3.2.1", + "ts-jest": "^29.0.5", + "typescript": "^4.9.5" } }, "node_modules/@ampproject/remapping": { @@ -81,34 +51,34 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", - "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz", + "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.9.tgz", - "integrity": "sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.0.tgz", + "integrity": "sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA==", "dev": true, "dependencies": { - "@ampproject/remapping": "^2.1.0", + "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.9", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helpers": "^7.18.9", - "@babel/parser": "^7.18.9", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9", + "@babel/generator": "^7.21.0", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-module-transforms": "^7.21.0", + "@babel/helpers": "^7.21.0", + "@babel/parser": "^7.21.0", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", + "json5": "^2.2.2", "semver": "^6.3.0" }, "engines": { @@ -119,23 +89,21 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } + "node_modules/@babel/core/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 }, "node_modules/@babel/generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.9.tgz", - "integrity": "sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug==", + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz", + "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==", "dev": true, "dependencies": { - "@babel/types": "^7.18.9", + "@babel/types": "^7.21.0", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "engines": { @@ -157,14 +125,15 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", - "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", + "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.18.8", + "@babel/compat-data": "^7.20.5", "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", "semver": "^6.3.0" }, "engines": { @@ -174,15 +143,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/helper-environment-visitor": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", @@ -193,13 +153,13 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", - "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", "dev": true, "dependencies": { - "@babel/template": "^7.18.6", - "@babel/types": "^7.18.9" + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -230,40 +190,40 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", - "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.0.tgz", + "integrity": "sha512-eD/JQ21IG2i1FraJnTMbUarAUkA7G988ofehG5MDCRXaUU91rEBJuCeSoou2Sk1y4RbLYXzqEg1QLwEmRU4qcQ==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", - "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -281,33 +241,42 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", + "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", - "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", + "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", "dev": true, "dependencies": { - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -399,9 +368,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.9.tgz", - "integrity": "sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg==", + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.1.tgz", + "integrity": "sha512-JzhBFpkuhBNYUY7qs+wTzNmyCWUHEaAFpQQD2YfU1rPL38/L43Wvid0fFkiOCnHvsGncRZgEPyGnltABLcVDTg==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -470,6 +439,21 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", @@ -558,12 +542,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", - "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", + "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.19.0" }, "engines": { "node": ">=6.9.0" @@ -573,33 +557,33 @@ } }, "node_modules/@babel/template": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", - "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.6", - "@babel/types": "^7.18.6" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.9.tgz", - "integrity": "sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.0.tgz", + "integrity": "sha512-Xdt2P1H4LKTO8ApPfnO1KmzYMFpp7D/EinoXzLYN/cHcBNrVCAkAtGUcXnHXrl/VGktureU6fkQrHSBE2URfoA==", "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.9", + "@babel/generator": "^7.21.0", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.9", - "@babel/types": "^7.18.9", + "@babel/parser": "^7.21.0", + "@babel/types": "^7.21.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -607,22 +591,14 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/traverse/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, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/types": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz", - "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.0.tgz", + "integrity": "sha512-uR7NWq2VNFnDi7EYqiRz2Jv/VQIu38tu64Zy8TX2nQFQ6etJ9V/Rr2msW8BS132mum2rL645qpDrLtAJtVpuow==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" }, "engines": { @@ -635,56 +611,16 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "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==", - "dependencies": { - "colorspace": "1.1.x", - "enabled": "2.0.x", - "kuler": "^2.0.0" - } - }, "node_modules/@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", + "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.0", + "espree": "^9.4.0", + "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -693,336 +629,221 @@ }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@google-cloud/common": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-3.10.0.tgz", - "integrity": "sha512-XMbJYMh/ZSaZnbnrrOFfR/oQrb0SxG4qh6hDisWCoEbFcBHV0qHQo4uXfeMCzolx2Mfkh6VDaOGg+hyJsmxrlw==", - "dependencies": { - "@google-cloud/projectify": "^2.0.0", - "@google-cloud/promisify": "^2.0.0", - "arrify": "^2.0.1", - "duplexify": "^4.1.1", - "ent": "^2.2.0", - "extend": "^3.0.2", - "google-auth-library": "^7.14.0", - "retry-request": "^4.2.2", - "teeny-request": "^7.0.0" }, - "engines": { - "node": ">=10" + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@google-cloud/connect-firestore": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@google-cloud/connect-firestore/-/connect-firestore-2.0.2.tgz", - "integrity": "sha512-2sIqeEYetoGQYKjoVkJgGWrBdR83S8ru0ri1eFlgEib/nAas86oIQVVjCefH2YaNiXTng28AMf1YCspSiW8YlQ==", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@google-cloud/firestore": "^4.0.0" - } + "node_modules/@eslint/eslintrc/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==", + "dev": true }, - "node_modules/@google-cloud/debug-agent": { - "version": "5.2.9", - "resolved": "https://registry.npmjs.org/@google-cloud/debug-agent/-/debug-agent-5.2.9.tgz", - "integrity": "sha512-VnHwkQqWawSLsN1EXCmox3//jhehoV0kCI7bgsaBARF3B+/U2p1CCGbF05JNj/Z6S5g8C9ZQIbWCSLD4P1mcYQ==", + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, "dependencies": { - "@google-cloud/common": "^3.0.0", - "acorn": "^8.0.0", - "coffeescript": "^2.0.0", - "console-log-level": "^1.4.0", - "extend": "^3.0.2", - "findit2": "^2.2.3", - "gcp-metadata": "^4.0.0", - "p-limit": "^3.0.1", - "semver": "^7.0.0", - "source-map": "^0.7.3", - "split": "^1.0.0" + "type-fest": "^0.20.2" }, "engines": { - "node": ">=10" - } - }, - "node_modules/@google-cloud/firestore": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-4.15.1.tgz", - "integrity": "sha512-2PWsCkEF1W02QbghSeRsNdYKN1qavrHBP3m72gPDMHQSYrGULOaTi7fSJquQmAtc4iPVB2/x6h80rdLHTATQtA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "functional-red-black-tree": "^1.0.1", - "google-gax": "^2.24.1", - "protobufjs": "^6.8.6" + "node": ">=8" }, - "engines": { - "node": ">=10.10.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@google-cloud/logging": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/@google-cloud/logging/-/logging-9.9.0.tgz", - "integrity": "sha512-rJQ0i9COI1WbtWuGyXL8edF4OA3XHcvgAq5I2DZmjKFvmCLCcspFIWZtztxgd0UgmrrshQVZ0R76oBHjTGggkg==", + "node_modules/@eslint/eslintrc/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, "dependencies": { - "@google-cloud/common": "^3.4.1", - "@google-cloud/paginator": "^3.0.0", - "@google-cloud/projectify": "^2.0.0", - "@google-cloud/promisify": "^2.0.0", - "arrify": "^2.0.1", - "dot-prop": "^6.0.0", - "eventid": "^2.0.0", - "extend": "^3.0.2", - "gcp-metadata": "^4.0.0", - "google-auth-library": "^7.0.0", - "google-gax": "^2.24.1", - "on-finished": "^2.3.0", - "pumpify": "^2.0.1", - "stream-events": "^1.0.5", - "uuid": "^8.0.0" + "argparse": "^2.0.1" }, - "engines": { - "node": ">=10" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@google-cloud/logging-winston": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@google-cloud/logging-winston/-/logging-winston-4.2.4.tgz", - "integrity": "sha512-As2h5hH6Y+5AGeqL51tPLASrfvIbuY7awePCnHuTHIGwpikUtGCpYWe2/AuufXmDB5z5c1fjoCJDkIbrx8SBhA==", - "dependencies": { - "@google-cloud/logging": "^9.6.9", - "google-auth-library": "^7.0.0", - "lodash.mapvalues": "^4.6.0", - "winston-transport": "^4.3.0" - }, + "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, "engines": { "node": ">=10" }, - "peerDependencies": { - "winston": ">=3.2.1" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@google-cloud/paginator": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-3.0.7.tgz", - "integrity": "sha512-jJNutk0arIQhmpUUQJPJErsojqo834KcyB6X7a1mxuic8i1tKXxde8E69IZxNZawRIlZdIK2QY4WALvlK5MzYQ==", + "node_modules/@google/clasp": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@google/clasp/-/clasp-2.4.2.tgz", + "integrity": "sha512-SrHzWSotR8c7mNBVwH81sFCc4HhoDrCevicJehQlvrvgdTvLIiU0Pfb5EYCzWUPBSC4Ez/nvW6wxsgaK7RrPjQ==", + "dev": true, "dependencies": { - "arrify": "^2.0.0", - "extend": "^3.0.2" + "@sindresorhus/is": "^4.0.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.2", + "cli-truncate": "^3.0.0", + "commander": "^8.1.0", + "debounce": "^1.2.1", + "dotf": "^2.0.2", + "find-up": "^6.0.0", + "fs-extra": "^10.0.0", + "fuzzy": "^0.1.3", + "google-auth-library": "^7.6.2", + "googleapis": "^84.0.0", + "inquirer": "^8.1.2", + "inquirer-autocomplete-prompt-ipt": "^2.0.0", + "is-reachable": "^5.0.0", + "log-symbols": "^5.0.0", + "loud-rejection": "^2.2.0", + "make-dir": "^3.1.0", + "multimatch": "^5.0.0", + "normalize-newline": "^4.1.0", + "open": "^8.2.1", + "ora": "^6.0.0", + "p-map": "^5.1.0", + "read-pkg-up": "^8.0.0", + "recursive-readdir": "^2.2.2", + "server-destroy": "^1.0.1", + "split-lines": "^3.0.0", + "strip-bom": "^5.0.0", + "ts2gas": "^4.2.0", + "typescript": "^4.4.2" + }, + "bin": { + "clasp": "build/src/index.js" }, "engines": { - "node": ">=10" - } - }, - "node_modules/@google-cloud/precise-date": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@google-cloud/precise-date/-/precise-date-2.0.4.tgz", - "integrity": "sha512-nOB+mZdevI/1Si0QAfxWfzzIqFdc7wrO+DYePFvgbOoMtvX+XfFTINNt7e9Zg66AbDbWCPRnikU+6f5LTm9Wyg==", - "engines": { - "node": ">=10.4.0" - } - }, - "node_modules/@google-cloud/projectify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-2.1.1.tgz", - "integrity": "sha512-+rssMZHnlh0twl122gXY4/aCrk0G1acBqkHFfYddtsqpYXGxA29nj9V5V9SfC+GyOG00l650f6lG9KL+EpFEWQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/@google-cloud/promisify": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-2.0.4.tgz", - "integrity": "sha512-j8yRSSqswWi1QqUGKVEKOG03Q7qOoZP6/h2zN2YO+F5h2+DHU0bSrHCK9Y7lo2DI9fBd8qGAw795sf+3Jva4yA==", - "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/@google-cloud/pubsub": { - "version": "2.19.4", - "resolved": "https://registry.npmjs.org/@google-cloud/pubsub/-/pubsub-2.19.4.tgz", - "integrity": "sha512-+aZxq6N5XGarQS3xGXjKSRFy4TB+3PMpI0CBmSrcC59g3TB5nmwps3pv/KkdLa0Cd+CPHDdfrEW1uSrGBMLICw==", + "node_modules/@google/clasp/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, "dependencies": { - "@google-cloud/paginator": "^3.0.6", - "@google-cloud/precise-date": "^2.0.0", - "@google-cloud/projectify": "^2.0.0", - "@google-cloud/promisify": "^2.0.0", - "@opentelemetry/api": "^1.0.0", - "@opentelemetry/semantic-conventions": "^1.0.0", - "@types/duplexify": "^3.6.0", - "@types/long": "^4.0.0", - "arrify": "^2.0.0", - "extend": "^3.0.2", - "google-auth-library": "^7.0.0", - "google-gax": "2.30.3", - "is-stream-ended": "^0.1.4", - "lodash.snakecase": "^4.1.1", - "p-defer": "^3.0.0" + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@google-cloud/pubsub/node_modules/@grpc/proto-loader": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.9.tgz", - "integrity": "sha512-UlcCS8VbsU9d3XTXGiEVFonN7hXk+oMXZtoHHG2oSA1/GcDP1q6OUgs20PzHDGizzyi8ufGSUDlk3O2NyY7leg==", + "node_modules/@google/clasp/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, "dependencies": { - "@types/long": "^4.0.1", - "lodash.camelcase": "^4.3.0", - "long": "^4.0.0", - "protobufjs": "^6.10.0", - "yargs": "^16.2.0" - }, - "bin": { - "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + "p-locate": "^6.0.0" }, "engines": { - "node": ">=6" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@google-cloud/pubsub/node_modules/google-gax": { - "version": "2.30.3", - "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-2.30.3.tgz", - "integrity": "sha512-Zsd6hbJBMvAcJS3cYpAsmupvfsxygFR2meUZJcGeR7iUqYHCR/1Hf2aQNB9srrlXQMm91pNiUvW0Kz6Qld8QkA==", + "node_modules/@google/clasp/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, "dependencies": { - "@grpc/grpc-js": "~1.6.0", - "@grpc/proto-loader": "0.6.9", - "@types/long": "^4.0.0", - "abort-controller": "^3.0.0", - "duplexify": "^4.0.0", - "fast-text-encoding": "^1.0.3", - "google-auth-library": "^7.14.0", - "is-stream-ended": "^0.1.4", - "node-fetch": "^2.6.1", - "object-hash": "^3.0.0", - "proto3-json-serializer": "^0.1.8", - "protobufjs": "6.11.2", - "retry-request": "^4.0.0" - }, - "bin": { - "compileProtos": "build/tools/compileProtos.js" + "yocto-queue": "^1.0.0" }, "engines": { - "node": ">=10" - } - }, - "node_modules/@google-cloud/pubsub/node_modules/protobufjs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", - "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", - "hasInstallScript": true, - "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/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^4.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "bin": { - "pbjs": "bin/pbjs", - "pbts": "bin/pbts" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@grpc/grpc-js": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.6.8.tgz", - "integrity": "sha512-Nt5tufF/O5Q310kP0cDzxznWMZW58GCTZhUUiAQ9B0K0ANKNQ4Lj/K9XK0vZg+UBKq5/7z7+8mXHHfrcwoeFJQ==", + "node_modules/@google/clasp/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, "dependencies": { - "@grpc/proto-loader": "^0.7.0", - "@types/node": ">=12.12.47" + "p-limit": "^4.0.0" }, "engines": { - "node": "^8.13.0 || >=10.10.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@grpc/grpc-js/node_modules/@grpc/proto-loader": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.0.tgz", - "integrity": "sha512-SGPZtVmqOvNfPFOA/nNPn+0Weqa5wubBgQ56+JgTbeLY2VezwtMjwPPFzh0kvQccwWT3a2TXT0ZGK/pJoOTk1A==", - "dependencies": { - "@types/long": "^4.0.1", - "lodash.camelcase": "^4.3.0", - "long": "^4.0.0", - "protobufjs": "^7.0.0", - "yargs": "^16.2.0" - }, - "bin": { - "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" - }, + "node_modules/@google/clasp/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, "engines": { - "node": ">=6" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/@grpc/grpc-js/node_modules/protobufjs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.0.0.tgz", - "integrity": "sha512-ffNIEm+quOcYtQvHdW406v1NQmZSuqVklxsXk076BtuFnlYZfigLU+JOMrTD8TUOyqHYbRI/fSVNvgd25YeN3w==", - "hasInstallScript": true, - "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/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, + "node_modules/@google/clasp/node_modules/strip-bom": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-5.0.0.tgz", + "integrity": "sha512-p+byADHF7SzEcVnLvc/r3uognM1hUhObuHXxJcgLCfD194XAkaLbjq3Wzb0N5G2tgIjH0dgT708Z51QxMeu60A==", + "dev": true, "engines": { - "node": ">=12.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@grpc/grpc-js/node_modules/protobufjs/node_modules/long": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.0.tgz", - "integrity": "sha512-9RTUNjK60eJbx3uz+TEGF7fUr29ZDxR5QzXcyDpeSfeH28S9ycINflOgOlppit5U+4kNTe83KQnMEerw7GmE8w==" - }, - "node_modules/@grpc/proto-loader": { - "version": "0.6.13", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.13.tgz", - "integrity": "sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g==", - "dependencies": { - "@types/long": "^4.0.1", - "lodash.camelcase": "^4.3.0", - "long": "^4.0.0", - "protobufjs": "^6.11.3", - "yargs": "^16.2.0" - }, - "bin": { - "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" - }, + "node_modules/@google/clasp/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, "engines": { - "node": ">=6" + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, + "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, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", @@ -1045,100 +866,69 @@ "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==", + "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, - "dependencies": { - "sprintf-js": "~1.0.2" + "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==", + "node_modules/@jest/console": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.4.3.tgz", + "integrity": "sha512-W/o/34+wQuXlgqlPYTansOSiBnuxrTv61dEVkA6HNmpcgHLUjfaUbdqt6oVvOzaawwo9IdW9QOtMgQ1ScSZC4A==", "dev": true, "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@istanbuljs/load-nyc-config/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, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.4.3", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-message-util": "^29.4.3", + "jest-util": "^29.4.3", "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.4.3.tgz", + "integrity": "sha512-56QvBq60fS4SPZCuM7T+7scNrkGIe7Mr6PVIXUpu48ouvRaWOFqRPV91eifvFM0ay2HmfswXiGf97NGUN5KofQ==", "dev": true, "dependencies": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.4.3", + "@jest/reporters": "^29.4.3", + "@jest/test-result": "^29.4.3", + "@jest/transform": "^29.4.3", + "@jest/types": "^29.4.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "emittery": "^0.8.1", + "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", + "jest-changed-files": "^29.4.3", + "jest-config": "^29.4.3", + "jest-haste-map": "^29.4.3", + "jest-message-util": "^29.4.3", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.4.3", + "jest-resolve-dependencies": "^29.4.3", + "jest-runner": "^29.4.3", + "jest-runtime": "^29.4.3", + "jest-snapshot": "^29.4.3", + "jest-util": "^29.4.3", + "jest-validate": "^29.4.3", + "jest-watcher": "^29.4.3", "micromatch": "^4.0.4", - "rimraf": "^3.0.0", + "pretty-format": "^29.4.3", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -1150,85 +940,110 @@ } }, "node_modules/@jest/environment": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", - "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.4.3.tgz", + "integrity": "sha512-dq5S6408IxIa+lr54zeqce+QgI+CJT4nmmA+1yzFgtcsGK8c/EyiUb9XQOgz3BMKrRDfKseeOaxj2eO8LlD3lA==", "dev": true, "dependencies": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/fake-timers": "^29.4.3", + "@jest/types": "^29.4.3", "@types/node": "*", - "jest-mock": "^27.5.1" + "jest-mock": "^29.4.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.4.3.tgz", + "integrity": "sha512-iktRU/YsxEtumI9zsPctYUk7ptpC+AVLLk1Ax3AsA4g1C+8OOnKDkIQBDHtD5hA/+VtgMd5AWI5gNlcAlt2vxQ==", + "dev": true, + "dependencies": { + "expect": "^29.4.3", + "jest-snapshot": "^29.4.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.4.3.tgz", + "integrity": "sha512-/6JWbkxHOP8EoS8jeeTd9dTfc9Uawi+43oLKHfp6zzux3U2hqOOVnV3ai4RpDYHOccL6g+5nrxpoc8DmJxtXVQ==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.4.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/fake-timers": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", - "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.4.3.tgz", + "integrity": "sha512-4Hote2MGcCTWSD2gwl0dwbCpBRHhE6olYEuTj8FMowdg3oQWNKr2YuxenPQYZ7+PfqPY1k98wKDU4Z+Hvd4Tiw==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", + "@jest/types": "^29.4.3", + "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" + "jest-message-util": "^29.4.3", + "jest-mock": "^29.4.3", + "jest-util": "^29.4.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.4.3.tgz", + "integrity": "sha512-8BQ/5EzfOLG7AaMcDh7yFCbfRLtsc+09E1RQmRBI4D6QQk4m6NSK/MXo+3bJrBN0yU8A2/VIcqhvsOLFmziioA==", "dev": true, "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" + "@jest/environment": "^29.4.3", + "@jest/expect": "^29.4.3", + "@jest/types": "^29.4.3", + "jest-mock": "^29.4.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.4.3.tgz", + "integrity": "sha512-sr2I7BmOjJhyqj9ANC6CTLsL4emMoka7HkQpcoMRlhCbQJjz2zsRzw0BDPiPyEFDXAbxKgGFYuQZiSJ1Y6YoTg==", "dev": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.4.3", + "@jest/test-result": "^29.4.3", + "@jest/transform": "^29.4.3", + "@jest/types": "^29.4.3", + "@jridgewell/trace-mapping": "^0.3.15", "@types/node": "*", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", - "glob": "^7.1.2", + "glob": "^7.1.3", "graceful-fs": "^4.2.9", "istanbul-lib-coverage": "^3.0.0", "istanbul-lib-instrument": "^5.1.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-message-util": "^29.4.3", + "jest-util": "^29.4.3", + "jest-worker": "^29.4.3", "slash": "^3.0.0", - "source-map": "^0.6.0", "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -1239,117 +1054,103 @@ } } }, - "node_modules/@jest/reporters/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==", + "node_modules/@jest/schemas": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", + "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.25.16" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz", + "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==", "dev": true, "dependencies": { + "@jridgewell/trace-mapping": "^0.3.15", "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" + "graceful-fs": "^4.2.9" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/source-map/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.4.3.tgz", + "integrity": "sha512-Oi4u9NfBolMq9MASPwuWTlC5WvmNRwI4S8YrQg5R5Gi47DYlBe3sh7ILTqi/LGrK1XUE4XY9KZcQJTH1WJCLLA==", "dev": true, "dependencies": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.4.3", + "@jest/types": "^29.4.3", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.4.3.tgz", + "integrity": "sha512-yi/t2nES4GB4G0mjLc0RInCq/cNr9dNwJxcGg8sslajua5Kb4kmozAc+qPLzplhBgfw1vLItbjyHzUN92UXicw==", "dev": true, "dependencies": { - "@jest/test-result": "^27.5.1", + "@jest/test-result": "^29.4.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" + "jest-haste-map": "^29.4.3", + "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.4.3.tgz", + "integrity": "sha512-8u0+fBGWolDshsFgPQJESkDa72da/EVwvL+II0trN2DR66wMwiQ9/CihaGfHdlLGFzbBZwMykFtxuwFdZqlKwg==", "dev": true, "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", + "@babel/core": "^7.11.6", + "@jest/types": "^29.4.3", + "@jridgewell/trace-mapping": "^0.3.15", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^29.4.3", + "jest-regex-util": "^29.4.3", + "jest-util": "^29.4.3", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" + "write-file-atomic": "^4.0.2" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/transform/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.4.3.tgz", + "integrity": "sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA==", "dev": true, "dependencies": { + "@jest/schemas": "^29.4.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jridgewell/gen-mapping": { @@ -1390,13 +1191,13 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, "node_modules/@nodelib/fs.scandir": { @@ -1434,135 +1235,109 @@ "node": ">= 8" } }, - "node_modules/@opentelemetry/api": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.1.0.tgz", - "integrity": "sha512-hf+3bwuBwtXsugA2ULBc95qxrOqP2pOekLz34BJhcAKawt94vfeNyUKpYc0lZQ/3sCP6LqRa7UAdHA7i5UODzQ==", + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.1.tgz", + "integrity": "sha512-ReY88T7JhJjeRVbfCyNj+NXAG3IIsVMsX9b5/9jC98dRP8/yxlZdz7mHZbHk5zHr24wZZICS5AcXsFZAXYUQEg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.0", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, "engines": { - "node": ">=8.0.0" + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@opentelemetry/semantic-conventions": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.4.0.tgz", - "integrity": "sha512-Hzl8soGpmyzja9w3kiFFcYJ7n5HNETpplY6cb67KR4QPlxp4FTTresO06qXHgHDhyIInmbLJXuwARjjpsKYGuQ==", + "node_modules/@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, "engines": { - "node": ">=14" + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + "node_modules/@sinclair/typebox": { + "version": "0.25.23", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.23.tgz", + "integrity": "sha512-VEB8ygeP42CFLWyAJhN5OklpxUliqdNEUcXb4xZ/CINqtYGTjL5ukluKdKzQ0iWdUxyQ7B0539PAUhHKrCNWSQ==", + "dev": true }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" } }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" - }, "node_modules/@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", + "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", "dev": true, "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz", + "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==", "dev": true, "dependencies": { - "@sinonjs/commons": "^1.7.0" + "@sinonjs/commons": "^2.0.0" } }, - "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==", + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", "dev": true, + "dependencies": { + "defer-to-connect": "^2.0.0" + }, "engines": { - "node": ">= 6" + "node": ">=10" } }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true - }, "node_modules/@types/babel__core": { - "version": "7.1.19", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", - "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", + "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", "dev": true, "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" @@ -1588,97 +1363,62 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.17.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", - "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", + "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", "dev": true, "dependencies": { "@babel/types": "^7.3.0" } }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", "dev": true, "dependencies": { - "@types/node": "*" + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" } }, - "node_modules/@types/cors": { - "version": "2.8.12", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", - "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", + "node_modules/@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", "dev": true }, - "node_modules/@types/duplexify": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@types/duplexify/-/duplexify-3.6.1.tgz", - "integrity": "sha512-n0zoEj/fMdMOvqbHxmqnza/kXyoGgJmEpsXjpP+gEqE1Ye4yNqc7xWipKnUoMpWhMuzJQSfK2gMrwlElly7OGQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/errorhandler": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@types/errorhandler/-/errorhandler-1.5.0.tgz", - "integrity": "sha512-g5jrn2aofEn7O2OW/T+PlmGUUD/AtrX7DI87zrxz6rK5XIyvQf3FbPJrwgYaVjVOaCyvEkx9yxLd/XlEA43OcA==", - "dev": true, - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", - "dev": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.29", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz", - "integrity": "sha512-uMd++6dMKS32EOuw1Uli3e3BPgdLIXmezcfHv7N4c1s3gkhikBplORPpMq3fuWkxncZN1reb16d5n8yhQ80x7Q==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } + "node_modules/@types/google-apps-script": { + "version": "1.0.57", + "resolved": "https://registry.npmjs.org/@types/google-apps-script/-/google-apps-script-1.0.57.tgz", + "integrity": "sha512-w06Yoh+SamGpS2kGVlGy/5JkmFkLrW6u3tbglyHEu9uC9lrzqr6FyLcgVsL95Tmq9L0q//D8seqd4GZGRPPKUw==", + "dev": true }, - "node_modules/@types/express-session": { - "version": "1.17.5", - "resolved": "https://registry.npmjs.org/@types/express-session/-/express-session-1.17.5.tgz", - "integrity": "sha512-l0DhkvNVfyUPEEis8fcwbd46VptfA/jmMwHfob2TfDMf3HyPLiB9mKD71LXhz5TMUobODXPD27zXSwtFQLHm+w==", + "node_modules/@types/google-apps-script-oauth2": { + "version": "38.0.0", + "resolved": "https://registry.npmjs.org/@types/google-apps-script-oauth2/-/google-apps-script-oauth2-38.0.0.tgz", + "integrity": "sha512-TxaCxXmAb3/Qm/kSweW+PPIckNwLvZo6maGI0oKx/MBdl/WrZkPAY7Mi56qg2xPGBObqG80rmYU691SAHiUdJg==", "dev": true, "dependencies": { - "@types/express": "*" + "@types/google-apps-script": "*" } }, "node_modules/@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", + "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", "dev": true, "dependencies": { "@types/node": "*" } }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", + "dev": true + }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", @@ -1704,102 +1444,60 @@ } }, "node_modules/@types/jest": { - "version": "27.5.2", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz", - "integrity": "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==", + "version": "29.4.0", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.4.0.tgz", + "integrity": "sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ==", "dev": true, "dependencies": { - "jest-matcher-utils": "^27.0.0", - "pretty-format": "^27.0.0" + "expect": "^29.0.0", + "pretty-format": "^29.0.0" } }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "node_modules/@types/long": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" - }, - "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true - }, - "node_modules/@types/node": { - "version": "16.11.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.45.tgz", - "integrity": "sha512-3rKg/L5x0rofKuuUt5zlXzOnKyIHXmIu5R8A0TuNDMF2062/AOIDBciFIjToLEJ/9F9DzkHNot+BpNsMI1OLdQ==" - }, - "node_modules/@types/oauth": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@types/oauth/-/oauth-0.9.1.tgz", - "integrity": "sha512-a1iY62/a3yhZ7qH7cNUsxoI3U/0Fe9+RnuFrpTKr+0WVOzbKlSLojShCKe20aOD1Sppv+i8Zlq0pLDuTJnwS4A==", + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", "dev": true, "dependencies": { "@types/node": "*" } }, - "node_modules/@types/passport": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@types/passport/-/passport-1.0.9.tgz", - "integrity": "sha512-9+ilzUhmZQR4JP49GdC2O4UdDE3POPLwpmaTC/iLkW7l0TZCXOo1zsTnnlXPq6rP1UsUZPfbAV4IUdiwiXyC7g==", - "dev": true, - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/passport-google-oauth20": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/passport-google-oauth20/-/passport-google-oauth20-2.0.11.tgz", - "integrity": "sha512-9XMT1GfwhZL7UQEiCepLef55RNPHkbrCtsU7rsWPTEOsmu5qVIW8nSemtB4p+P24CuOhA+IKkv8LsPThYghGww==", - "dev": true, - "dependencies": { - "@types/express": "*", - "@types/passport": "*", - "@types/passport-oauth2": "*" - } + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true }, - "node_modules/@types/passport-oauth2": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@types/passport-oauth2/-/passport-oauth2-1.4.11.tgz", - "integrity": "sha512-KUNwmGhe/3xPbjkzkPwwcPmyFwfyiSgtV1qOrPBLaU4i4q9GSCdAOyCbkFG0gUxAyEmYwqo9OAF/rjPjJ6ImdA==", - "dev": true, - "dependencies": { - "@types/express": "*", - "@types/oauth": "*", - "@types/passport": "*" - } + "node_modules/@types/node": { + "version": "18.14.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.0.tgz", + "integrity": "sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==", + "dev": true }, - "node_modules/@types/prettier": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz", - "integrity": "sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==", + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", "dev": true }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "node_modules/@types/prettier": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", + "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", "dev": true }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", "dev": true }, - "node_modules/@types/serve-static": { - "version": "1.13.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", - "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "node_modules/@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", "dev": true, "dependencies": { - "@types/mime": "^1", "@types/node": "*" } }, @@ -1810,9 +1508,9 @@ "dev": true }, "node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.22", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz", + "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -1824,285 +1522,65 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.7.tgz", - "integrity": "sha512-l4L6Do+tfeM2OK0GJsU7TUcM/1oN/N25xHm3Jb4z3OiDU4Lj8dIuxX9LpVMS9riSXQs42D1ieX7b85/r16H9Fw==", + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.30.7", - "@typescript-eslint/type-utils": "5.30.7", - "@typescript-eslint/utils": "5.30.7", - "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.2.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "event-target-shim": "^5.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=6.5" } }, - "node_modules/@typescript-eslint/parser": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.7.tgz", - "integrity": "sha512-Rg5xwznHWWSy7v2o0cdho6n+xLhK2gntImp0rJroVVFkcYFYQ8C8UJTSuTw/3CnExBmPjycjmUJkxVmjXsld6A==", + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.30.7", - "@typescript-eslint/types": "5.30.7", - "@typescript-eslint/typescript-estree": "5.30.7", - "debug": "^4.3.4" + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, + "node": ">=0.4.0" + } + }, + "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, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.7.tgz", - "integrity": "sha512-7BM1bwvdF1UUvt+b9smhqdc/eniOnCKxQT/kj3oXtj3LqnTWCAM0qHRHfyzCzhEfWX0zrW7KqXXeE4DlchZBKw==", + "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==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.30.7", - "@typescript-eslint/visitor-keys": "5.30.7" + "debug": "4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">= 6.0.0" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.7.tgz", - "integrity": "sha512-nD5qAE2aJX/YLyKMvOU5jvJyku4QN5XBVsoTynFrjQZaDgDV6i7QHFiYCx10wvn7hFvfuqIRNBtsgaLe0DbWhw==", + "node_modules/aggregate-error": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", + "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", "dev": true, "dependencies": { - "@typescript-eslint/utils": "5.30.7", - "debug": "^4.3.4", - "tsutils": "^3.21.0" + "clean-stack": "^4.0.0", + "indent-string": "^5.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.7.tgz", - "integrity": "sha512-ocVkETUs82+U+HowkovV6uxf1AnVRKCmDRNUBUUo46/5SQv1owC/EBFkiu4MOHeZqhKz2ktZ3kvJJ1uFqQ8QPg==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.7.tgz", - "integrity": "sha512-tNslqXI1ZdmXXrHER83TJ8OTYl4epUzJC0aj2i4DMDT4iU+UqLT3EJeGQvJ17BMbm31x5scSwo3hPM0nqQ1AEA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.30.7", - "@typescript-eslint/visitor-keys": "5.30.7", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.7.tgz", - "integrity": "sha512-Z3pHdbFw+ftZiGUnm1GZhkJgVqsDL5CYW2yj+TB2mfXDFOMqtbzQi2dNJIyPqPbx9mv2kUxS1gU+r2gKlKi1rQ==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.30.7", - "@typescript-eslint/types": "5.30.7", - "@typescript-eslint/typescript-estree": "5.30.7", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.7.tgz", - "integrity": "sha512-KrRXf8nnjvcpxDFOKej4xkD7657+PClJs5cJVSG7NNoCNnjEdc46juNAQt7AyuWctuCgs6mVRc1xGctEqrjxWw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.30.7", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "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, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true, - "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==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ajv": { @@ -2136,22 +1614,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "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, "engines": { "node": ">=8" } @@ -2160,6 +1627,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -2171,9 +1639,9 @@ } }, "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "dependencies": { "normalize-path": "^3.0.0", @@ -2183,22 +1651,32 @@ "node": ">= 8" } }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, "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==", - "dev": true + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } }, - "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==" + "node_modules/array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/array-union": { "version": "2.1.0", @@ -2213,59 +1691,27 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true, "engines": { "node": ">=8" } }, - "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/axios": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", - "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", - "dependencies": { - "follow-redirects": "^1.14.7" - } - }, - "node_modules/axios-mock-adapter": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/axios-mock-adapter/-/axios-mock-adapter-1.21.2.tgz", - "integrity": "sha512-jzyNxU3JzB2XVhplZboUcF0YDs7xuExzoRSHXPHr+UQajaGmcTqvkkUADgkVI2WkGlpZ1zZlMVdcTMU0ejV8zQ==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "is-buffer": "^2.0.5" - }, - "peerDependencies": { - "axios": ">= 0.17.0" - } - }, "node_modules/babel-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", - "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.4.3.tgz", + "integrity": "sha512-o45Wyn32svZE+LnMVWv/Z4x0SwtLbh4FyGcYtR20kIWd+rdrDZ9Fzq8Ml3MYLD+mZvEdzCjZsCnYZ2jpJyQ+Nw==", "dev": true, "dependencies": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/transform": "^29.4.3", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", + "babel-preset-jest": "^29.4.3", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "@babel/core": "^7.8.0" @@ -2288,18 +1734,18 @@ } }, "node_modules/babel-plugin-jest-hoist": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", - "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.4.3.tgz", + "integrity": "sha512-mB6q2q3oahKphy5V7CpnNqZOCkxxZ9aokf1eh82Dy3jQmg4xvM1tGrh5y6BQUJh4a3Pj9+eLfwvAZ7VNKg7H8Q==", "dev": true, "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", + "@types/babel__core": "^7.1.14", "@types/babel__traverse": "^7.0.6" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/babel-preset-current-node-syntax": { @@ -2326,16 +1772,16 @@ } }, "node_modules/babel-preset-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", - "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.4.3.tgz", + "integrity": "sha512-gWx6COtSuma6n9bw+8/F+2PCXrIgxV/D1TJFnp6OyBK2cxPWg0K9p/sriNYeifKjpUkMViWQ09DSWtzJQRETsw==", "dev": true, "dependencies": { - "babel-plugin-jest-hoist": "^27.5.1", + "babel-plugin-jest-hoist": "^29.4.3", "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "@babel/core": "^7.0.0" @@ -2351,6 +1797,7 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, "funding": [ { "type": "github", @@ -2366,18 +1813,11 @@ } ] }, - "node_modules/base64url": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", - "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/bignumber.js": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", - "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz", + "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==", + "dev": true, "engines": { "node": "*" } @@ -2391,42 +1831,17 @@ "node": ">=8" } }, - "node_modules/body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", - "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.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dev": true, "dependencies": { - "ms": "2.0.0" + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -2449,16 +1864,10 @@ "node": ">=8" } }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, "node_modules/browserslist": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.2.tgz", - "integrity": "sha512-MonuOgAtUB46uP5CezYbRaYKBNt2LxP0yX+Pmj4LkcDFGkn9Cbpi83d9sCjwQDErXsIJSzY5oKGDbgOlF/LPAA==", + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", "dev": true, "funding": [ { @@ -2471,10 +1880,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001366", - "electron-to-chromium": "^1.4.188", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.4" + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" }, "bin": { "browserslist": "cli.js" @@ -2504,10 +1913,35 @@ "node-int64": "^0.4.0" } }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "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" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "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==" + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "dev": true }, "node_modules/buffer-from": { "version": "1.1.2", @@ -2515,18 +1949,65 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true, + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, "engines": { - "node": ">= 0.8" + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -2554,9 +2035,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001370", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001370.tgz", - "integrity": "sha512-3PDmaP56wz/qz7G508xzjx8C+MC2qEm4SYhSEzC9IBROo+dGXFWRuaXkWti0A9tuI00g+toiriVqxtWMgl350g==", + "version": "1.0.30001457", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001457.tgz", + "integrity": "sha512-SDIV6bgE1aVbK6XyxdURbUE89zY7+k1BBBaOwYwkNCglXlel/E7mELiHC64HQ+W0xSKlqWhV9Wh7iHxUjMs4fA==", "dev": true, "funding": [ { @@ -2585,18 +2066,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/char-regex": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", @@ -2606,6 +2075,12 @@ "node": ">=10" } }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -2646,219 +2121,240 @@ } }, "node_modules/ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", - "dev": true - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.2", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.2", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "node_modules/clean-stack": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", + "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", + "dev": true, "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "escape-string-regexp": "5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "node_modules/clean-stack/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/coffeescript": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-2.7.0.tgz", - "integrity": "sha512-hzWp6TUE2d/jCcN67LrW1eh5b/rSDKQK6oD6VMLlggYVUUFexgTH9z3dNYihzX4RMhze5FTUsUmOXViJKFQR/A==", - "bin": { - "cake": "bin/cake", - "coffee": "bin/coffee" + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "node_modules/color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "dependencies": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" + "node_modules/cli-spinners": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", + "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "dev": true, "dependencies": { - "color-name": "~1.1.4" + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" }, "engines": { - "node": ">=7.0.0" - } - }, - "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==" - }, - "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==", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/color/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==", - "dependencies": { - "color-name": "1.1.3" + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/color/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==" - }, - "node_modules/colorspace": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", - "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", - "dependencies": { - "color": "^3.1.3", - "text-hex": "1.0.x" - } + "node_modules/cli-truncate/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 }, - "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==", + "node_modules/cli-truncate/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, "dependencies": { - "delayed-stream": "~1.0.0" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">= 0.8" + "node": ">=12" + }, + "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==", - "dev": true - }, - "node_modules/concurrently": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.5.1.tgz", - "integrity": "sha512-FlSwNpGjWQfRwPLXvJ/OgysbBxPkWpiVjy1042b0U7on7S7qwwMIILRj7WTN1mTgqa582bG6NFuScOoh6Zgdag==", + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", "dev": true, "dependencies": { - "chalk": "^4.1.0", - "date-fns": "^2.16.1", - "lodash": "^4.17.21", - "rxjs": "^6.6.3", - "spawn-command": "^0.0.2-1", - "supports-color": "^8.1.0", - "tree-kill": "^1.2.2", - "yargs": "^16.2.0" - }, - "bin": { - "concurrently": "bin/concurrently.js" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=10.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/console-log-level": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/console-log-level/-/console-log-level-1.4.1.tgz", - "integrity": "sha512-VZzbIORbP+PPcN/gg3DXClTLPLg5Slwd5fL2MIc+o1qZ4BXBvWyc6QxPk6T/Mkr6IVjRpoAGf32XxP3ZWMVRcQ==" + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } }, - "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==", + "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, "dependencies": { - "safe-buffer": "5.2.1" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">= 0.6" + "node": ">=12" } }, - "node_modules/content-type": { + "node_modules/clone": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=0.8" } }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "dev": true, "dependencies": { - "safe-buffer": "~5.1.1" + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/convert-source-map/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, "engines": { - "node": ">= 0.6" + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" } }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true }, - "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==", + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { - "object-assign": "^4", - "vary": "^1" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 0.10" + "node": ">=7.0.0" } }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "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 + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "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 }, "node_modules/cross-spawn": { @@ -2875,61 +2371,29 @@ "node": ">= 8" } }, - "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "node_modules/currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", "dev": true, "dependencies": { - "cssom": "~0.3.6" + "array-find-index": "^1.0.1" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "node_modules/debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", "dev": true }, - "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/date-fns": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.1.tgz", - "integrity": "sha512-dlLD5rKaKxpFdnjrs+5azHDFOPEu4ANy/LTh04A1DTzMM7qoajmKCBc8pkKRFT41CNzw+4gQh79X5C+Jq27HAw==", - "dev": true, - "engines": { - "node": ">=0.11" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" - } - }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -2942,11 +2406,32 @@ } } }, - "node_modules/decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", - "dev": true + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/dedent": { "version": "0.7.0", @@ -2961,38 +2446,42 @@ "dev": true }, "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", + "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, - "engines": { - "node": ">=0.4.0" + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, "engines": { - "node": ">= 0.8" + "node": ">=10" } }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=8" } }, "node_modules/detect-newline": { @@ -3004,34 +2493,13 @@ "node": ">=8" } }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", + "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/doctrine": { @@ -3046,86 +2514,47 @@ "node": ">=6.0.0" } }, - "node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "node_modules/dotf": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dotf/-/dotf-2.0.2.tgz", + "integrity": "sha512-4cN2fwEqHimE11jVc8uMNiEB2A2YOL5Fdyd1p14UbAvRh/5vAxjEaiVPx45zD5IQcwc/uQIxI9Jh18skB/uYFQ==", "dev": true, "dependencies": { - "webidl-conversions": "^5.0.0" + "graceful-fs": "^4.2.8", + "jsonfile": "^6.1.0" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "engines": { - "node": ">=10" - } - }, - "node_modules/duplexify": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", - "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", - "dependencies": { - "end-of-stream": "^1.4.1", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1", - "stream-shift": "^1.0.0" - } + "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 }, "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==", + "dev": true, "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==" - }, "node_modules/electron-to-chromium": { - "version": "1.4.199", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.199.tgz", - "integrity": "sha512-WIGME0Cs7oob3mxsJwHbeWkH0tYkIE/sjkJ8ML2BYmuRcjhRl/q5kVDXG7W9LOOKwzPU5M0LBlXRq9rlSgnNlg==", + "version": "1.4.305", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.305.tgz", + "integrity": "sha512-WETy6tG0CT5gm1O+xCbyapWNsCcmIvrn4NHViIGYo2AT8FV2qUCXdaB+WqYxSv/vS5mFqhBYnfZAAkVArjBmUg==", "dev": true }, "node_modules/emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sindresorhus/emittery?sponsor=1" @@ -3134,34 +2563,18 @@ "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==" - }, - "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==" - }, - "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==", - "engines": { - "node": ">= 0.8" - } + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, "dependencies": { "once": "^1.4.0" } }, - "node_modules/ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==" - }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -3175,127 +2588,30 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, "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==" - }, "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, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escodegen": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, "node_modules/eslint": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.20.0.tgz", - "integrity": "sha512-d4ixhz5SKCa1D6SCPrivP7yYVi7nyD6A4vs6HIAul9ujBzcEmZVM3/0NN/yu5nKhmO1wjp5xQ46iRfmDGlOviA==", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.34.0.tgz", + "integrity": "sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", + "@eslint/eslintrc": "^1.4.1", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -3305,18 +2621,21 @@ "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", + "espree": "^9.4.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", @@ -3327,8 +2646,7 @@ "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" @@ -3353,9 +2671,9 @@ } }, "node_modules/eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.6.0.tgz", + "integrity": "sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" @@ -3386,16 +2704,16 @@ } }, "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=8.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/eslint-utils": { @@ -3434,40 +2752,124 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "node_modules/eslint/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==", + "dev": 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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/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, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/eslint/node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, "engines": { - "node": ">=4.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/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, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/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, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/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, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/espree": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", - "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", "dev": true, "dependencies": { - "acorn": "^8.7.1", + "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/esprima": { @@ -3484,9 +2886,9 @@ } }, "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.2.tgz", + "integrity": "sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -3495,15 +2897,6 @@ "node": ">=0.10" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -3516,7 +2909,7 @@ "node": ">=4.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { + "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", @@ -3525,14 +2918,11 @@ "node": ">=4.0" } }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true }, "node_modules/esutils": { "version": "2.0.3", @@ -3543,33 +2933,15 @@ "node": ">=0.10.0" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/event-target-shim": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true, "engines": { "node": ">=6" } }, - "node_modules/eventid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/eventid/-/eventid-2.0.1.tgz", - "integrity": "sha512-sPNTqiMokAvV048P2c9+foqVJzk49o6d4e0D/sq5jog3pw+4kBgyR0gaM1FM7Mx6Kzd9dztesh9oYz1LWWOpzw==", - "dependencies": { - "uuid": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -3603,122 +2975,46 @@ } }, "node_modules/expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.10.3", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "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" - } - }, - "node_modules/express-session": { - "version": "1.17.3", - "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz", - "integrity": "sha512-4+otWXlShYlG1Ma+2Jnn+xgKUZTMJ5QD3YvfilX3AcocOAbIkVylSWEklzALe/+Pu4qV6TYBj5GwOBFfdKqLBw==", - "dependencies": { - "cookie": "0.4.2", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-headers": "~1.0.2", - "parseurl": "~1.3.3", - "safe-buffer": "5.2.1", - "uid-safe": "~2.1.5" + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.4.3.tgz", + "integrity": "sha512-uC05+Q7eXECFpgDrHdXA4k2rpMyStAYPItEDLyQDo5Ta7fVkJnNA/4zh/OIVkVVNZ1oOK1PipQoyNjuZ6sz6Dg==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.4.3", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.4.3", + "jest-message-util": "^29.4.3", + "jest-util": "^29.4.3" }, "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/express-session/node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express-session/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express-session/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } }, "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==" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true }, "node_modules/fast-diff": { "version": "1.2.0", @@ -3726,34 +3022,6 @@ "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", "dev": true }, - "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -3767,32 +3035,52 @@ "dev": true }, "node_modules/fast-text-encoding": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.4.tgz", - "integrity": "sha512-x6lDDm/tBAzX9kmsPcZsNbvDs3Zey3+scsxaZElS8xWLgUMAg/oFLeewfUz0mu1CblHhhsu15jGkraldkFh8KQ==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", + "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==", + "dev": true }, "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, "dependencies": { "reusify": "^1.0.4" } }, "node_modules/fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, "dependencies": { "bser": "2.1.1" } }, - "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==" + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } }, "node_modules/file-entry-cache": { "version": "6.0.1", @@ -3818,36 +3106,6 @@ "node": ">=8" } }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "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/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, "node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -3861,14 +3119,6 @@ "node": ">=8" } }, - "node_modules/findit2": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/findit2/-/findit2-2.2.3.tgz", - "integrity": "sha512-lg/Moejf4qXovVutL0Lz4IsaPoNYMuxt4PA0nGqFxnJ1CTTGGlEO2wKgoDpwknhvZ8k4Q2F+eesgkLbG2Mxfog==", - "engines": { - "node": ">=0.8.22" - } - }, "node_modules/flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -3883,63 +3133,23 @@ } }, "node_modules/flatted": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", - "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, - "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==" - }, - "node_modules/follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "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==", - "engines": { - "node": ">= 0.6" + "node": ">=12" } }, "node_modules/fs.realpath": { @@ -3965,17 +3175,23 @@ "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" + "node_modules/fuzzy": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/fuzzy/-/fuzzy-0.1.3.tgz", + "integrity": "sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } }, "node_modules/gaxios": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", + "dev": true, "dependencies": { "abort-controller": "^3.0.0", "extend": "^3.0.2", @@ -3991,6 +3207,7 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz", "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==", + "dev": true, "dependencies": { "gaxios": "^4.0.0", "json-bigint": "^1.0.0" @@ -4012,14 +3229,16 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -4083,44 +3302,19 @@ } }, "node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "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, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, "node_modules/google-auth-library": { "version": "7.14.1", "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.14.1.tgz", "integrity": "sha512-5Rk7iLNDFhFeBYc3s8l1CqzbEBcdhwR193RlD4vSNFajIcINKI8W8P0JLmBpwymHqqWbX34pJDQu39cSy/6RsA==", + "dev": true, "dependencies": { "arrify": "^2.0.0", "base64-js": "^1.3.0", @@ -4136,36 +3330,29 @@ "node": ">=10" } }, - "node_modules/google-gax": { - "version": "2.30.5", - "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-2.30.5.tgz", - "integrity": "sha512-Jey13YrAN2hfpozHzbtrwEfEHdStJh1GwaQ2+Akh1k0Tv/EuNVSuBtHZoKSBm5wBMvNsxTsEIZ/152NrYyZgxQ==", + "node_modules/google-auth-library/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==", + "dev": true, "dependencies": { - "@grpc/grpc-js": "~1.6.0", - "@grpc/proto-loader": "^0.6.12", - "@types/long": "^4.0.0", - "abort-controller": "^3.0.0", - "duplexify": "^4.0.0", - "fast-text-encoding": "^1.0.3", - "google-auth-library": "^7.14.0", - "is-stream-ended": "^0.1.4", - "node-fetch": "^2.6.1", - "object-hash": "^3.0.0", - "proto3-json-serializer": "^0.1.8", - "protobufjs": "6.11.3", - "retry-request": "^4.0.0" - }, - "bin": { - "compileProtos": "build/tools/compileProtos.js" + "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, + "node_modules/google-auth-library/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/google-p12-pem": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.4.tgz", "integrity": "sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg==", + "dev": true, "dependencies": { "node-forge": "^1.3.1" }, @@ -4177,9 +3364,10 @@ } }, "node_modules/googleapis": { - "version": "91.0.0", - "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-91.0.0.tgz", - "integrity": "sha512-iHqXZwgYam0g8n0Yyi+YHx8kgwT+H5O4k3fe0LB1JhWRp1dSKYu+ShY4PQbW584zLOE4kK3LHf2B+x1THx+ZPQ==", + "version": "84.0.0", + "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-84.0.0.tgz", + "integrity": "sha512-5WWLwmraulw3p55lu0gNpLz2FME1gcuR7QxgmUdAVHMiVN4LEasYjJV9p36gxcf2TMe6bn6+PgQ/63+CvBEgoQ==", + "dev": true, "dependencies": { "google-auth-library": "^7.0.2", "googleapis-common": "^5.0.2" @@ -4192,6 +3380,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-5.1.0.tgz", "integrity": "sha512-RXrif+Gzhq1QAzfjxulbGvAY3FPj8zq/CYcvgjzDbaBNCD6bUl+86I7mUs4DKWHGruuK26ijjR/eDpWIDgNROA==", + "dev": true, "dependencies": { "extend": "^3.0.2", "gaxios": "^4.0.0", @@ -4204,16 +3393,48 @@ "node": ">=10.10.0" } }, + "node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "node_modules/gtoken": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.2.tgz", "integrity": "sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==", + "dev": true, "dependencies": { "gaxios": "^4.0.0", "google-p12-pem": "^3.1.3", @@ -4227,6 +3448,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "dependencies": { "function-bind": "^1.1.1" }, @@ -4247,6 +3469,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -4254,165 +3477,432 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "dependencies": { - "whatwg-encoding": "^1.0.5" + "lru-cache": "^6.0.0" }, "engines": { "node": ">=10" } }, + "node_modules/hosted-git-info/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==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hosted-git-info/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "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 }, - "node_modules/http-errors": { + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dev": true, + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.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==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "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" + } + ] + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "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, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "node_modules/inquirer": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", + "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/inquirer-autocomplete-prompt-ipt": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "resolved": "https://registry.npmjs.org/inquirer-autocomplete-prompt-ipt/-/inquirer-autocomplete-prompt-ipt-2.0.0.tgz", + "integrity": "sha512-2qkl1lWeXbFN/O3+xdqJUdMfnNirvWKqgsgmhOjpOiVCcnJf+XYSEjFfdTgk+MDTtVt5AZiWR9Ji+f4YsWBdUw==", + "dev": true, "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "ansi-escapes": "^4.2.1", + "chalk": "^2.4.2", + "figures": "^3.1.0", + "run-async": "^2.3.0", + "rxjs": "^6.5.3" + }, + "engines": { + "node": ">=10" }, + "peerDependencies": { + "inquirer": ">=7" + } + }, + "node_modules/inquirer-autocomplete-prompt-ipt/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-autocomplete-prompt-ipt/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-autocomplete-prompt-ipt/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==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/inquirer-autocomplete-prompt-ipt/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==", + "dev": true + }, + "node_modules/inquirer-autocomplete-prompt-ipt/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/inquirer-autocomplete-prompt-ipt/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, "engines": { - "node": ">= 0.8" + "node": ">=4" } }, - "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==", + "node_modules/inquirer-autocomplete-prompt-ipt/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" + "tslib": "^1.9.0" }, "engines": { - "node": ">= 6" + "npm": ">=2.0.0" } }, - "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==", + "node_modules/inquirer-autocomplete-prompt-ipt/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "dependencies": { - "agent-base": "6", - "debug": "4" + "has-flag": "^3.0.0" }, "engines": { - "node": ">= 6" + "node": ">=4" } }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "node_modules/inquirer-autocomplete-prompt-ipt/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/inquirer/node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, - "engines": { - "node": ">=10.17.0" + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.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==", + "node_modules/inquirer/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "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" + } + ], "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "node_modules/inquirer/node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, "engines": { - "node": ">= 4" + "node": ">=8" } }, - "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 - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/inquirer/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, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "node_modules/inquirer/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, "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "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==", + "node_modules/inquirer/node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, "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==" - }, - "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==", + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, "engines": { - "node": ">= 0.10" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-arrayish": { @@ -4433,33 +3923,25 @@ "node": ">=8" } }, - "node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", "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" - } - ], + "dependencies": { + "builtin-modules": "^3.3.0" + }, "engines": { - "node": ">=4" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -4468,6 +3950,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -4481,6 +3978,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "engines": { "node": ">=8" } @@ -4506,6 +4004,24 @@ "node": ">=0.10.0" } }, + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -4515,24 +4031,51 @@ "node": ">=0.12.0" } }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "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, "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==", - "dev": true + "node_modules/is-port-reachable": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-port-reachable/-/is-port-reachable-3.1.0.tgz", + "integrity": "sha512-vjc0SSRNZ32s9SbZBzGaiP6YVB+xglLShhgZD/FHMZUXBvQWaV9CtzgeVhjccFJrI6RAMV+LX7NYxueW/A8W5A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-reachable": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/is-reachable/-/is-reachable-5.2.1.tgz", + "integrity": "sha512-ViPrrlmt9FTTclYbz6mL/PFyF1TXSpJ9y/zw9QMVJxbhU/7DFkvk/5cTv7S0sXtqbJj32zZ+jKpNAjrYTUZBPQ==", + "dev": true, + "dependencies": { + "arrify": "^2.0.1", + "got": "^11.7.0", + "is-port-reachable": "^3.0.0", + "p-any": "^3.0.0", + "p-timeout": "^3.2.0", + "prepend-http": "^3.0.1", + "router-ips": "^1.0.0", + "url-parse": "^1.5.10" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "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==", + "dev": true, "engines": { "node": ">=8" }, @@ -4540,16 +4083,29 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-stream-ended": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz", - "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==" + "node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } }, "node_modules/isexe": { "version": "2.0.0", @@ -4567,9 +4123,9 @@ } }, "node_modules/istanbul-lib-instrument": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", - "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, "dependencies": { "@babel/core": "^7.12.3", @@ -4582,15 +4138,6 @@ "node": ">=8" } }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", @@ -4605,18 +4152,6 @@ "node": ">=8" } }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "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", @@ -4631,15 +4166,6 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/istanbul-reports": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", @@ -4654,20 +4180,21 @@ } }, "node_modules/jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", - "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.4.3.tgz", + "integrity": "sha512-XvK65feuEFGZT8OO0fB/QAQS+LGHvQpaadkH5p47/j3Ocqq3xf2pK9R+G0GzgfuhXVxEv76qCOOcMb5efLk6PA==", "dev": true, "dependencies": { - "@jest/core": "^27.5.1", + "@jest/core": "^29.4.3", + "@jest/types": "^29.4.3", "import-local": "^3.0.2", - "jest-cli": "^27.5.1" + "jest-cli": "^29.4.3" }, "bin": { "jest": "bin/jest.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -4679,73 +4206,72 @@ } }, "node_modules/jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.4.3.tgz", + "integrity": "sha512-Vn5cLuWuwmi2GNNbokPOEcvrXGSGrqVnPEZV7rC6P7ck07Dyw9RFnvWglnupSh+hGys0ajGtw/bc2ZgweljQoQ==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", "execa": "^5.0.0", - "throat": "^6.0.1" + "p-limit": "^3.1.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.4.3.tgz", + "integrity": "sha512-Vw/bVvcexmdJ7MLmgdT3ZjkJ3LKu8IlpefYokxiqoZy6OCQ2VAm6Vk3t/qHiAGUXbdbJKJWnc8gH3ypTbB/OBw==", "dev": true, "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/environment": "^29.4.3", + "@jest/expect": "^29.4.3", + "@jest/test-result": "^29.4.3", + "@jest/types": "^29.4.3", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", - "expect": "^27.5.1", "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", + "jest-each": "^29.4.3", + "jest-matcher-utils": "^29.4.3", + "jest-message-util": "^29.4.3", + "jest-runtime": "^29.4.3", + "jest-snapshot": "^29.4.3", + "jest-util": "^29.4.3", + "p-limit": "^3.1.0", + "pretty-format": "^29.4.3", "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" + "stack-utils": "^2.0.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.4.3.tgz", + "integrity": "sha512-PiiAPuFNfWWolCE6t3ZrDXQc6OsAuM3/tVW0u27UWc1KE+n/HSn5dSE6B2juqN7WP+PP0jAcnKtGmI4u8GMYCg==", "dev": true, "dependencies": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/core": "^29.4.3", + "@jest/test-result": "^29.4.3", + "@jest/types": "^29.4.3", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-config": "^29.4.3", + "jest-util": "^29.4.3", + "jest-validate": "^29.4.3", "prompts": "^2.0.1", - "yargs": "^16.2.0" + "yargs": "^17.3.1" }, "bin": { "jest": "bin/jest.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -4757,254 +4283,210 @@ } }, "node_modules/jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.4.3.tgz", + "integrity": "sha512-eCIpqhGnIjdUCXGtLhz4gdDoxKSWXKjzNcc5r+0S1GKOp2fwOipx5mRcwa9GB/ArsxJ1jlj2lmlD9bZAsBxaWQ==", "dev": true, "dependencies": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.4.3", + "@jest/types": "^29.4.3", + "babel-jest": "^29.4.3", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", - "glob": "^7.1.1", + "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-circus": "^29.4.3", + "jest-environment-node": "^29.4.3", + "jest-get-type": "^29.4.3", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.4.3", + "jest-runner": "^29.4.3", + "jest-util": "^29.4.3", + "jest-validate": "^29.4.3", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", + "pretty-format": "^29.4.3", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { + "@types/node": "*", "ts-node": ">=9.0.0" }, "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, "ts-node": { "optional": true } } }, "node_modules/jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.4.3.tgz", + "integrity": "sha512-YB+ocenx7FZ3T5O9lMVMeLYV4265socJKtkwgk/6YUz/VsEzYDkiMuMhWzZmxm3wDRQvayJu/PjkjjSkjoHsCA==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "diff-sequences": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.4.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", + "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", "dev": true, "dependencies": { "detect-newline": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.4.3.tgz", + "integrity": "sha512-1ElHNAnKcbJb/b+L+7j0/w7bDvljw4gTv1wL9fYOczeJrbTbkMGQ5iQPFJ3eFQH19VPTx1IyfePdqSpePKss7Q==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", - "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" + "@jest/types": "^29.4.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.4.3", + "jest-util": "^29.4.3", + "pretty-format": "^29.4.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.4.3.tgz", + "integrity": "sha512-gAiEnSKF104fsGDXNkwk49jD/0N0Bqu2K9+aMQXA6avzsA9H3Fiv1PW2D+gzbOSR705bWd2wJZRFEFpV0tXISg==", "dev": true, "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/environment": "^29.4.3", + "@jest/fake-timers": "^29.4.3", + "@jest/types": "^29.4.3", "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" + "jest-mock": "^29.4.3", + "jest-util": "^29.4.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", + "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", "dev": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.4.3.tgz", + "integrity": "sha512-eZIgAS8tvm5IZMtKlR8Y+feEOMfo2pSQkmNbufdbMzMSn9nitgGxF1waM/+LbryO3OkMcKS98SUb+j/cQxp/vQ==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", + "@jest/types": "^29.4.3", + "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-regex-util": "^29.4.3", + "jest-util": "^29.4.3", + "jest-worker": "^29.4.3", "micromatch": "^4.0.4", - "walker": "^1.0.7" + "walker": "^1.0.8" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "optionalDependencies": { "fsevents": "^2.3.2" } }, - "node_modules/jest-jasmine2": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", - "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, "node_modules/jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.4.3.tgz", + "integrity": "sha512-9yw4VC1v2NspMMeV3daQ1yXPNxMgCzwq9BocCwYrRgXe4uaEJPAN0ZK37nFBhcy3cUwEVstFecFLaTHpF7NiGA==", "dev": true, "dependencies": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "jest-get-type": "^29.4.3", + "pretty-format": "^29.4.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.4.3.tgz", + "integrity": "sha512-TTciiXEONycZ03h6R6pYiZlSkvYgT0l8aa49z/DLSGYjex4orMUcafuLXYyyEDWB1RKglq00jzwY00Ei7yFNVg==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "jest-diff": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.4.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.4.3.tgz", + "integrity": "sha512-1Y8Zd4ZCN7o/QnWdMmT76If8LuDv23Z1DRovBj/vcSFNlGCJGoO8D1nJDw1AdyAGUk0myDLFGN5RbNeJyCRGCw==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", + "@jest/types": "^29.4.3", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", + "pretty-format": "^29.4.3", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-mock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", - "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.4.3.tgz", + "integrity": "sha512-LjFgMg+xed9BdkPMyIJh+r3KeHt1klXPJYBULXVVAkbTaaKjPX1o1uVCAZADMEp/kOxGTwy/Ot8XbvgItOrHEg==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*" + "@jest/types": "^29.4.3", + "@types/node": "*", + "jest-util": "^29.4.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, "engines": { "node": ">=6" @@ -5019,167 +4501,187 @@ } }, "node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", + "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", "dev": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-resolve": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", - "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.4.3.tgz", + "integrity": "sha512-GPokE1tzguRyT7dkxBim4wSx6E45S3bOQ7ZdKEG+Qj0Oac9+6AwJPCk0TZh5Vu0xzeX4afpb+eDmgbmZFFwpOw==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", + "jest-haste-map": "^29.4.3", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-util": "^29.4.3", + "jest-validate": "^29.4.3", "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", + "resolve.exports": "^2.0.0", "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-resolve-dependencies": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", - "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.4.3.tgz", + "integrity": "sha512-uvKMZAQ3nmXLH7O8WAOhS5l0iWyT3WmnJBdmIHiV5tBbdaDZ1wqtNX04FONGoaFvSOSHBJxnwAVnSn1WHdGVaw==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" + "jest-regex-util": "^29.4.3", + "jest-snapshot": "^29.4.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-runner": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.4.3.tgz", + "integrity": "sha512-GWPTEiGmtHZv1KKeWlTX9SIFuK19uLXlRQU43ceOQ2hIfA5yPEJC7AMkvFKpdCHx6pNEdOD+2+8zbniEi3v3gA==", "dev": true, "dependencies": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.4.3", + "@jest/environment": "^29.4.3", + "@jest/test-result": "^29.4.3", + "@jest/transform": "^29.4.3", + "@jest/types": "^29.4.3", "@types/node": "*", "chalk": "^4.0.0", - "emittery": "^0.8.1", + "emittery": "^0.13.1", "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" + "jest-docblock": "^29.4.3", + "jest-environment-node": "^29.4.3", + "jest-haste-map": "^29.4.3", + "jest-leak-detector": "^29.4.3", + "jest-message-util": "^29.4.3", + "jest-resolve": "^29.4.3", + "jest-runtime": "^29.4.3", + "jest-util": "^29.4.3", + "jest-watcher": "^29.4.3", + "jest-worker": "^29.4.3", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.4.3.tgz", + "integrity": "sha512-F5bHvxSH+LvLV24vVB3L8K467dt3y3dio6V3W89dUz9nzvTpqd/HcT9zfYKL2aZPvD63vQFgLvaUX/UpUhrP6Q==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.4.3", + "@jest/fake-timers": "^29.4.3", + "@jest/globals": "^29.4.3", + "@jest/source-map": "^29.4.3", + "@jest/test-result": "^29.4.3", + "@jest/transform": "^29.4.3", + "@jest/types": "^29.4.3", + "@types/node": "*", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^29.4.3", + "jest-message-util": "^29.4.3", + "jest-mock": "^29.4.3", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.4.3", + "jest-snapshot": "^29.4.3", + "jest-util": "^29.4.3", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.4.3.tgz", + "integrity": "sha512-NGlsqL0jLPDW91dz304QTM/SNO99lpcSYYAjNiX0Ou+sSGgkanKBcSjCfp/pqmiiO1nQaOyLp6XQddAzRcx3Xw==", "dev": true, "dependencies": { - "@babel/core": "^7.7.2", + "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.4.3", + "@jest/transform": "^29.4.3", + "@jest/types": "^29.4.3", + "@types/babel__traverse": "^7.0.6", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.5.1", + "expect": "^29.4.3", "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-diff": "^29.4.3", + "jest-get-type": "^29.4.3", + "jest-haste-map": "^29.4.3", + "jest-matcher-utils": "^29.4.3", + "jest-message-util": "^29.4.3", + "jest-util": "^29.4.3", "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" + "pretty-format": "^29.4.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/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==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=10" } }, + "node_modules/jest-snapshot/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.4.3.tgz", + "integrity": "sha512-ToSGORAz4SSSoqxDSylWX8JzkOQR7zoBtNRsA7e+1WUX5F8jrOwaNpuh1YfJHJKDHXLHmObv5eOjejUd+/Ws+Q==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.4.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -5187,24 +4689,24 @@ "picomatch": "^2.2.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-validate": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", - "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.4.3.tgz", + "integrity": "sha512-J3u5v7aPQoXPzaar6GndAVhdQcZr/3osWSgTeKg5v574I9ybX/dTyH0AJFb5XgXIB7faVhf+rS7t4p3lL9qFaw==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.4.3", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", + "jest-get-type": "^29.4.3", "leven": "^3.1.0", - "pretty-format": "^27.5.1" + "pretty-format": "^29.4.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-validate/node_modules/camelcase": { @@ -5220,35 +4722,76 @@ } }, "node_modules/jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.4.3.tgz", + "integrity": "sha512-zwlXH3DN3iksoIZNk73etl1HzKyi5FuQdYLnkQKm5BW4n8HpoG59xSwpVdFrnh60iRRaRBGw0gcymIxjJENPcA==", "dev": true, "dependencies": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/test-result": "^29.4.3", + "@jest/types": "^29.4.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.5.1", + "emittery": "^0.13.1", + "jest-util": "^29.4.3", "string-length": "^4.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.4.3.tgz", + "integrity": "sha512-GLHN/GTAAMEy5BFdvpUfzr9Dr80zQqBrh0fz1mtRMe05hqP45+HfQltu7oTBfduD0UeZs09d+maFtFYAXFWvAA==", "dev": true, "dependencies": { "@types/node": "*", + "jest-util": "^29.4.3", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-cleanup": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/js-cleanup/-/js-cleanup-1.2.0.tgz", + "integrity": "sha512-JeDD0yiiSt80fXzAVa/crrS0JDPQljyBG/RpOtaSbyDq03VHa9szJWMaWOYU/bcTn412uMN2MxApXq8v79cUiQ==", + "dev": true, + "dependencies": { + "magic-string": "^0.25.7", + "perf-regexes": "^1.0.1", + "skip-regex": "^1.0.2" + }, + "engines": { + "node": "^10.14.2 || >=12.0.0" + } + }, + "node_modules/js-sdsl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", + "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" } }, "node_modules/js-tokens": { @@ -5258,63 +4801,18 @@ "dev": true }, "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==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "dependencies": { - "argparse": "^2.0.1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -5331,10 +4829,17 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dev": true, "dependencies": { "bignumber.js": "^9.0.0" } }, + "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 + }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -5354,9 +4859,9 @@ "dev": true }, "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, "bin": { "json5": "lib/cli.js" @@ -5365,10 +4870,23 @@ "node": ">=6" } }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/jwa": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "dev": true, "dependencies": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", @@ -5379,11 +4897,21 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "dev": true, "dependencies": { "jwa": "^2.0.0", "safe-buffer": "^5.0.1" } }, + "node_modules/keyv": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", + "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -5393,11 +4921,6 @@ "node": ">=6" } }, - "node_modules/kuler": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" - }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -5444,16 +4967,6 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" - }, - "node_modules/lodash.mapvalues": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", - "integrity": "sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==" - }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -5466,37 +4979,72 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "node_modules/lodash.snakecase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" - }, - "node_modules/logform": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.4.2.tgz", - "integrity": "sha512-W4c9himeAwXEdZ05dQNerhFz2XG80P9Oj0loPUMV23VC2it0orMHQhJm4hdnnor3rd1HsGf6a2lPwBM1zeXHGw==", + "node_modules/log-symbols": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", + "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", + "dev": true, "dependencies": { - "@colors/colors": "1.5.0", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", - "triple-beam": "^1.3.0" + "chalk": "^5.0.0", + "is-unicode-supported": "^1.1.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + "node_modules/log-symbols/node_modules/chalk": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } }, - "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==", + "node_modules/loud-rejection": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-2.2.0.tgz", + "integrity": "sha512-S0FayMXku80toa5sZ6Ro4C+s+EtFDCsyJNG/AzFMfX3AxD5Si4dZsgzm/kKnbOxHl5Cv8jBlno8+3XYIh2pNjQ==", + "dev": true, "dependencies": { - "yallist": "^4.0.0" + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">=10" + "node": ">=8" + } + }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" } }, "node_modules/make-dir": { @@ -5514,15 +5062,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -5538,42 +5077,12 @@ "tmpl": "1.0.5" } }, - "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==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -5587,36 +5096,6 @@ "node": ">=8.6" } }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "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==", - "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==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -5626,6 +5105,15 @@ "node": ">=6" } }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -5638,15 +5126,36 @@ "node": "*" } }, - "node_modules/module-alias": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.2.tgz", - "integrity": "sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q==" - }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/multimatch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", + "dev": true, + "dependencies": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true }, "node_modules/natural-compare": { "version": "1.4.0", @@ -5654,18 +5163,11 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "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==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", + "dev": true, "dependencies": { "whatwg-url": "^5.0.0" }, @@ -5681,29 +5183,11 @@ } } }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/node-forge": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, "engines": { "node": ">= 6.13.0" } @@ -5715,94 +5199,74 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", "dev": true }, - "node_modules/nodemon": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.19.tgz", - "integrity": "sha512-4pv1f2bMDj0Eeg/MhGqxrtveeQ5/G/UVe9iO6uTZzjnRluSA4PVWf8CW99LUPwGB3eNIA7zUFoP77YuI7hOc0A==", + "node_modules/normalize-newline": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/normalize-newline/-/normalize-newline-4.1.0.tgz", + "integrity": "sha512-ff4jKqMI8Xl50/4Mms/9jPobzAV/UK+kXG2XJ/7AqOmxIx8mqfqTIHYxuAnEgJ2AQeBbLnlbmZ5+38Y9A0w/YA==", "dev": true, - "hasInstallScript": true, "dependencies": { - "chokidar": "^3.5.2", - "debug": "^3.2.7", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", - "pstree.remy": "^1.1.8", - "semver": "^5.7.1", - "simple-update-notifier": "^1.0.7", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" + "replace-buffer": "^1.2.1" }, "engines": { - "node": ">=8.10.0" + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/nodemon/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "dependencies": { - "ms": "^2.1.1" - } - }, - "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, + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, "engines": { - "node": ">=4" - } - }, - "node_modules/nodemon/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" + "node": ">=10" } }, - "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==", + "node_modules/normalize-package-data/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==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "node_modules/normalize-package-data/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "dependencies": { - "abbrev": "1" + "lru-cache": "^6.0.0" }, "bin": { - "nopt": "bin/nopt.js" + "semver": "bin/semver.js" }, "engines": { - "node": "*" + "node": ">=10" } }, + "node_modules/normalize-package-data/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -5812,6 +5276,18 @@ "node": ">=0.10.0" } }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -5824,76 +5300,24 @@ "node": ">=8" } }, - "node_modules/nwsapi": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.1.tgz", - "integrity": "sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg==", - "dev": true - }, - "node_modules/oauth": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.10.0.tgz", - "integrity": "sha512-1orQ9MT1vHFGQxhuy7E/0gECD3fd2fCC+PIX+/jgmU/gI3EpRocXtmtvxCO5x3WZ443FLTLFWNDjl5MPJf9u+Q==" - }, - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "engines": { - "node": ">= 6" - } - }, "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, "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==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "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==", + "dev": true, "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==", - "dependencies": { - "fn.name": "1.x.x" - } - }, "node_modules/onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", @@ -5909,6 +5333,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -5926,18 +5367,147 @@ "node": ">= 0.8.0" } }, - "node_modules/p-defer": { + "node_modules/ora": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/ora/-/ora-6.1.2.tgz", + "integrity": "sha512-EJQ3NiP5Xo94wJXIzAyOtSb0QEIAUu7m8t6UZ9krbz0vAJqr92JpcK/lEXg91q6B9pEGqrykkd2EQplnifDSBw==", + "dev": true, + "dependencies": { + "bl": "^5.0.0", + "chalk": "^5.0.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.6.1", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^1.1.0", + "log-symbols": "^5.1.0", + "strip-ansi": "^7.0.1", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-any": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-3.0.0.tgz", - "integrity": "sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==", + "resolved": "https://registry.npmjs.org/p-any/-/p-any-3.0.0.tgz", + "integrity": "sha512-5rqbqfsRWNb0sukt0awwgJMlaep+8jV45S15SKKB34z4UuzjcofIfnriCBhWjZP2jbVtjt9yRl7buB6RlKsu9w==", + "dev": true, + "dependencies": { + "p-cancelable": "^2.0.0", + "p-some": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true, "engines": { "node": ">=8" } }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "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, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -5975,6 +5545,80 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-map": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", + "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", + "dev": true, + "dependencies": { + "aggregate-error": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-some": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-some/-/p-some-5.0.0.tgz", + "integrity": "sha512-Js5XZxo6vHjB9NOYAzWDYAIyyiPvva0DWESAIWIK7uhSpGsyg5FwUPxipU/SOQx5x9EqhOh545d1jo6cVkitig==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0", + "p-cancelable": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-some/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, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-some/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-some/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "dependencies": { + "p-finally": "^1.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", @@ -6014,74 +5658,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/passport": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/passport/-/passport-0.5.3.tgz", - "integrity": "sha512-gGc+70h4gGdBWNsR3FuV3byLDY6KBTJAIExGFXTpQaYfbbcHCBlRRKx7RBQSpqEqc5Hh2qVzRs7ssvSfOpkUEA==", - "dependencies": { - "passport-strategy": "1.x.x", - "pause": "0.0.1" - }, - "engines": { - "node": ">= 0.4.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/jaredhanson" - } - }, - "node_modules/passport-google-oauth20": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/passport-google-oauth20/-/passport-google-oauth20-2.0.0.tgz", - "integrity": "sha512-KSk6IJ15RoxuGq7D1UKK/8qKhNfzbLeLrG3gkLZ7p4A6DBCcv7xpyQwuXtWdpyR0+E0mwkpjY1VfPOhxQrKzdQ==", - "dependencies": { - "passport-oauth2": "1.x.x" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/passport-oauth2": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.6.1.tgz", - "integrity": "sha512-ZbV43Hq9d/SBSYQ22GOiglFsjsD1YY/qdiptA+8ej+9C1dL1TVB+mBE5kDH/D4AJo50+2i8f4bx0vg4/yDDZCQ==", - "dependencies": { - "base64url": "3.x.x", - "oauth": "0.10.x", - "passport-strategy": "1.x.x", - "uid2": "0.0.x", - "utils-merge": "1.x.x" - }, - "engines": { - "node": ">= 0.4.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/jaredhanson" - } - }, - "node_modules/passport-strategy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", - "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==", - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -6115,25 +5691,15 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "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": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "node_modules/perf-regexes": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/perf-regexes/-/perf-regexes-1.0.1.tgz", + "integrity": "sha512-L7MXxUDtqr4PUaLFCDCXBfGV/6KLIuSEccizDI7JxT+c9x1G1v04BQ4+4oag84SHaCdrBgQAIs/Cqn+flwFPng==", "dev": true, "engines": { - "node": ">=8" + "node": ">=6.14" } }, - "node_modules/pause": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", - "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==" - }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -6182,10 +5748,19 @@ "node": ">= 0.8.0" } }, + "node_modules/prepend-http": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-3.0.1.tgz", + "integrity": "sha512-BLxfZh+m6UiAiCPZFJ4+vYoL7NrRs5XgCTRrjseATAggXhdZKKxn+JUNmuVYWY23bDHgaEHodxw8mnmtVEDtHw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", + "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", "dev": true, "bin": { "prettier": "bin-prettier.js" @@ -6210,17 +5785,17 @@ } }, "node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", + "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.1", + "@jest/schemas": "^29.4.3", "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" + "react-is": "^18.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/pretty-format/node_modules/ansi-styles": { @@ -6248,95 +5823,30 @@ "node": ">= 6" } }, - "node_modules/proto3-json-serializer": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-0.1.9.tgz", - "integrity": "sha512-A60IisqvnuI45qNRygJjrnNjX2TMdQGMY+57tR3nul3ZgO2zXkR9OGR8AXxJhkqx84g0FTnrfi3D5fWMSdANdQ==", - "dependencies": { - "protobufjs": "^6.11.2" - } - }, - "node_modules/protobufjs": { - "version": "6.11.3", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", - "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", - "hasInstallScript": true, - "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/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^4.0.0" - }, - "bin": { - "pbjs": "bin/pbjs", - "pbts": "bin/pbts" - } - }, - "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==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "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 - }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, - "node_modules/pumpify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz", - "integrity": "sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==", - "dependencies": { - "duplexify": "^4.1.1", - "inherits": "^2.0.3", - "pump": "^3.0.0" - } - }, "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, "dependencies": { "side-channel": "^1.0.4" }, @@ -6347,6 +5857,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -6367,46 +5883,134 @@ } ] }, - "node_modules/random-bytes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", - "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==", + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, "engines": { - "node": ">= 0.8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/read-pkg": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", + "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^3.0.2", + "parse-json": "^5.2.0", + "type-fest": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", + "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", + "dev": true, + "dependencies": { + "find-up": "^5.0.0", + "read-pkg": "^6.0.0", + "type-fest": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/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, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "node_modules/read-pkg-up/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, "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "p-locate": "^5.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true + "node_modules/read-pkg-up/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, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -6428,6 +6032,18 @@ "node": ">=8.10.0" } }, + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", @@ -6440,14 +6056,30 @@ "url": "https://github.com/sponsors/mysticatea" } }, + "node_modules/replace-buffer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/replace-buffer/-/replace-buffer-1.2.1.tgz", + "integrity": "sha512-ly3OKwKu+3T55DjP5PjIMzxgz9lFx6dQnBmAIxryZyRKl8f22juy12ShOyuq8WrQE5UlFOseZgQZDua0iF9DHw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "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, "engines": { "node": ">=0.10.0" } }, + "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==", + "dev": true + }, "node_modules/resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", @@ -6465,6 +6097,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true + }, "node_modules/resolve-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", @@ -6477,7 +6115,7 @@ "node": ">=8" } }, - "node_modules/resolve-cwd/node_modules/resolve-from": { + "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==", @@ -6486,34 +6124,38 @@ "node": ">=8" } }, - "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==", + "node_modules/resolve.exports": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.0.tgz", + "integrity": "sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg==", "dev": true, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/retry-request": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-4.2.2.tgz", - "integrity": "sha512-xA93uxUD/rogV7BV59agW/JHPGXeREMWiZc9jhcwY4YdZ7QOtC7qbomYg0n4wyk2lJhggjvKvhNX8wln/Aldhg==", + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, "dependencies": { - "debug": "^4.1.1", - "extend": "^3.0.2" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">=8.10.0" + "node": ">=8" } }, "node_modules/reusify": { @@ -6541,6 +6183,71 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rollup": { + "version": "3.17.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.17.2.tgz", + "integrity": "sha512-qMNZdlQPCkWodrAZ3qnJtvCAl4vpQ8q77uEujVCCbC/6CLB7Lcmvjq7HyiOSnf4fxTT9XgsE36oLHJBH49xjqA==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-cleanup": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-cleanup/-/rollup-plugin-cleanup-3.2.1.tgz", + "integrity": "sha512-zuv8EhoO3TpnrU8MX8W7YxSbO4gmOR0ny06Lm3nkFfq0IVKdBUtHwhVzY1OAJyNCIAdLiyPnOrU0KnO0Fri1GQ==", + "dev": true, + "dependencies": { + "js-cleanup": "^1.2.0", + "rollup-pluginutils": "^2.8.2" + }, + "engines": { + "node": "^10.14.2 || >=12.0.0" + }, + "peerDependencies": { + "rollup": ">=2.0" + } + }, + "node_modules/rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "dependencies": { + "estree-walker": "^0.6.1" + } + }, + "node_modules/rollup-pluginutils/node_modules/estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, + "node_modules/router-ips": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/router-ips/-/router-ips-1.0.0.tgz", + "integrity": "sha512-yBo6F52Un/WYioXbedBGvrKIiofbwt+4cUhdqDb9fNMJBI4D4jOy7jlxxaRVEvICPKU7xMmJDtDFR6YswX/sFQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -6565,21 +6272,19 @@ } }, "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", "dev": true, "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" + "tslib": "^2.1.0" } }, "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==", + "dev": true, "funding": [ { "type": "github", @@ -6595,104 +6300,26 @@ } ] }, - "node_modules/safe-stable-stringify": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.3.1.tgz", - "integrity": "sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg==", - "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==" - }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, "bin": { "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "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/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" } }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "node_modules/server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==", + "dev": true }, "node_modules/shebang-command": { "version": "2.0.0", @@ -6719,6 +6346,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -6734,97 +6362,138 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "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==", - "dependencies": { - "is-arrayish": "^0.3.1" + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/skip-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/skip-regex/-/skip-regex-1.0.2.tgz", + "integrity": "sha512-pEjMUbwJ5Pl/6Vn6FsamXHXItJXSRftcibixDmNCWbWhic0hzHrwkMZo0IZ7fMRH9KxcWDFSkzhccB4285PutA==", + "dev": true, + "engines": { + "node": ">=4.2" } }, - "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==" + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "node_modules/simple-update-notifier": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", - "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, "dependencies": { - "semver": "~7.0.0" + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" }, "engines": { - "node": ">=8.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/simple-update-notifier/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "node_modules/slice-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, - "bin": { - "semver": "bin/semver.js" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "engines": { - "node": ">= 8" + "node": ">=0.10.0" } }, "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, - "node_modules/source-map-support/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==", + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "dev": true + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/spawn-command": { - "version": "0.0.2-1", - "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", - "integrity": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==", + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, - "node_modules/split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, "dependencies": { - "through": "2" - }, + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", + "dev": true + }, + "node_modules/split-lines": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/split-lines/-/split-lines-3.0.0.tgz", + "integrity": "sha512-d0TpRBL/VfKDXsk8JxPF7zgF5pCUDdBMSlEL36xBgVeaX448t+yGXcJaikUyzkoKOJ0l6KpMfygzJU9naIuivw==", + "dev": true, "engines": { - "node": "*" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/sprintf-js": { @@ -6833,18 +6502,10 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, - "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==", - "engines": { - "node": "*" - } - }, "node_modules/stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, "dependencies": { "escape-string-regexp": "^2.0.0" @@ -6853,40 +6514,11 @@ "node": ">=10" } }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/stream-events": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", - "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", - "dependencies": { - "stubs": "^3.0.0" - } - }, - "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" - }, "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==", + "dev": true, "dependencies": { "safe-buffer": "~5.2.0" } @@ -6908,6 +6540,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -6921,6 +6554,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -6958,40 +6592,7 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stubs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", - "integrity": "sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==" - }, "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, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -7015,64 +6616,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "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==", - "dev": true - }, - "node_modules/teeny-request": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-7.2.0.tgz", - "integrity": "sha512-SyY0pek1zWsi0LRVAALem+avzMLc33MKW/JLLakdP4s9+D7+jHcy5x6P+h94g2QNZsAqQNfX5lsbd3WSeJXrrw==", - "dependencies": { - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "node-fetch": "^2.6.1", - "stream-events": "^1.0.5", - "uuid": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/teeny-request/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==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/teeny-request/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==", - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -7087,27 +6630,29 @@ "node": ">=8" } }, - "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==" - }, "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 }, - "node_modules/throat": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", - "dev": true - }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } }, "node_modules/tmpl": { "version": "1.0.5", @@ -7136,99 +6681,45 @@ "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==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "dependencies": { - "nopt": "~1.0.10" - }, - "bin": { - "nodetouch": "bin/nodetouch.js" - } - }, - "node_modules/tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", - "dev": true, - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true }, "node_modules/ts-jest": { - "version": "27.1.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.5.tgz", - "integrity": "sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==", + "version": "29.0.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.0.5.tgz", + "integrity": "sha512-PL3UciSgIpQ7f6XjVOmbi96vmDHUqAyqDr8YxzopDqX3kfgYtX1cuNeBjP+L9sFXi6nzsGGA6R3fP3DDDJyrxA==", "dev": true, "dependencies": { "bs-logger": "0.x", "fast-json-stable-stringify": "2.x", - "jest-util": "^27.0.0", - "json5": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", "lodash.memoize": "4.x", "make-error": "1.x", "semver": "7.x", - "yargs-parser": "20.x" + "yargs-parser": "^21.0.1" }, "bin": { "ts-jest": "cli.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", - "@types/jest": "^27.0.0", - "babel-jest": ">=27.0.0 <28", - "jest": "^27.0.0", - "typescript": ">=3.8 <5.0" + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3" }, "peerDependenciesMeta": { "@babel/core": { "optional": true }, - "@types/jest": { + "@jest/types": { "optional": true }, "babel-jest": { @@ -7239,79 +6730,70 @@ } } }, - "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "node_modules/ts-jest/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==", "dev": true, "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" + "yallist": "^4.0.0" }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } + "engines": { + "node": ">=10" } }, - "node_modules/ts-node/node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "node_modules/ts-jest/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">=0.4.0" + "node": ">=10" } }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "node_modules/ts-jest/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "node_modules/ts2gas": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ts2gas/-/ts2gas-4.2.0.tgz", + "integrity": "sha512-5xZugaeM3wKQPj/vrWnrtYjNh4xnIz6cGSW/smCe9OTmkh1+KvHpm7M7HLq/OnBaljf4+yKctC4AYimBi4T1/Q==", + "dev": true, + "dependencies": { + "type-fest": "^2.1.0", + "typescript": "^4.4.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/ts2gas/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, "engines": { - "node": ">= 6" + "node": ">=12.20" }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", + "dev": true + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -7334,9 +6816,9 @@ } }, "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==", + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, "engines": { "node": ">=10" @@ -7345,31 +6827,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "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, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, "node_modules/typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -7379,49 +6840,19 @@ "node": ">=4.2.0" } }, - "node_modules/uid-safe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", - "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", - "dependencies": { - "random-bytes": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/uid2": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz", - "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA==" - }, - "node_modules/undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "dev": true - }, "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, "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==", - "engines": { - "node": ">= 0.8" + "node": ">= 10.0.0" } }, "node_modules/update-browserslist-db": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", - "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", "dev": true, "funding": [ { @@ -7453,85 +6884,65 @@ "punycode": "^2.1.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==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "node_modules/url-template": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", - "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==" + "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==", + "dev": true }, "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==" - }, - "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==", - "engines": { - "node": ">= 0.4.0" - } + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true }, "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, "bin": { "uuid": "dist/bin/uuid" } }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, "node_modules/v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", + "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", "dev": true, "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" + "convert-source-map": "^1.6.0" }, "engines": { "node": ">=10.12.0" } }, - "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==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } + "node_modules/v8-to-istanbul/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 }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "node_modules/walker": { @@ -7543,42 +6954,29 @@ "makeerror": "1.0.12" } }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true, - "engines": { - "node": ">=10.4" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, "dependencies": { - "iconv-lite": "0.4.24" + "defaults": "^1.0.3" } }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "dev": true }, "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, "node_modules/which": { @@ -7596,39 +6994,6 @@ "node": ">= 8" } }, - "node_modules/winston": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.8.1.tgz", - "integrity": "sha512-r+6YAiCR4uI3N8eQNOg8k3P3PqwAm20cLKlzVD9E66Ch39+LZC+VH1UKf9JemQj2B3QoUHfKD7Poewn0Pr3Y1w==", - "dependencies": { - "@dabh/diagnostics": "^2.0.2", - "async": "^3.2.3", - "is-stream": "^2.0.0", - "logform": "^2.4.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" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/winston-transport": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz", - "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==", - "dependencies": { - "logform": "^2.3.2", - "readable-stream": "^3.6.0", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 6.4.0" - } - }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -7642,6 +7007,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -7657,104 +7023,69 @@ "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==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, "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==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, "dependencies": { "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "signal-exit": "^3.0.7" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, "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, "engines": { "node": ">=10" } }, "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true }, "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "dev": true, "dependencies": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.1.1" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, "engines": { - "node": ">=6" + "node": ">=12" } }, "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, "engines": { "node": ">=10" }, @@ -7784,50 +7115,51 @@ } }, "@babel/compat-data": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", - "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz", + "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==", "dev": true }, "@babel/core": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.9.tgz", - "integrity": "sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.0.tgz", + "integrity": "sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA==", "dev": true, "requires": { - "@ampproject/remapping": "^2.1.0", + "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.9", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helpers": "^7.18.9", - "@babel/parser": "^7.18.9", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9", + "@babel/generator": "^7.21.0", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-module-transforms": "^7.21.0", + "@babel/helpers": "^7.21.0", + "@babel/parser": "^7.21.0", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", + "json5": "^2.2.2", "semver": "^6.3.0" }, "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "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 } } }, "@babel/generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.9.tgz", - "integrity": "sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug==", + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz", + "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==", "dev": true, "requires": { - "@babel/types": "^7.18.9", + "@babel/types": "^7.21.0", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "dependencies": { @@ -7845,23 +7177,16 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", - "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", + "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.18.8", + "@babel/compat-data": "^7.20.5", "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } } }, "@babel/helper-environment-visitor": { @@ -7871,13 +7196,13 @@ "dev": true }, "@babel/helper-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", - "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", "dev": true, "requires": { - "@babel/template": "^7.18.6", - "@babel/types": "^7.18.9" + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" } }, "@babel/helper-hoist-variables": { @@ -7899,34 +7224,34 @@ } }, "@babel/helper-module-transforms": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", - "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.0.tgz", + "integrity": "sha512-eD/JQ21IG2i1FraJnTMbUarAUkA7G988ofehG5MDCRXaUU91rEBJuCeSoou2Sk1y4RbLYXzqEg1QLwEmRU4qcQ==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0" } }, "@babel/helper-plugin-utils": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", - "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", "dev": true }, "@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", "dev": true, "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.20.2" } }, "@babel/helper-split-export-declaration": { @@ -7938,27 +7263,33 @@ "@babel/types": "^7.18.6" } }, + "@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "dev": true + }, "@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", "dev": true }, "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", + "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", "dev": true }, "@babel/helpers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", - "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", + "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", "dev": true, "requires": { - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0" } }, "@babel/highlight": { @@ -8031,9 +7362,9 @@ } }, "@babel/parser": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.9.tgz", - "integrity": "sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg==", + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.1.tgz", + "integrity": "sha512-JzhBFpkuhBNYUY7qs+wTzNmyCWUHEaAFpQQD2YfU1rPL38/L43Wvid0fFkiOCnHvsGncRZgEPyGnltABLcVDTg==", "dev": true }, "@babel/plugin-syntax-async-generators": { @@ -8081,6 +7412,15 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, "@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", @@ -8145,58 +7485,51 @@ } }, "@babel/plugin-syntax-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", - "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", + "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.19.0" } }, "@babel/template": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", - "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", "dev": true, "requires": { "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.6", - "@babel/types": "^7.18.6" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" } }, "@babel/traverse": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.9.tgz", - "integrity": "sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.0.tgz", + "integrity": "sha512-Xdt2P1H4LKTO8ApPfnO1KmzYMFpp7D/EinoXzLYN/cHcBNrVCAkAtGUcXnHXrl/VGktureU6fkQrHSBE2URfoA==", "dev": true, "requires": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.9", + "@babel/generator": "^7.21.0", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.9", - "@babel/types": "^7.18.9", + "@babel/parser": "^7.21.0", + "@babel/types": "^7.21.0", "debug": "^4.1.0", "globals": "^11.1.0" - }, - "dependencies": { - "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 - } } }, "@babel/types": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz", - "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.0.tgz", + "integrity": "sha512-uR7NWq2VNFnDi7EYqiRz2Jv/VQIu38tu64Zy8TX2nQFQ6etJ9V/Rr2msW8BS132mum2rL645qpDrLtAJtVpuow==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.18.6", + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" } }, @@ -8205,317 +7538,168 @@ "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true - }, - "@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==" - }, - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - } - } - }, - "@dabh/diagnostics": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", - "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", - "requires": { - "colorspace": "1.1.x", - "enabled": "2.0.x", - "kuler": "^2.0.0" - } - }, - "@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.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" - } - }, - "@google-cloud/common": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-3.10.0.tgz", - "integrity": "sha512-XMbJYMh/ZSaZnbnrrOFfR/oQrb0SxG4qh6hDisWCoEbFcBHV0qHQo4uXfeMCzolx2Mfkh6VDaOGg+hyJsmxrlw==", - "requires": { - "@google-cloud/projectify": "^2.0.0", - "@google-cloud/promisify": "^2.0.0", - "arrify": "^2.0.1", - "duplexify": "^4.1.1", - "ent": "^2.2.0", - "extend": "^3.0.2", - "google-auth-library": "^7.14.0", - "retry-request": "^4.2.2", - "teeny-request": "^7.0.0" - } - }, - "@google-cloud/connect-firestore": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@google-cloud/connect-firestore/-/connect-firestore-2.0.2.tgz", - "integrity": "sha512-2sIqeEYetoGQYKjoVkJgGWrBdR83S8ru0ri1eFlgEib/nAas86oIQVVjCefH2YaNiXTng28AMf1YCspSiW8YlQ==", - "requires": {} - }, - "@google-cloud/debug-agent": { - "version": "5.2.9", - "resolved": "https://registry.npmjs.org/@google-cloud/debug-agent/-/debug-agent-5.2.9.tgz", - "integrity": "sha512-VnHwkQqWawSLsN1EXCmox3//jhehoV0kCI7bgsaBARF3B+/U2p1CCGbF05JNj/Z6S5g8C9ZQIbWCSLD4P1mcYQ==", - "requires": { - "@google-cloud/common": "^3.0.0", - "acorn": "^8.0.0", - "coffeescript": "^2.0.0", - "console-log-level": "^1.4.0", - "extend": "^3.0.2", - "findit2": "^2.2.3", - "gcp-metadata": "^4.0.0", - "p-limit": "^3.0.1", - "semver": "^7.0.0", - "source-map": "^0.7.3", - "split": "^1.0.0" - } - }, - "@google-cloud/firestore": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-4.15.1.tgz", - "integrity": "sha512-2PWsCkEF1W02QbghSeRsNdYKN1qavrHBP3m72gPDMHQSYrGULOaTi7fSJquQmAtc4iPVB2/x6h80rdLHTATQtA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "functional-red-black-tree": "^1.0.1", - "google-gax": "^2.24.1", - "protobufjs": "^6.8.6" - } - }, - "@google-cloud/logging": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/@google-cloud/logging/-/logging-9.9.0.tgz", - "integrity": "sha512-rJQ0i9COI1WbtWuGyXL8edF4OA3XHcvgAq5I2DZmjKFvmCLCcspFIWZtztxgd0UgmrrshQVZ0R76oBHjTGggkg==", - "requires": { - "@google-cloud/common": "^3.4.1", - "@google-cloud/paginator": "^3.0.0", - "@google-cloud/projectify": "^2.0.0", - "@google-cloud/promisify": "^2.0.0", - "arrify": "^2.0.1", - "dot-prop": "^6.0.0", - "eventid": "^2.0.0", - "extend": "^3.0.2", - "gcp-metadata": "^4.0.0", - "google-auth-library": "^7.0.0", - "google-gax": "^2.24.1", - "on-finished": "^2.3.0", - "pumpify": "^2.0.1", - "stream-events": "^1.0.5", - "uuid": "^8.0.0" - } - }, - "@google-cloud/logging-winston": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@google-cloud/logging-winston/-/logging-winston-4.2.4.tgz", - "integrity": "sha512-As2h5hH6Y+5AGeqL51tPLASrfvIbuY7awePCnHuTHIGwpikUtGCpYWe2/AuufXmDB5z5c1fjoCJDkIbrx8SBhA==", - "requires": { - "@google-cloud/logging": "^9.6.9", - "google-auth-library": "^7.0.0", - "lodash.mapvalues": "^4.6.0", - "winston-transport": "^4.3.0" - } - }, - "@google-cloud/paginator": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-3.0.7.tgz", - "integrity": "sha512-jJNutk0arIQhmpUUQJPJErsojqo834KcyB6X7a1mxuic8i1tKXxde8E69IZxNZawRIlZdIK2QY4WALvlK5MzYQ==", - "requires": { - "arrify": "^2.0.0", - "extend": "^3.0.2" - } - }, - "@google-cloud/precise-date": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@google-cloud/precise-date/-/precise-date-2.0.4.tgz", - "integrity": "sha512-nOB+mZdevI/1Si0QAfxWfzzIqFdc7wrO+DYePFvgbOoMtvX+XfFTINNt7e9Zg66AbDbWCPRnikU+6f5LTm9Wyg==" - }, - "@google-cloud/projectify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-2.1.1.tgz", - "integrity": "sha512-+rssMZHnlh0twl122gXY4/aCrk0G1acBqkHFfYddtsqpYXGxA29nj9V5V9SfC+GyOG00l650f6lG9KL+EpFEWQ==" - }, - "@google-cloud/promisify": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-2.0.4.tgz", - "integrity": "sha512-j8yRSSqswWi1QqUGKVEKOG03Q7qOoZP6/h2zN2YO+F5h2+DHU0bSrHCK9Y7lo2DI9fBd8qGAw795sf+3Jva4yA==" - }, - "@google-cloud/pubsub": { - "version": "2.19.4", - "resolved": "https://registry.npmjs.org/@google-cloud/pubsub/-/pubsub-2.19.4.tgz", - "integrity": "sha512-+aZxq6N5XGarQS3xGXjKSRFy4TB+3PMpI0CBmSrcC59g3TB5nmwps3pv/KkdLa0Cd+CPHDdfrEW1uSrGBMLICw==", - "requires": { - "@google-cloud/paginator": "^3.0.6", - "@google-cloud/precise-date": "^2.0.0", - "@google-cloud/projectify": "^2.0.0", - "@google-cloud/promisify": "^2.0.0", - "@opentelemetry/api": "^1.0.0", - "@opentelemetry/semantic-conventions": "^1.0.0", - "@types/duplexify": "^3.6.0", - "@types/long": "^4.0.0", - "arrify": "^2.0.0", - "extend": "^3.0.2", - "google-auth-library": "^7.0.0", - "google-gax": "2.30.3", - "is-stream-ended": "^0.1.4", - "lodash.snakecase": "^4.1.1", - "p-defer": "^3.0.0" + }, + "@eslint/eslintrc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", + "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.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" }, "dependencies": { - "@grpc/proto-loader": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.9.tgz", - "integrity": "sha512-UlcCS8VbsU9d3XTXGiEVFonN7hXk+oMXZtoHHG2oSA1/GcDP1q6OUgs20PzHDGizzyi8ufGSUDlk3O2NyY7leg==", - "requires": { - "@types/long": "^4.0.1", - "lodash.camelcase": "^4.3.0", - "long": "^4.0.0", - "protobufjs": "^6.10.0", - "yargs": "^16.2.0" - } + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, - "google-gax": { - "version": "2.30.3", - "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-2.30.3.tgz", - "integrity": "sha512-Zsd6hbJBMvAcJS3cYpAsmupvfsxygFR2meUZJcGeR7iUqYHCR/1Hf2aQNB9srrlXQMm91pNiUvW0Kz6Qld8QkA==", + "globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, "requires": { - "@grpc/grpc-js": "~1.6.0", - "@grpc/proto-loader": "0.6.9", - "@types/long": "^4.0.0", - "abort-controller": "^3.0.0", - "duplexify": "^4.0.0", - "fast-text-encoding": "^1.0.3", - "google-auth-library": "^7.14.0", - "is-stream-ended": "^0.1.4", - "node-fetch": "^2.6.1", - "object-hash": "^3.0.0", - "proto3-json-serializer": "^0.1.8", - "protobufjs": "6.11.2", - "retry-request": "^4.0.0" + "type-fest": "^0.20.2" } }, - "protobufjs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", - "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", + "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, "requires": { - "@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/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^4.0.0" + "argparse": "^2.0.1" } + }, + "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 } } }, - "@grpc/grpc-js": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.6.8.tgz", - "integrity": "sha512-Nt5tufF/O5Q310kP0cDzxznWMZW58GCTZhUUiAQ9B0K0ANKNQ4Lj/K9XK0vZg+UBKq5/7z7+8mXHHfrcwoeFJQ==", + "@google/clasp": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@google/clasp/-/clasp-2.4.2.tgz", + "integrity": "sha512-SrHzWSotR8c7mNBVwH81sFCc4HhoDrCevicJehQlvrvgdTvLIiU0Pfb5EYCzWUPBSC4Ez/nvW6wxsgaK7RrPjQ==", + "dev": true, "requires": { - "@grpc/proto-loader": "^0.7.0", - "@types/node": ">=12.12.47" - }, - "dependencies": { - "@grpc/proto-loader": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.0.tgz", - "integrity": "sha512-SGPZtVmqOvNfPFOA/nNPn+0Weqa5wubBgQ56+JgTbeLY2VezwtMjwPPFzh0kvQccwWT3a2TXT0ZGK/pJoOTk1A==", + "@sindresorhus/is": "^4.0.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.2", + "cli-truncate": "^3.0.0", + "commander": "^8.1.0", + "debounce": "^1.2.1", + "dotf": "^2.0.2", + "find-up": "^6.0.0", + "fs-extra": "^10.0.0", + "fuzzy": "^0.1.3", + "google-auth-library": "^7.6.2", + "googleapis": "^84.0.0", + "inquirer": "^8.1.2", + "inquirer-autocomplete-prompt-ipt": "^2.0.0", + "is-reachable": "^5.0.0", + "log-symbols": "^5.0.0", + "loud-rejection": "^2.2.0", + "make-dir": "^3.1.0", + "multimatch": "^5.0.0", + "normalize-newline": "^4.1.0", + "open": "^8.2.1", + "ora": "^6.0.0", + "p-map": "^5.1.0", + "read-pkg-up": "^8.0.0", + "recursive-readdir": "^2.2.2", + "server-destroy": "^1.0.1", + "split-lines": "^3.0.0", + "strip-bom": "^5.0.0", + "ts2gas": "^4.2.0", + "typescript": "^4.4.2" + }, + "dependencies": { + "find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "requires": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + } + }, + "locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "requires": { + "p-locate": "^6.0.0" + } + }, + "p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, "requires": { - "@types/long": "^4.0.1", - "lodash.camelcase": "^4.3.0", - "long": "^4.0.0", - "protobufjs": "^7.0.0", - "yargs": "^16.2.0" + "yocto-queue": "^1.0.0" } }, - "protobufjs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.0.0.tgz", - "integrity": "sha512-ffNIEm+quOcYtQvHdW406v1NQmZSuqVklxsXk076BtuFnlYZfigLU+JOMrTD8TUOyqHYbRI/fSVNvgd25YeN3w==", + "p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, "requires": { - "@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/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "dependencies": { - "long": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.0.tgz", - "integrity": "sha512-9RTUNjK60eJbx3uz+TEGF7fUr29ZDxR5QzXcyDpeSfeH28S9ycINflOgOlppit5U+4kNTe83KQnMEerw7GmE8w==" - } + "p-limit": "^4.0.0" } + }, + "path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true + }, + "strip-bom": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-5.0.0.tgz", + "integrity": "sha512-p+byADHF7SzEcVnLvc/r3uognM1hUhObuHXxJcgLCfD194XAkaLbjq3Wzb0N5G2tgIjH0dgT708Z51QxMeu60A==", + "dev": true + }, + "yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true } } }, - "@grpc/proto-loader": { - "version": "0.6.13", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.13.tgz", - "integrity": "sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g==", - "requires": { - "@types/long": "^4.0.1", - "lodash.camelcase": "^4.3.0", - "long": "^4.0.0", - "protobufjs": "^6.11.3", - "yargs": "^16.2.0" - } - }, "@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" } }, + "@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 + }, "@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", @@ -8533,33 +7717,6 @@ "get-package-type": "^0.1.0", "js-yaml": "^3.13.1", "resolve-from": "^5.0.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "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, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "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 - } } }, "@istanbuljs/schema": { @@ -8569,217 +7726,222 @@ "dev": true }, "@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.4.3.tgz", + "integrity": "sha512-W/o/34+wQuXlgqlPYTansOSiBnuxrTv61dEVkA6HNmpcgHLUjfaUbdqt6oVvOzaawwo9IdW9QOtMgQ1ScSZC4A==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.4.3", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-message-util": "^29.4.3", + "jest-util": "^29.4.3", "slash": "^3.0.0" } }, "@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.4.3.tgz", + "integrity": "sha512-56QvBq60fS4SPZCuM7T+7scNrkGIe7Mr6PVIXUpu48ouvRaWOFqRPV91eifvFM0ay2HmfswXiGf97NGUN5KofQ==", "dev": true, "requires": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.4.3", + "@jest/reporters": "^29.4.3", + "@jest/test-result": "^29.4.3", + "@jest/transform": "^29.4.3", + "@jest/types": "^29.4.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "emittery": "^0.8.1", + "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", + "jest-changed-files": "^29.4.3", + "jest-config": "^29.4.3", + "jest-haste-map": "^29.4.3", + "jest-message-util": "^29.4.3", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.4.3", + "jest-resolve-dependencies": "^29.4.3", + "jest-runner": "^29.4.3", + "jest-runtime": "^29.4.3", + "jest-snapshot": "^29.4.3", + "jest-util": "^29.4.3", + "jest-validate": "^29.4.3", + "jest-watcher": "^29.4.3", "micromatch": "^4.0.4", - "rimraf": "^3.0.0", + "pretty-format": "^29.4.3", "slash": "^3.0.0", "strip-ansi": "^6.0.0" } }, "@jest/environment": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", - "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.4.3.tgz", + "integrity": "sha512-dq5S6408IxIa+lr54zeqce+QgI+CJT4nmmA+1yzFgtcsGK8c/EyiUb9XQOgz3BMKrRDfKseeOaxj2eO8LlD3lA==", "dev": true, "requires": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/fake-timers": "^29.4.3", + "@jest/types": "^29.4.3", "@types/node": "*", - "jest-mock": "^27.5.1" + "jest-mock": "^29.4.3" + } + }, + "@jest/expect": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.4.3.tgz", + "integrity": "sha512-iktRU/YsxEtumI9zsPctYUk7ptpC+AVLLk1Ax3AsA4g1C+8OOnKDkIQBDHtD5hA/+VtgMd5AWI5gNlcAlt2vxQ==", + "dev": true, + "requires": { + "expect": "^29.4.3", + "jest-snapshot": "^29.4.3" + } + }, + "@jest/expect-utils": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.4.3.tgz", + "integrity": "sha512-/6JWbkxHOP8EoS8jeeTd9dTfc9Uawi+43oLKHfp6zzux3U2hqOOVnV3ai4RpDYHOccL6g+5nrxpoc8DmJxtXVQ==", + "dev": true, + "requires": { + "jest-get-type": "^29.4.3" } }, "@jest/fake-timers": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", - "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.4.3.tgz", + "integrity": "sha512-4Hote2MGcCTWSD2gwl0dwbCpBRHhE6olYEuTj8FMowdg3oQWNKr2YuxenPQYZ7+PfqPY1k98wKDU4Z+Hvd4Tiw==", "dev": true, "requires": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", + "@jest/types": "^29.4.3", + "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" + "jest-message-util": "^29.4.3", + "jest-mock": "^29.4.3", + "jest-util": "^29.4.3" } }, "@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.4.3.tgz", + "integrity": "sha512-8BQ/5EzfOLG7AaMcDh7yFCbfRLtsc+09E1RQmRBI4D6QQk4m6NSK/MXo+3bJrBN0yU8A2/VIcqhvsOLFmziioA==", "dev": true, "requires": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" + "@jest/environment": "^29.4.3", + "@jest/expect": "^29.4.3", + "@jest/types": "^29.4.3", + "jest-mock": "^29.4.3" } }, "@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.4.3.tgz", + "integrity": "sha512-sr2I7BmOjJhyqj9ANC6CTLsL4emMoka7HkQpcoMRlhCbQJjz2zsRzw0BDPiPyEFDXAbxKgGFYuQZiSJ1Y6YoTg==", "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.4.3", + "@jest/test-result": "^29.4.3", + "@jest/transform": "^29.4.3", + "@jest/types": "^29.4.3", + "@jridgewell/trace-mapping": "^0.3.15", "@types/node": "*", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", - "glob": "^7.1.2", + "glob": "^7.1.3", "graceful-fs": "^4.2.9", "istanbul-lib-coverage": "^3.0.0", "istanbul-lib-instrument": "^5.1.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-message-util": "^29.4.3", + "jest-util": "^29.4.3", + "jest-worker": "^29.4.3", "slash": "^3.0.0", - "source-map": "^0.6.0", "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + } + }, + "@jest/schemas": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", + "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.25.16" } }, "@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz", + "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==", "dev": true, "requires": { + "@jridgewell/trace-mapping": "^0.3.15", "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "graceful-fs": "^4.2.9" } }, "@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.4.3.tgz", + "integrity": "sha512-Oi4u9NfBolMq9MASPwuWTlC5WvmNRwI4S8YrQg5R5Gi47DYlBe3sh7ILTqi/LGrK1XUE4XY9KZcQJTH1WJCLLA==", "dev": true, "requires": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.4.3", + "@jest/types": "^29.4.3", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.4.3.tgz", + "integrity": "sha512-yi/t2nES4GB4G0mjLc0RInCq/cNr9dNwJxcGg8sslajua5Kb4kmozAc+qPLzplhBgfw1vLItbjyHzUN92UXicw==", "dev": true, "requires": { - "@jest/test-result": "^27.5.1", + "@jest/test-result": "^29.4.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" + "jest-haste-map": "^29.4.3", + "slash": "^3.0.0" } }, "@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.4.3.tgz", + "integrity": "sha512-8u0+fBGWolDshsFgPQJESkDa72da/EVwvL+II0trN2DR66wMwiQ9/CihaGfHdlLGFzbBZwMykFtxuwFdZqlKwg==", "dev": true, "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", + "@babel/core": "^7.11.6", + "@jest/types": "^29.4.3", + "@jridgewell/trace-mapping": "^0.3.15", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^29.4.3", + "jest-regex-util": "^29.4.3", + "jest-util": "^29.4.3", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "write-file-atomic": "^4.0.2" } }, "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.4.3.tgz", + "integrity": "sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA==", "dev": true, "requires": { + "@jest/schemas": "^29.4.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, @@ -8812,13 +7974,13 @@ "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", "dev": true, "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, "@nodelib/fs.scandir": { @@ -8847,126 +8009,78 @@ "fastq": "^1.6.0" } }, - "@opentelemetry/api": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.1.0.tgz", - "integrity": "sha512-hf+3bwuBwtXsugA2ULBc95qxrOqP2pOekLz34BJhcAKawt94vfeNyUKpYc0lZQ/3sCP6LqRa7UAdHA7i5UODzQ==" - }, - "@opentelemetry/semantic-conventions": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.4.0.tgz", - "integrity": "sha512-Hzl8soGpmyzja9w3kiFFcYJ7n5HNETpplY6cb67KR4QPlxp4FTTresO06qXHgHDhyIInmbLJXuwARjjpsKYGuQ==" - }, - "@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - }, - "@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" - }, - "@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "@rollup/plugin-node-resolve": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.1.tgz", + "integrity": "sha512-ReY88T7JhJjeRVbfCyNj+NXAG3IIsVMsX9b5/9jC98dRP8/yxlZdz7mHZbHk5zHr24wZZICS5AcXsFZAXYUQEg==", + "dev": true, "requires": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.0", + "is-module": "^1.0.0", + "resolve": "^1.22.1" } }, - "@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" - }, - "@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" - }, - "@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + "@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "requires": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + } }, - "@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + "@sinclair/typebox": { + "version": "0.25.23", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.23.tgz", + "integrity": "sha512-VEB8ygeP42CFLWyAJhN5OklpxUliqdNEUcXb4xZ/CINqtYGTjL5ukluKdKzQ0iWdUxyQ7B0539PAUhHKrCNWSQ==", + "dev": true }, - "@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + "@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true }, "@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", + "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", "dev": true, "requires": { "type-detect": "4.0.8" } }, "@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz", + "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==", "dev": true, "requires": { - "@sinonjs/commons": "^1.7.0" + "@sinonjs/commons": "^2.0.0" } }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, - "@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true + "@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, + "requires": { + "defer-to-connect": "^2.0.0" + } }, "@types/babel__core": { - "version": "7.1.19", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", - "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", + "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", "dev": true, "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" @@ -8992,97 +8106,62 @@ } }, "@types/babel__traverse": { - "version": "7.17.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", - "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", + "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", "dev": true, "requires": { "@babel/types": "^7.3.0" } }, - "@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dev": true, - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", "dev": true, "requires": { - "@types/node": "*" + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" } }, - "@types/cors": { - "version": "2.8.12", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", - "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", + "@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", "dev": true }, - "@types/duplexify": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@types/duplexify/-/duplexify-3.6.1.tgz", - "integrity": "sha512-n0zoEj/fMdMOvqbHxmqnza/kXyoGgJmEpsXjpP+gEqE1Ye4yNqc7xWipKnUoMpWhMuzJQSfK2gMrwlElly7OGQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/errorhandler": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@types/errorhandler/-/errorhandler-1.5.0.tgz", - "integrity": "sha512-g5jrn2aofEn7O2OW/T+PlmGUUD/AtrX7DI87zrxz6rK5XIyvQf3FbPJrwgYaVjVOaCyvEkx9yxLd/XlEA43OcA==", - "dev": true, - "requires": { - "@types/express": "*" - } - }, - "@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", - "dev": true, - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.29", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz", - "integrity": "sha512-uMd++6dMKS32EOuw1Uli3e3BPgdLIXmezcfHv7N4c1s3gkhikBplORPpMq3fuWkxncZN1reb16d5n8yhQ80x7Q==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } + "@types/google-apps-script": { + "version": "1.0.57", + "resolved": "https://registry.npmjs.org/@types/google-apps-script/-/google-apps-script-1.0.57.tgz", + "integrity": "sha512-w06Yoh+SamGpS2kGVlGy/5JkmFkLrW6u3tbglyHEu9uC9lrzqr6FyLcgVsL95Tmq9L0q//D8seqd4GZGRPPKUw==", + "dev": true }, - "@types/express-session": { - "version": "1.17.5", - "resolved": "https://registry.npmjs.org/@types/express-session/-/express-session-1.17.5.tgz", - "integrity": "sha512-l0DhkvNVfyUPEEis8fcwbd46VptfA/jmMwHfob2TfDMf3HyPLiB9mKD71LXhz5TMUobODXPD27zXSwtFQLHm+w==", + "@types/google-apps-script-oauth2": { + "version": "38.0.0", + "resolved": "https://registry.npmjs.org/@types/google-apps-script-oauth2/-/google-apps-script-oauth2-38.0.0.tgz", + "integrity": "sha512-TxaCxXmAb3/Qm/kSweW+PPIckNwLvZo6maGI0oKx/MBdl/WrZkPAY7Mi56qg2xPGBObqG80rmYU691SAHiUdJg==", "dev": true, "requires": { - "@types/express": "*" + "@types/google-apps-script": "*" } }, "@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", + "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", "dev": true, "requires": { "@types/node": "*" } }, + "@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", + "dev": true + }, "@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", @@ -9108,272 +8187,98 @@ } }, "@types/jest": { - "version": "27.5.2", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz", - "integrity": "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==", + "version": "29.4.0", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.4.0.tgz", + "integrity": "sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ==", "dev": true, "requires": { - "jest-matcher-utils": "^27.0.0", - "pretty-format": "^27.0.0" + "expect": "^29.0.0", + "pretty-format": "^29.0.0" } }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "@types/long": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" - }, - "@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true - }, - "@types/node": { - "version": "16.11.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.45.tgz", - "integrity": "sha512-3rKg/L5x0rofKuuUt5zlXzOnKyIHXmIu5R8A0TuNDMF2062/AOIDBciFIjToLEJ/9F9DzkHNot+BpNsMI1OLdQ==" - }, - "@types/oauth": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@types/oauth/-/oauth-0.9.1.tgz", - "integrity": "sha512-a1iY62/a3yhZ7qH7cNUsxoI3U/0Fe9+RnuFrpTKr+0WVOzbKlSLojShCKe20aOD1Sppv+i8Zlq0pLDuTJnwS4A==", + "@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", "dev": true, "requires": { "@types/node": "*" } }, - "@types/passport": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@types/passport/-/passport-1.0.9.tgz", - "integrity": "sha512-9+ilzUhmZQR4JP49GdC2O4UdDE3POPLwpmaTC/iLkW7l0TZCXOo1zsTnnlXPq6rP1UsUZPfbAV4IUdiwiXyC7g==", - "dev": true, - "requires": { - "@types/express": "*" - } - }, - "@types/passport-google-oauth20": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/passport-google-oauth20/-/passport-google-oauth20-2.0.11.tgz", - "integrity": "sha512-9XMT1GfwhZL7UQEiCepLef55RNPHkbrCtsU7rsWPTEOsmu5qVIW8nSemtB4p+P24CuOhA+IKkv8LsPThYghGww==", - "dev": true, - "requires": { - "@types/express": "*", - "@types/passport": "*", - "@types/passport-oauth2": "*" - } - }, - "@types/passport-oauth2": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@types/passport-oauth2/-/passport-oauth2-1.4.11.tgz", - "integrity": "sha512-KUNwmGhe/3xPbjkzkPwwcPmyFwfyiSgtV1qOrPBLaU4i4q9GSCdAOyCbkFG0gUxAyEmYwqo9OAF/rjPjJ6ImdA==", - "dev": true, - "requires": { - "@types/express": "*", - "@types/oauth": "*", - "@types/passport": "*" - } - }, - "@types/prettier": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz", - "integrity": "sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==", - "dev": true - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", "dev": true }, - "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "@types/node": { + "version": "18.14.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.0.tgz", + "integrity": "sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==", "dev": true }, - "@types/serve-static": { - "version": "1.13.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", - "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", - "dev": true, - "requires": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", "dev": true }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "@types/prettier": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", + "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", "dev": true }, - "@typescript-eslint/eslint-plugin": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.7.tgz", - "integrity": "sha512-l4L6Do+tfeM2OK0GJsU7TUcM/1oN/N25xHm3Jb4z3OiDU4Lj8dIuxX9LpVMS9riSXQs42D1ieX7b85/r16H9Fw==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.30.7", - "@typescript-eslint/type-utils": "5.30.7", - "@typescript-eslint/utils": "5.30.7", - "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.2.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/parser": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.7.tgz", - "integrity": "sha512-Rg5xwznHWWSy7v2o0cdho6n+xLhK2gntImp0rJroVVFkcYFYQ8C8UJTSuTw/3CnExBmPjycjmUJkxVmjXsld6A==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.30.7", - "@typescript-eslint/types": "5.30.7", - "@typescript-eslint/typescript-estree": "5.30.7", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.7.tgz", - "integrity": "sha512-7BM1bwvdF1UUvt+b9smhqdc/eniOnCKxQT/kj3oXtj3LqnTWCAM0qHRHfyzCzhEfWX0zrW7KqXXeE4DlchZBKw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.30.7", - "@typescript-eslint/visitor-keys": "5.30.7" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.7.tgz", - "integrity": "sha512-nD5qAE2aJX/YLyKMvOU5jvJyku4QN5XBVsoTynFrjQZaDgDV6i7QHFiYCx10wvn7hFvfuqIRNBtsgaLe0DbWhw==", - "dev": true, - "requires": { - "@typescript-eslint/utils": "5.30.7", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/types": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.7.tgz", - "integrity": "sha512-ocVkETUs82+U+HowkovV6uxf1AnVRKCmDRNUBUUo46/5SQv1owC/EBFkiu4MOHeZqhKz2ktZ3kvJJ1uFqQ8QPg==", + "@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", "dev": true }, - "@typescript-eslint/typescript-estree": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.7.tgz", - "integrity": "sha512-tNslqXI1ZdmXXrHER83TJ8OTYl4epUzJC0aj2i4DMDT4iU+UqLT3EJeGQvJ17BMbm31x5scSwo3hPM0nqQ1AEA==", + "@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.30.7", - "@typescript-eslint/visitor-keys": "5.30.7", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "@types/node": "*" } }, - "@typescript-eslint/utils": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.7.tgz", - "integrity": "sha512-Z3pHdbFw+ftZiGUnm1GZhkJgVqsDL5CYW2yj+TB2mfXDFOMqtbzQi2dNJIyPqPbx9mv2kUxS1gU+r2gKlKi1rQ==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.30.7", - "@typescript-eslint/types": "5.30.7", - "@typescript-eslint/typescript-estree": "5.30.7", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true }, - "@typescript-eslint/visitor-keys": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.7.tgz", - "integrity": "sha512-KrRXf8nnjvcpxDFOKej4xkD7657+PClJs5cJVSG7NNoCNnjEdc46juNAQt7AyuWctuCgs6mVRc1xGctEqrjxWw==", + "@types/yargs": { + "version": "17.0.22", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz", + "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==", "dev": true, "requires": { - "@typescript-eslint/types": "5.30.7", - "eslint-visitor-keys": "^3.3.0" + "@types/yargs-parser": "*" } }, - "abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, "abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, "requires": { "event-target-shim": "^5.0.0" } }, - "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==", - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, "acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==" - }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - } - } + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true }, "acorn-jsx": { "version": "5.3.2", @@ -9382,20 +8287,25 @@ "dev": true, "requires": {} }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true - }, "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==", + "dev": true, "requires": { "debug": "4" } }, + "aggregate-error": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", + "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", + "dev": true, + "requires": { + "clean-stack": "^4.0.0", + "indent-string": "^5.0.0" + } + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -9415,55 +8325,53 @@ "dev": true, "requires": { "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - } } }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } }, "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", "dev": true }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", + "dev": true }, "array-union": { "version": "2.1.0", @@ -9474,48 +8382,19 @@ "arrify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" - }, - "async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", "dev": true }, - "axios": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", - "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", - "requires": { - "follow-redirects": "^1.14.7" - } - }, - "axios-mock-adapter": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/axios-mock-adapter/-/axios-mock-adapter-1.21.2.tgz", - "integrity": "sha512-jzyNxU3JzB2XVhplZboUcF0YDs7xuExzoRSHXPHr+UQajaGmcTqvkkUADgkVI2WkGlpZ1zZlMVdcTMU0ejV8zQ==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3", - "is-buffer": "^2.0.5" - } - }, "babel-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", - "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.4.3.tgz", + "integrity": "sha512-o45Wyn32svZE+LnMVWv/Z4x0SwtLbh4FyGcYtR20kIWd+rdrDZ9Fzq8Ml3MYLD+mZvEdzCjZsCnYZ2jpJyQ+Nw==", "dev": true, "requires": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/transform": "^29.4.3", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", + "babel-preset-jest": "^29.4.3", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" @@ -9535,14 +8414,14 @@ } }, "babel-plugin-jest-hoist": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", - "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.4.3.tgz", + "integrity": "sha512-mB6q2q3oahKphy5V7CpnNqZOCkxxZ9aokf1eh82Dy3jQmg4xvM1tGrh5y6BQUJh4a3Pj9+eLfwvAZ7VNKg7H8Q==", "dev": true, "requires": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", + "@types/babel__core": "^7.1.14", "@types/babel__traverse": "^7.0.6" } }, @@ -9567,12 +8446,12 @@ } }, "babel-preset-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", - "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.4.3.tgz", + "integrity": "sha512-gWx6COtSuma6n9bw+8/F+2PCXrIgxV/D1TJFnp6OyBK2cxPWg0K9p/sriNYeifKjpUkMViWQ09DSWtzJQRETsw==", "dev": true, "requires": { - "babel-plugin-jest-hoist": "^27.5.1", + "babel-plugin-jest-hoist": "^29.4.3", "babel-preset-current-node-syntax": "^1.0.0" } }, @@ -9585,17 +8464,14 @@ "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "base64url": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", - "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true }, "bignumber.js": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", - "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==" + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz", + "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==", + "dev": true }, "binary-extensions": { "version": "2.2.0", @@ -9603,38 +8479,15 @@ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, - "body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", - "requires": { - "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.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } + "bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dev": true, + "requires": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, "brace-expansion": { @@ -9656,22 +8509,16 @@ "fill-range": "^7.0.1" } }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, "browserslist": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.2.tgz", - "integrity": "sha512-MonuOgAtUB46uP5CezYbRaYKBNt2LxP0yX+Pmj4LkcDFGkn9Cbpi83d9sCjwQDErXsIJSzY5oKGDbgOlF/LPAA==", + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001366", - "electron-to-chromium": "^1.4.188", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.4" + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" } }, "bs-logger": { @@ -9692,10 +8539,21 @@ "node-int64": "^0.4.0" } }, + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "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==" + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "dev": true }, "buffer-from": { "version": "1.1.2", @@ -9703,15 +8561,49 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + "builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true + }, + "cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true + }, + "cacheable-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + } + } }, "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -9730,9 +8622,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001370", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001370.tgz", - "integrity": "sha512-3PDmaP56wz/qz7G508xzjx8C+MC2qEm4SYhSEzC9IBROo+dGXFWRuaXkWti0A9tuI00g+toiriVqxtWMgl350g==", + "version": "1.0.30001457", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001457.tgz", + "integrity": "sha512-SDIV6bgE1aVbK6XyxdURbUE89zY7+k1BBBaOwYwkNCglXlel/E7mELiHC64HQ+W0xSKlqWhV9Wh7iHxUjMs4fA==", "dev": true }, "chalk": { @@ -9743,17 +8635,6 @@ "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" - }, - "dependencies": { - "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, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "char-regex": { @@ -9762,6 +8643,12 @@ "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, "chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -9790,9 +8677,9 @@ } }, "ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", "dev": true }, "cjs-module-lexer": { @@ -9801,61 +8688,131 @@ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, + "clean-stack": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", + "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", + "dev": true, + "requires": { + "escape-string-regexp": "5.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true + } + } + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", + "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", + "dev": true + }, + "cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "dev": true, + "requires": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "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 + }, + "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, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true + }, "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, "requires": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", + "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true + }, + "clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true }, - "coffeescript": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-2.7.0.tgz", - "integrity": "sha512-hzWp6TUE2d/jCcN67LrW1eh5b/rSDKQK6oD6VMLlggYVUUFexgTH9z3dNYihzX4RMhze5FTUsUmOXViJKFQR/A==" - }, "collect-v8-coverage": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", "dev": true }, - "color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "requires": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - }, - "dependencies": { - "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==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - } - } - }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -9863,34 +8820,14 @@ "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==" - }, - "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==", - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "colorspace": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", - "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", - "requires": { - "color": "^3.1.3", - "text-hex": "1.0.x" - } + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true }, "concat-map": { "version": "0.0.1", @@ -9898,80 +8835,10 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, - "concurrently": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.5.1.tgz", - "integrity": "sha512-FlSwNpGjWQfRwPLXvJ/OgysbBxPkWpiVjy1042b0U7on7S7qwwMIILRj7WTN1mTgqa582bG6NFuScOoh6Zgdag==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "date-fns": "^2.16.1", - "lodash": "^4.17.21", - "rxjs": "^6.6.3", - "spawn-command": "^0.0.2-1", - "supports-color": "^8.1.0", - "tree-kill": "^1.2.2", - "yargs": "^16.2.0" - } - }, - "console-log-level": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/console-log-level/-/console-log-level-1.4.1.tgz", - "integrity": "sha512-VZzbIORbP+PPcN/gg3DXClTLPLg5Slwd5fL2MIc+o1qZ4BXBvWyc6QxPk6T/Mkr6IVjRpoAGf32XxP3ZWMVRcQ==" - }, - "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==", - "requires": { - "safe-buffer": "5.2.1" - } - }, - "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==" - }, "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "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": { - "object-assign": "^4", - "vary": "^1" - } - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "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 }, "cross-spawn": { @@ -9982,62 +8849,49 @@ "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - } + "which": "^2.0.1" } }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", "dev": true, "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" + "array-find-index": "^1.0.1" } }, - "date-fns": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.1.tgz", - "integrity": "sha512-dlLD5rKaKxpFdnjrs+5azHDFOPEu4ANy/LTh04A1DTzMM7qoajmKCBc8pkKRFT41CNzw+4gQh79X5C+Jq27HAw==", + "debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", "dev": true }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "requires": { "ms": "2.1.2" } }, - "decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", - "dev": true + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "requires": { + "mimic-response": "^3.1.0" + }, + "dependencies": { + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true + } + } }, "dedent": { "version": "0.7.0", @@ -10052,26 +8906,31 @@ "dev": true }, "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", + "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==", "dev": true }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true }, - "depd": { + "define-lazy-prop": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true }, "detect-newline": { "version": "3.1.0", @@ -10079,27 +8938,12 @@ "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, "diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", + "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", "dev": true }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -10109,100 +8953,58 @@ "esutils": "^2.0.2" } }, - "domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dotf": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dotf/-/dotf-2.0.2.tgz", + "integrity": "sha512-4cN2fwEqHimE11jVc8uMNiEB2A2YOL5Fdyd1p14UbAvRh/5vAxjEaiVPx45zD5IQcwc/uQIxI9Jh18skB/uYFQ==", "dev": true, "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true - } - } - }, - "dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "requires": { - "is-obj": "^2.0.0" + "graceful-fs": "^4.2.8", + "jsonfile": "^6.1.0" } }, - "dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==" - }, - "duplexify": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", - "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", - "requires": { - "end-of-stream": "^1.4.1", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1", - "stream-shift": "^1.0.0" - } + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true }, "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==", + "dev": true, "requires": { "safe-buffer": "^5.0.1" } }, - "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==" - }, "electron-to-chromium": { - "version": "1.4.199", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.199.tgz", - "integrity": "sha512-WIGME0Cs7oob3mxsJwHbeWkH0tYkIE/sjkJ8ML2BYmuRcjhRl/q5kVDXG7W9LOOKwzPU5M0LBlXRq9rlSgnNlg==", + "version": "1.4.305", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.305.tgz", + "integrity": "sha512-WETy6tG0CT5gm1O+xCbyapWNsCcmIvrn4NHViIGYo2AT8FV2qUCXdaB+WqYxSv/vS5mFqhBYnfZAAkVArjBmUg==", "dev": true }, "emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "enabled": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, "requires": { "once": "^1.4.0" } }, - "ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==" - }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -10215,94 +9017,25 @@ "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "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==" - }, - "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==", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true }, - "escodegen": { + "escape-string-regexp": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - } - } + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true }, "eslint": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.20.0.tgz", - "integrity": "sha512-d4ixhz5SKCa1D6SCPrivP7yYVi7nyD6A4vs6HIAul9ujBzcEmZVM3/0NN/yu5nKhmO1wjp5xQ46iRfmDGlOviA==", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.34.0.tgz", + "integrity": "sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", + "@eslint/eslintrc": "^1.4.1", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -10312,18 +9045,21 @@ "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", + "espree": "^9.4.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", @@ -10334,24 +9070,71 @@ "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "dependencies": { - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "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 + }, + "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, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "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, + "requires": { + "argparse": "^2.0.1" + } + }, + "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, + "requires": { + "p-locate": "^5.0.0" + } + }, + "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, "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "p-limit": "^3.0.2" } }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "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 } } @@ -10364,9 +9147,9 @@ "requires": {} }, "eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.6.0.tgz", + "integrity": "sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==", "dev": true, "requires": {} }, @@ -10380,13 +9163,13 @@ } }, "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "requires": { "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "estraverse": "^5.2.0" } }, "eslint-utils": { @@ -10413,12 +9196,12 @@ "dev": true }, "espree": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", - "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", "dev": true, "requires": { - "acorn": "^8.7.1", + "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.3.0" } @@ -10430,20 +9213,12 @@ "dev": true }, "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.2.tgz", + "integrity": "sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==", "dev": true, "requires": { "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } } }, "esrecurse": { @@ -10453,20 +9228,18 @@ "dev": true, "requires": { "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } } }, "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true }, "esutils": { @@ -10475,23 +9248,11 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" - }, "event-target-shim": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" - }, - "eventid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/eventid/-/eventid-2.0.1.tgz", - "integrity": "sha512-sPNTqiMokAvV048P2c9+foqVJzk49o6d4e0D/sq5jog3pw+4kBgyR0gaM1FM7Mx6Kzd9dztesh9oYz1LWWOpzw==", - "requires": { - "uuid": "^8.0.0" - } + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true }, "execa": { "version": "5.1.1", @@ -10517,114 +9278,40 @@ "dev": true }, "expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - } - }, - "express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.10.3", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "express-session": { - "version": "1.17.3", - "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz", - "integrity": "sha512-4+otWXlShYlG1Ma+2Jnn+xgKUZTMJ5QD3YvfilX3AcocOAbIkVylSWEklzALe/+Pu4qV6TYBj5GwOBFfdKqLBw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.4.3.tgz", + "integrity": "sha512-uC05+Q7eXECFpgDrHdXA4k2rpMyStAYPItEDLyQDo5Ta7fVkJnNA/4zh/OIVkVVNZ1oOK1PipQoyNjuZ6sz6Dg==", + "dev": true, "requires": { - "cookie": "0.4.2", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-headers": "~1.0.2", - "parseurl": "~1.3.3", - "safe-buffer": "5.2.1", - "uid-safe": "~2.1.5" - }, - "dependencies": { - "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } + "@jest/expect-utils": "^29.4.3", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.4.3", + "jest-message-util": "^29.4.3", + "jest-util": "^29.4.3" } }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true }, "fast-diff": { "version": "1.2.0", @@ -10632,30 +9319,6 @@ "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", "dev": true }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -10669,32 +9332,45 @@ "dev": true }, "fast-text-encoding": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.4.tgz", - "integrity": "sha512-x6lDDm/tBAzX9kmsPcZsNbvDs3Zey3+scsxaZElS8xWLgUMAg/oFLeewfUz0mu1CblHhhsu15jGkraldkFh8KQ==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", + "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==", + "dev": true }, "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, "requires": { "reusify": "^1.0.4" } }, "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, "requires": { "bser": "2.1.1" } }, - "fecha": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", - "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + } + } }, "file-entry-cache": { "version": "6.0.1", @@ -10714,35 +9390,6 @@ "to-regex-range": "^5.0.1" } }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -10753,11 +9400,6 @@ "path-exists": "^4.0.0" } }, - "findit2": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/findit2/-/findit2-2.2.3.tgz", - "integrity": "sha512-lg/Moejf4qXovVutL0Lz4IsaPoNYMuxt4PA0nGqFxnJ1CTTGGlEO2wKgoDpwknhvZ8k4Q2F+eesgkLbG2Mxfog==" - }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -10769,42 +9411,22 @@ } }, "flatted": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", - "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, - "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==" - }, - "follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" - }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -10821,17 +9443,20 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" + "fuzzy": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/fuzzy/-/fuzzy-0.1.3.tgz", + "integrity": "sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w==", + "dev": true }, "gaxios": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", + "dev": true, "requires": { "abort-controller": "^3.0.0", "extend": "^3.0.2", @@ -10844,6 +9469,7 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz", "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==", + "dev": true, "requires": { "gaxios": "^4.0.0", "json-bigint": "^1.0.0" @@ -10858,12 +9484,14 @@ "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true }, "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -10900,38 +9528,22 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "dev": true, + "requires": { + "is-glob": "^4.0.3" } }, + "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 + }, "google-auth-library": { "version": "7.14.1", "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.14.1.tgz", "integrity": "sha512-5Rk7iLNDFhFeBYc3s8l1CqzbEBcdhwR193RlD4vSNFajIcINKI8W8P0JLmBpwymHqqWbX34pJDQu39cSy/6RsA==", + "dev": true, "requires": { "arrify": "^2.0.0", "base64-js": "^1.3.0", @@ -10942,40 +9554,39 @@ "gtoken": "^5.0.4", "jws": "^4.0.0", "lru-cache": "^6.0.0" - } - }, - "google-gax": { - "version": "2.30.5", - "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-2.30.5.tgz", - "integrity": "sha512-Jey13YrAN2hfpozHzbtrwEfEHdStJh1GwaQ2+Akh1k0Tv/EuNVSuBtHZoKSBm5wBMvNsxTsEIZ/152NrYyZgxQ==", - "requires": { - "@grpc/grpc-js": "~1.6.0", - "@grpc/proto-loader": "^0.6.12", - "@types/long": "^4.0.0", - "abort-controller": "^3.0.0", - "duplexify": "^4.0.0", - "fast-text-encoding": "^1.0.3", - "google-auth-library": "^7.14.0", - "is-stream-ended": "^0.1.4", - "node-fetch": "^2.6.1", - "object-hash": "^3.0.0", - "proto3-json-serializer": "^0.1.8", - "protobufjs": "6.11.3", - "retry-request": "^4.0.0" + }, + "dependencies": { + "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==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } } }, "google-p12-pem": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.4.tgz", "integrity": "sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg==", + "dev": true, "requires": { "node-forge": "^1.3.1" } }, "googleapis": { - "version": "91.0.0", - "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-91.0.0.tgz", - "integrity": "sha512-iHqXZwgYam0g8n0Yyi+YHx8kgwT+H5O4k3fe0LB1JhWRp1dSKYu+ShY4PQbW584zLOE4kK3LHf2B+x1THx+ZPQ==", + "version": "84.0.0", + "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-84.0.0.tgz", + "integrity": "sha512-5WWLwmraulw3p55lu0gNpLz2FME1gcuR7QxgmUdAVHMiVN4LEasYjJV9p36gxcf2TMe6bn6+PgQ/63+CvBEgoQ==", + "dev": true, "requires": { "google-auth-library": "^7.0.2", "googleapis-common": "^5.0.2" @@ -10985,6 +9596,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-5.1.0.tgz", "integrity": "sha512-RXrif+Gzhq1QAzfjxulbGvAY3FPj8zq/CYcvgjzDbaBNCD6bUl+86I7mUs4DKWHGruuK26ijjR/eDpWIDgNROA==", + "dev": true, "requires": { "extend": "^3.0.2", "gaxios": "^4.0.0", @@ -10994,16 +9606,42 @@ "uuid": "^8.0.0" } }, + "got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dev": true, + "requires": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + } + }, "graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "gtoken": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.2.tgz", "integrity": "sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==", + "dev": true, "requires": { "gaxios": "^4.0.0", "google-p12-pem": "^3.1.3", @@ -11014,6 +9652,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -11027,15 +9666,33 @@ "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true }, - "html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "requires": { - "whatwg-encoding": "^1.0.5" + "lru-cache": "^6.0.0" + }, + "dependencies": { + "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==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } } }, "html-escaper": { @@ -11044,33 +9701,27 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "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==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } + "http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true }, - "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==", + "http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", "dev": true, "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" } }, "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==", + "dev": true, "requires": { "agent-base": "6", "debug": "4" @@ -11086,20 +9737,21 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true }, - "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==", + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true }, "import-fresh": { @@ -11110,6 +9762,14 @@ "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" + }, + "dependencies": { + "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 + } } }, "import-local": { @@ -11128,6 +9788,12 @@ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true }, + "indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -11141,12 +9807,179 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "inquirer": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", + "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true + }, + "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 + }, + "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, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + } + } + } }, - "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==" + "inquirer-autocomplete-prompt-ipt": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/inquirer-autocomplete-prompt-ipt/-/inquirer-autocomplete-prompt-ipt-2.0.0.tgz", + "integrity": "sha512-2qkl1lWeXbFN/O3+xdqJUdMfnNirvWKqgsgmhOjpOiVCcnJf+XYSEjFfdTgk+MDTtVt5AZiWR9Ji+f4YsWBdUw==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^2.4.2", + "figures": "^3.1.0", + "run-async": "^2.3.0", + "rxjs": "^6.5.3" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "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==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } }, "is-arrayish": { "version": "0.2.1", @@ -11163,21 +9996,30 @@ "binary-extensions": "^2.0.0" } }, - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true + "is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "requires": { + "builtin-modules": "^3.3.0" + } }, "is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "dev": true, "requires": { "has": "^1.0.3" } }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -11187,7 +10029,8 @@ "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true }, "is-generator-fn": { "version": "2.1.0", @@ -11204,39 +10047,73 @@ "is-extglob": "^2.1.1" } }, + "is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, "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 }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + "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 }, - "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==", + "is-port-reachable": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-port-reachable/-/is-port-reachable-3.1.0.tgz", + "integrity": "sha512-vjc0SSRNZ32s9SbZBzGaiP6YVB+xglLShhgZD/FHMZUXBvQWaV9CtzgeVhjccFJrI6RAMV+LX7NYxueW/A8W5A==", "dev": true }, + "is-reachable": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/is-reachable/-/is-reachable-5.2.1.tgz", + "integrity": "sha512-ViPrrlmt9FTTclYbz6mL/PFyF1TXSpJ9y/zw9QMVJxbhU/7DFkvk/5cTv7S0sXtqbJj32zZ+jKpNAjrYTUZBPQ==", + "dev": true, + "requires": { + "arrify": "^2.0.1", + "got": "^11.7.0", + "is-port-reachable": "^3.0.0", + "p-any": "^3.0.0", + "p-timeout": "^3.2.0", + "prepend-http": "^3.0.1", + "router-ips": "^1.0.0", + "url-parse": "^1.5.10" + } + }, "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" - }, - "is-stream-ended": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz", - "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==" + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", "dev": true }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -11250,9 +10127,9 @@ "dev": true }, "istanbul-lib-instrument": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", - "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, "requires": { "@babel/core": "^7.12.3", @@ -11260,14 +10137,6 @@ "@istanbuljs/schema": "^0.1.2", "istanbul-lib-coverage": "^3.2.0", "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } } }, "istanbul-lib-report": { @@ -11279,17 +10148,6 @@ "istanbul-lib-coverage": "^3.0.0", "make-dir": "^3.0.0", "supports-color": "^7.1.0" - }, - "dependencies": { - "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, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "istanbul-lib-source-maps": { @@ -11301,14 +10159,6 @@ "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } } }, "istanbul-reports": { @@ -11322,418 +10172,392 @@ } }, "jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", - "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.4.3.tgz", + "integrity": "sha512-XvK65feuEFGZT8OO0fB/QAQS+LGHvQpaadkH5p47/j3Ocqq3xf2pK9R+G0GzgfuhXVxEv76qCOOcMb5efLk6PA==", "dev": true, "requires": { - "@jest/core": "^27.5.1", + "@jest/core": "^29.4.3", + "@jest/types": "^29.4.3", "import-local": "^3.0.2", - "jest-cli": "^27.5.1" + "jest-cli": "^29.4.3" } }, "jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.4.3.tgz", + "integrity": "sha512-Vn5cLuWuwmi2GNNbokPOEcvrXGSGrqVnPEZV7rC6P7ck07Dyw9RFnvWglnupSh+hGys0ajGtw/bc2ZgweljQoQ==", "dev": true, "requires": { - "@jest/types": "^27.5.1", "execa": "^5.0.0", - "throat": "^6.0.1" + "p-limit": "^3.1.0" } }, "jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.4.3.tgz", + "integrity": "sha512-Vw/bVvcexmdJ7MLmgdT3ZjkJ3LKu8IlpefYokxiqoZy6OCQ2VAm6Vk3t/qHiAGUXbdbJKJWnc8gH3ypTbB/OBw==", "dev": true, "requires": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/environment": "^29.4.3", + "@jest/expect": "^29.4.3", + "@jest/test-result": "^29.4.3", + "@jest/types": "^29.4.3", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", - "expect": "^27.5.1", "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", + "jest-each": "^29.4.3", + "jest-matcher-utils": "^29.4.3", + "jest-message-util": "^29.4.3", + "jest-runtime": "^29.4.3", + "jest-snapshot": "^29.4.3", + "jest-util": "^29.4.3", + "p-limit": "^3.1.0", + "pretty-format": "^29.4.3", "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" + "stack-utils": "^2.0.3" } }, "jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.4.3.tgz", + "integrity": "sha512-PiiAPuFNfWWolCE6t3ZrDXQc6OsAuM3/tVW0u27UWc1KE+n/HSn5dSE6B2juqN7WP+PP0jAcnKtGmI4u8GMYCg==", "dev": true, "requires": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/core": "^29.4.3", + "@jest/test-result": "^29.4.3", + "@jest/types": "^29.4.3", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-config": "^29.4.3", + "jest-util": "^29.4.3", + "jest-validate": "^29.4.3", "prompts": "^2.0.1", - "yargs": "^16.2.0" + "yargs": "^17.3.1" } }, "jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.4.3.tgz", + "integrity": "sha512-eCIpqhGnIjdUCXGtLhz4gdDoxKSWXKjzNcc5r+0S1GKOp2fwOipx5mRcwa9GB/ArsxJ1jlj2lmlD9bZAsBxaWQ==", "dev": true, "requires": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.4.3", + "@jest/types": "^29.4.3", + "babel-jest": "^29.4.3", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", - "glob": "^7.1.1", + "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-circus": "^29.4.3", + "jest-environment-node": "^29.4.3", + "jest-get-type": "^29.4.3", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.4.3", + "jest-runner": "^29.4.3", + "jest-util": "^29.4.3", + "jest-validate": "^29.4.3", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", + "pretty-format": "^29.4.3", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" } }, "jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.4.3.tgz", + "integrity": "sha512-YB+ocenx7FZ3T5O9lMVMeLYV4265socJKtkwgk/6YUz/VsEzYDkiMuMhWzZmxm3wDRQvayJu/PjkjjSkjoHsCA==", "dev": true, "requires": { "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "diff-sequences": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.4.3" } }, "jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", + "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", "dev": true, "requires": { "detect-newline": "^3.0.0" } }, "jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.4.3.tgz", + "integrity": "sha512-1ElHNAnKcbJb/b+L+7j0/w7bDvljw4gTv1wL9fYOczeJrbTbkMGQ5iQPFJ3eFQH19VPTx1IyfePdqSpePKss7Q==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.4.3", "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-environment-jsdom": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", - "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" + "jest-get-type": "^29.4.3", + "jest-util": "^29.4.3", + "pretty-format": "^29.4.3" } }, "jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.4.3.tgz", + "integrity": "sha512-gAiEnSKF104fsGDXNkwk49jD/0N0Bqu2K9+aMQXA6avzsA9H3Fiv1PW2D+gzbOSR705bWd2wJZRFEFpV0tXISg==", "dev": true, "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/environment": "^29.4.3", + "@jest/fake-timers": "^29.4.3", + "@jest/types": "^29.4.3", "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" + "jest-mock": "^29.4.3", + "jest-util": "^29.4.3" } }, "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", + "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", "dev": true }, "jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - } - }, - "jest-jasmine2": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", - "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.4.3.tgz", + "integrity": "sha512-eZIgAS8tvm5IZMtKlR8Y+feEOMfo2pSQkmNbufdbMzMSn9nitgGxF1waM/+LbryO3OkMcKS98SUb+j/cQxp/vQ==", "dev": true, "requires": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" + "@jest/types": "^29.4.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.4.3", + "jest-util": "^29.4.3", + "jest-worker": "^29.4.3", + "micromatch": "^4.0.4", + "walker": "^1.0.8" } }, "jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.4.3.tgz", + "integrity": "sha512-9yw4VC1v2NspMMeV3daQ1yXPNxMgCzwq9BocCwYrRgXe4uaEJPAN0ZK37nFBhcy3cUwEVstFecFLaTHpF7NiGA==", "dev": true, "requires": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "jest-get-type": "^29.4.3", + "pretty-format": "^29.4.3" } }, "jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.4.3.tgz", + "integrity": "sha512-TTciiXEONycZ03h6R6pYiZlSkvYgT0l8aa49z/DLSGYjex4orMUcafuLXYyyEDWB1RKglq00jzwY00Ei7yFNVg==", "dev": true, "requires": { "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "jest-diff": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.4.3" } }, "jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.4.3.tgz", + "integrity": "sha512-1Y8Zd4ZCN7o/QnWdMmT76If8LuDv23Z1DRovBj/vcSFNlGCJGoO8D1nJDw1AdyAGUk0myDLFGN5RbNeJyCRGCw==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", + "@jest/types": "^29.4.3", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", + "pretty-format": "^29.4.3", "slash": "^3.0.0", "stack-utils": "^2.0.3" } }, "jest-mock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", - "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.4.3.tgz", + "integrity": "sha512-LjFgMg+xed9BdkPMyIJh+r3KeHt1klXPJYBULXVVAkbTaaKjPX1o1uVCAZADMEp/kOxGTwy/Ot8XbvgItOrHEg==", "dev": true, "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*" + "@jest/types": "^29.4.3", + "@types/node": "*", + "jest-util": "^29.4.3" } }, "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, "requires": {} }, "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", + "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", "dev": true }, "jest-resolve": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", - "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.4.3.tgz", + "integrity": "sha512-GPokE1tzguRyT7dkxBim4wSx6E45S3bOQ7ZdKEG+Qj0Oac9+6AwJPCk0TZh5Vu0xzeX4afpb+eDmgbmZFFwpOw==", "dev": true, "requires": { - "@jest/types": "^27.5.1", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", + "jest-haste-map": "^29.4.3", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-util": "^29.4.3", + "jest-validate": "^29.4.3", "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", + "resolve.exports": "^2.0.0", "slash": "^3.0.0" } }, "jest-resolve-dependencies": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", - "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.4.3.tgz", + "integrity": "sha512-uvKMZAQ3nmXLH7O8WAOhS5l0iWyT3WmnJBdmIHiV5tBbdaDZ1wqtNX04FONGoaFvSOSHBJxnwAVnSn1WHdGVaw==", "dev": true, "requires": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" + "jest-regex-util": "^29.4.3", + "jest-snapshot": "^29.4.3" } }, "jest-runner": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.4.3.tgz", + "integrity": "sha512-GWPTEiGmtHZv1KKeWlTX9SIFuK19uLXlRQU43ceOQ2hIfA5yPEJC7AMkvFKpdCHx6pNEdOD+2+8zbniEi3v3gA==", "dev": true, "requires": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.4.3", + "@jest/environment": "^29.4.3", + "@jest/test-result": "^29.4.3", + "@jest/transform": "^29.4.3", + "@jest/types": "^29.4.3", "@types/node": "*", "chalk": "^4.0.0", - "emittery": "^0.8.1", + "emittery": "^0.13.1", "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" + "jest-docblock": "^29.4.3", + "jest-environment-node": "^29.4.3", + "jest-haste-map": "^29.4.3", + "jest-leak-detector": "^29.4.3", + "jest-message-util": "^29.4.3", + "jest-resolve": "^29.4.3", + "jest-runtime": "^29.4.3", + "jest-util": "^29.4.3", + "jest-watcher": "^29.4.3", + "jest-worker": "^29.4.3", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" } }, "jest-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.4.3.tgz", + "integrity": "sha512-F5bHvxSH+LvLV24vVB3L8K467dt3y3dio6V3W89dUz9nzvTpqd/HcT9zfYKL2aZPvD63vQFgLvaUX/UpUhrP6Q==", + "dev": true, + "requires": { + "@jest/environment": "^29.4.3", + "@jest/fake-timers": "^29.4.3", + "@jest/globals": "^29.4.3", + "@jest/source-map": "^29.4.3", + "@jest/test-result": "^29.4.3", + "@jest/transform": "^29.4.3", + "@jest/types": "^29.4.3", + "@types/node": "*", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^29.4.3", + "jest-message-util": "^29.4.3", + "jest-mock": "^29.4.3", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.4.3", + "jest-snapshot": "^29.4.3", + "jest-util": "^29.4.3", "slash": "^3.0.0", "strip-bom": "^4.0.0" } }, - "jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - } - }, "jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.4.3.tgz", + "integrity": "sha512-NGlsqL0jLPDW91dz304QTM/SNO99lpcSYYAjNiX0Ou+sSGgkanKBcSjCfp/pqmiiO1nQaOyLp6XQddAzRcx3Xw==", "dev": true, "requires": { - "@babel/core": "^7.7.2", + "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.4.3", + "@jest/transform": "^29.4.3", + "@jest/types": "^29.4.3", + "@types/babel__traverse": "^7.0.6", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.5.1", + "expect": "^29.4.3", "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-diff": "^29.4.3", + "jest-get-type": "^29.4.3", + "jest-haste-map": "^29.4.3", + "jest-matcher-utils": "^29.4.3", + "jest-message-util": "^29.4.3", + "jest-util": "^29.4.3", "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" + "pretty-format": "^29.4.3", + "semver": "^7.3.5" + }, + "dependencies": { + "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==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } } }, "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.4.3.tgz", + "integrity": "sha512-ToSGORAz4SSSoqxDSylWX8JzkOQR7zoBtNRsA7e+1WUX5F8jrOwaNpuh1YfJHJKDHXLHmObv5eOjejUd+/Ws+Q==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.4.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -11742,17 +10566,17 @@ } }, "jest-validate": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", - "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.4.3.tgz", + "integrity": "sha512-J3u5v7aPQoXPzaar6GndAVhdQcZr/3osWSgTeKg5v574I9ybX/dTyH0AJFb5XgXIB7faVhf+rS7t4p3lL9qFaw==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.4.3", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", + "jest-get-type": "^29.4.3", "leven": "^3.1.0", - "pretty-format": "^27.5.1" + "pretty-format": "^29.4.3" }, "dependencies": { "camelcase": { @@ -11764,31 +10588,61 @@ } }, "jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.4.3.tgz", + "integrity": "sha512-zwlXH3DN3iksoIZNk73etl1HzKyi5FuQdYLnkQKm5BW4n8HpoG59xSwpVdFrnh60iRRaRBGw0gcymIxjJENPcA==", "dev": true, "requires": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/test-result": "^29.4.3", + "@jest/types": "^29.4.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.5.1", + "emittery": "^0.13.1", + "jest-util": "^29.4.3", "string-length": "^4.0.1" } }, "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.4.3.tgz", + "integrity": "sha512-GLHN/GTAAMEy5BFdvpUfzr9Dr80zQqBrh0fz1mtRMe05hqP45+HfQltu7oTBfduD0UeZs09d+maFtFYAXFWvAA==", "dev": true, "requires": { "@types/node": "*", + "jest-util": "^29.4.3", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" + }, + "dependencies": { + "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, + "requires": { + "has-flag": "^4.0.0" + } + } } }, + "js-cleanup": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/js-cleanup/-/js-cleanup-1.2.0.tgz", + "integrity": "sha512-JeDD0yiiSt80fXzAVa/crrS0JDPQljyBG/RpOtaSbyDq03VHa9szJWMaWOYU/bcTn412uMN2MxApXq8v79cUiQ==", + "dev": true, + "requires": { + "magic-string": "^0.25.7", + "perf-regexes": "^1.0.1", + "skip-regex": "^1.0.2" + } + }, + "js-sdsl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", + "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", + "dev": true + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -11796,47 +10650,13 @@ "dev": true }, "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { - "argparse": "^2.0.1" - } - }, - "jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "requires": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, "jsesc": { @@ -11849,10 +10669,17 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dev": true, "requires": { "bignumber.js": "^9.0.0" } }, + "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 + }, "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -11872,15 +10699,26 @@ "dev": true }, "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, "jwa": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "dev": true, "requires": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", @@ -11891,22 +10729,27 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "dev": true, "requires": { "jwa": "^2.0.0", "safe-buffer": "^5.0.1" } }, + "keyv": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", + "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, "kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true }, - "kuler": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" - }, "leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -11944,16 +10787,6 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" - }, - "lodash.mapvalues": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", - "integrity": "sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==" - }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -11966,34 +10799,56 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "lodash.snakecase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" + "log-symbols": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", + "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", + "dev": true, + "requires": { + "chalk": "^5.0.0", + "is-unicode-supported": "^1.1.0" + }, + "dependencies": { + "chalk": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "dev": true + } + } }, - "logform": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.4.2.tgz", - "integrity": "sha512-W4c9himeAwXEdZ05dQNerhFz2XG80P9Oj0loPUMV23VC2it0orMHQhJm4hdnnor3rd1HsGf6a2lPwBM1zeXHGw==", + "loud-rejection": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-2.2.0.tgz", + "integrity": "sha512-S0FayMXku80toa5sZ6Ro4C+s+EtFDCsyJNG/AzFMfX3AxD5Si4dZsgzm/kKnbOxHl5Cv8jBlno8+3XYIh2pNjQ==", + "dev": true, "requires": { - "@colors/colors": "1.5.0", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", - "triple-beam": "^1.3.0" + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.2" } }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true }, "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==", + "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, "requires": { - "yallist": "^4.0.0" + "yallist": "^3.0.2" + } + }, + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.8" } }, "make-dir": { @@ -12003,14 +10858,6 @@ "dev": true, "requires": { "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } } }, "make-error": { @@ -12028,33 +10875,12 @@ "tmpl": "1.0.5" } }, - "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==" - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" - }, "micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -12065,30 +10891,18 @@ "picomatch": "^2.3.1" } }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "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==", - "requires": { - "mime-db": "1.52.0" - } - }, "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -12098,15 +10912,30 @@ "brace-expansion": "^1.1.7" } }, - "module-alias": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.2.tgz", - "integrity": "sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q==" - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "multimatch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", + "dev": true, + "requires": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + } + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true }, "natural-compare": { "version": "1.4.0", @@ -12114,44 +10943,20 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - }, "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", + "dev": true, "requires": { "whatwg-url": "^5.0.0" - }, - "dependencies": { - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - } } }, "node-forge": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true }, "node-int64": { "version": "0.4.0", @@ -12160,76 +10965,70 @@ "dev": true }, "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", "dev": true }, - "nodemon": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.19.tgz", - "integrity": "sha512-4pv1f2bMDj0Eeg/MhGqxrtveeQ5/G/UVe9iO6uTZzjnRluSA4PVWf8CW99LUPwGB3eNIA7zUFoP77YuI7hOc0A==", + "normalize-newline": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/normalize-newline/-/normalize-newline-4.1.0.tgz", + "integrity": "sha512-ff4jKqMI8Xl50/4Mms/9jPobzAV/UK+kXG2XJ/7AqOmxIx8mqfqTIHYxuAnEgJ2AQeBbLnlbmZ5+38Y9A0w/YA==", "dev": true, "requires": { - "chokidar": "^3.5.2", - "debug": "^3.2.7", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", - "pstree.remy": "^1.1.8", - "semver": "^5.7.1", - "simple-update-notifier": "^1.0.7", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "replace-buffer": "^1.2.1" + } + }, + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "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==", "dev": true, "requires": { - "ms": "^2.1.1" + "yallist": "^4.0.0" } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "lru-cache": "^6.0.0" } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true } } }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", - "dev": true, - "requires": { - "abbrev": "1" - } - }, "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 }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true + }, "npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -12239,61 +11038,21 @@ "path-key": "^3.0.0" } }, - "nwsapi": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.1.tgz", - "integrity": "sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg==", - "dev": true - }, - "oauth": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.10.0.tgz", - "integrity": "sha512-1orQ9MT1vHFGQxhuy7E/0gECD3fd2fCC+PIX+/jgmU/gI3EpRocXtmtvxCO5x3WZ443FLTLFWNDjl5MPJf9u+Q==" - }, - "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==" - }, - "object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==" - }, "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" - }, - "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==", - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, "requires": { "wrappy": "1" } }, - "one-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", - "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", - "requires": { - "fn.name": "1.x.x" - } - }, "onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", @@ -12303,29 +11062,123 @@ "mimic-fn": "^2.1.0" } }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "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.3" + } + }, + "ora": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/ora/-/ora-6.1.2.tgz", + "integrity": "sha512-EJQ3NiP5Xo94wJXIzAyOtSb0QEIAUu7m8t6UZ9krbz0vAJqr92JpcK/lEXg91q6B9pEGqrykkd2EQplnifDSBw==", + "dev": true, + "requires": { + "bl": "^5.0.0", + "chalk": "^5.0.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.6.1", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^1.1.0", + "log-symbols": "^5.1.0", + "strip-ansi": "^7.0.1", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "chalk": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "dev": true + }, + "cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, + "requires": { + "restore-cursor": "^4.0.0" + } + }, + "restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true + }, + "p-any": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-any/-/p-any-3.0.0.tgz", + "integrity": "sha512-5rqbqfsRWNb0sukt0awwgJMlaep+8jV45S15SKKB34z4UuzjcofIfnriCBhWjZP2jbVtjt9yRl7buB6RlKsu9w==", "dev": true, "requires": { - "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.3" + "p-cancelable": "^2.0.0", + "p-some": "^5.0.0" } }, - "p-defer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-3.0.0.tgz", - "integrity": "sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==" + "p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true }, "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, "requires": { "yocto-queue": "^0.1.0" } @@ -12350,6 +11203,58 @@ } } }, + "p-map": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", + "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", + "dev": true, + "requires": { + "aggregate-error": "^4.0.0" + } + }, + "p-some": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-some/-/p-some-5.0.0.tgz", + "integrity": "sha512-Js5XZxo6vHjB9NOYAzWDYAIyyiPvva0DWESAIWIK7uhSpGsyg5FwUPxipU/SOQx5x9EqhOh545d1jo6cVkitig==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0", + "p-cancelable": "^2.0.0" + }, + "dependencies": { + "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, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "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 + }, + "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 + } + } + }, + "p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } + }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -12377,51 +11282,6 @@ "lines-and-columns": "^1.1.6" } }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "passport": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/passport/-/passport-0.5.3.tgz", - "integrity": "sha512-gGc+70h4gGdBWNsR3FuV3byLDY6KBTJAIExGFXTpQaYfbbcHCBlRRKx7RBQSpqEqc5Hh2qVzRs7ssvSfOpkUEA==", - "requires": { - "passport-strategy": "1.x.x", - "pause": "0.0.1" - } - }, - "passport-google-oauth20": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/passport-google-oauth20/-/passport-google-oauth20-2.0.0.tgz", - "integrity": "sha512-KSk6IJ15RoxuGq7D1UKK/8qKhNfzbLeLrG3gkLZ7p4A6DBCcv7xpyQwuXtWdpyR0+E0mwkpjY1VfPOhxQrKzdQ==", - "requires": { - "passport-oauth2": "1.x.x" - } - }, - "passport-oauth2": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.6.1.tgz", - "integrity": "sha512-ZbV43Hq9d/SBSYQ22GOiglFsjsD1YY/qdiptA+8ej+9C1dL1TVB+mBE5kDH/D4AJo50+2i8f4bx0vg4/yDDZCQ==", - "requires": { - "base64url": "3.x.x", - "oauth": "^0.10.0", - "passport-strategy": "1.x.x", - "uid2": "0.0.x", - "utils-merge": "1.x.x" - } - }, - "passport-strategy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", - "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==" - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -12446,22 +11306,12 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "perf-regexes": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/perf-regexes/-/perf-regexes-1.0.1.tgz", + "integrity": "sha512-L7MXxUDtqr4PUaLFCDCXBfGV/6KLIuSEccizDI7JxT+c9x1G1v04BQ4+4oag84SHaCdrBgQAIs/Cqn+flwFPng==", "dev": true }, - "pause": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", - "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==" - }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -12495,10 +11345,16 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, + "prepend-http": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-3.0.1.tgz", + "integrity": "sha512-BLxfZh+m6UiAiCPZFJ4+vYoL7NrRs5XgCTRrjseATAggXhdZKKxn+JUNmuVYWY23bDHgaEHodxw8mnmtVEDtHw==", + "dev": true + }, "prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", + "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", "dev": true }, "prettier-linter-helpers": { @@ -12511,14 +11367,14 @@ } }, "pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", + "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==", "dev": true, "requires": { - "ansi-regex": "^5.0.1", + "@jest/schemas": "^29.4.3", "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" + "react-is": "^18.0.0" }, "dependencies": { "ansi-styles": { @@ -12539,125 +11395,127 @@ "sisteransi": "^1.0.5" } }, - "proto3-json-serializer": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-0.1.9.tgz", - "integrity": "sha512-A60IisqvnuI45qNRygJjrnNjX2TMdQGMY+57tR3nul3ZgO2zXkR9OGR8AXxJhkqx84g0FTnrfi3D5fWMSdANdQ==", - "requires": { - "protobufjs": "^6.11.2" - } - }, - "protobufjs": { - "version": "6.11.3", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", - "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", - "requires": { - "@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/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^4.0.0" - } - }, - "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==", - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - } - }, - "psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "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 - }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, - "pumpify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz", - "integrity": "sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==", - "requires": { - "duplexify": "^4.1.1", - "inherits": "^2.0.3", - "pump": "^3.0.0" - } - }, "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true }, "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, "requires": { "side-channel": "^1.0.4" } }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, "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 }, - "random-bytes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", - "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==" + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true }, - "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==" + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "read-pkg": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", + "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", + "dev": true, "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^3.0.2", + "parse-json": "^5.2.0", + "type-fest": "^1.0.1" + }, + "dependencies": { + "type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true + } } }, - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true + "read-pkg-up": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", + "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", + "dev": true, + "requires": { + "find-up": "^5.0.0", + "read-pkg": "^6.0.0", + "type-fest": "^1.0.1" + }, + "dependencies": { + "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, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "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, + "requires": { + "p-locate": "^5.0.0" + } + }, + "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, + "requires": { + "p-limit": "^3.0.2" + } + }, + "type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true + } + } }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -12673,16 +11531,38 @@ "picomatch": "^2.2.1" } }, + "recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "dev": true, + "requires": { + "minimatch": "^3.0.5" + } + }, "regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, + "replace-buffer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/replace-buffer/-/replace-buffer-1.2.1.tgz", + "integrity": "sha512-ly3OKwKu+3T55DjP5PjIMzxgz9lFx6dQnBmAIxryZyRKl8f22juy12ShOyuq8WrQE5UlFOseZgQZDua0iF9DHw==", + "dev": true + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true }, "resolve": { "version": "1.22.1", @@ -12695,6 +11575,12 @@ "supports-preserve-symlinks-flag": "^1.0.0" } }, + "resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true + }, "resolve-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", @@ -12702,35 +11588,37 @@ "dev": true, "requires": { "resolve-from": "^5.0.0" - }, - "dependencies": { - "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 - } } }, "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==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true }, "resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.0.tgz", + "integrity": "sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg==", "dev": true }, - "retry-request": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-4.2.2.tgz", - "integrity": "sha512-xA93uxUD/rogV7BV59agW/JHPGXeREMWiZc9jhcwY4YdZ7QOtC7qbomYg0n4wyk2lJhggjvKvhNX8wln/Aldhg==", + "responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "dev": true, "requires": { - "debug": "^4.1.1", - "extend": "^3.0.2" + "lowercase-keys": "^2.0.0" + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" } }, "reusify": { @@ -12748,6 +11636,54 @@ "glob": "^7.1.3" } }, + "rollup": { + "version": "3.17.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.17.2.tgz", + "integrity": "sha512-qMNZdlQPCkWodrAZ3qnJtvCAl4vpQ8q77uEujVCCbC/6CLB7Lcmvjq7HyiOSnf4fxTT9XgsE36oLHJBH49xjqA==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "rollup-plugin-cleanup": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-cleanup/-/rollup-plugin-cleanup-3.2.1.tgz", + "integrity": "sha512-zuv8EhoO3TpnrU8MX8W7YxSbO4gmOR0ny06Lm3nkFfq0IVKdBUtHwhVzY1OAJyNCIAdLiyPnOrU0KnO0Fri1GQ==", + "dev": true, + "requires": { + "js-cleanup": "^1.2.0", + "rollup-pluginutils": "^2.8.2" + } + }, + "rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + } + } + }, + "router-ips": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/router-ips/-/router-ips-1.0.0.tgz", + "integrity": "sha512-yBo6F52Un/WYioXbedBGvrKIiofbwt+4cUhdqDb9fNMJBI4D4jOy7jlxxaRVEvICPKU7xMmJDtDFR6YswX/sFQ==", + "dev": true + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true + }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -12758,103 +11694,37 @@ } }, "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", "dev": true, "requires": { - "tslib": "^1.9.0" + "tslib": "^2.1.0" } }, "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==" - }, - "safe-stable-stringify": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.3.1.tgz", - "integrity": "sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg==" + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "requires": { - "xmlchars": "^2.2.0" - } + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "requires": { - "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" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } - } - }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==", + "dev": true }, "shebang-command": { "version": "2.0.0", @@ -12875,6 +11745,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -12887,137 +11758,128 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "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==", - "requires": { - "is-arrayish": "^0.3.1" - }, - "dependencies": { - "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==" - } - } - }, - "simple-update-notifier": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", - "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", - "dev": true, - "requires": { - "semver": "~7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } - } - }, "sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true }, + "skip-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/skip-regex/-/skip-regex-1.0.2.tgz", + "integrity": "sha512-pEjMUbwJ5Pl/6Vn6FsamXHXItJXSRftcibixDmNCWbWhic0hzHrwkMZo0IZ7fMRH9KxcWDFSkzhccB4285PutA==", + "dev": true + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, + "slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "dependencies": { + "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 + }, + "is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true + } + } + }, "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==" + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true }, "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } } }, - "spawn-command": { - "version": "0.0.2-1", - "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", - "integrity": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==", + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", "dev": true }, - "split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, "requires": { - "through": "2" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, + "spdx-license-ids": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", + "dev": true + }, + "split-lines": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/split-lines/-/split-lines-3.0.0.tgz", + "integrity": "sha512-d0TpRBL/VfKDXsk8JxPF7zgF5pCUDdBMSlEL36xBgVeaX448t+yGXcJaikUyzkoKOJ0l6KpMfygzJU9naIuivw==", + "dev": true + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, - "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==" - }, "stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, "requires": { "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - }, - "stream-events": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", - "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", - "requires": { - "stubs": "^3.0.0" } }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" - }, "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==", + "dev": true, "requires": { "safe-buffer": "~5.2.0" } @@ -13036,6 +11898,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -13046,6 +11909,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -13068,92 +11932,21 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, - "stubs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", - "integrity": "sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==" - }, "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" } }, - "supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "dependencies": { - "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, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, - "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==", - "dev": true - }, - "teeny-request": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-7.2.0.tgz", - "integrity": "sha512-SyY0pek1zWsi0LRVAALem+avzMLc33MKW/JLLakdP4s9+D7+jHcy5x6P+h94g2QNZsAqQNfX5lsbd3WSeJXrrw==", - "requires": { - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "node-fetch": "^2.6.1", - "stream-events": "^1.0.5", - "uuid": "^8.0.0" - }, - "dependencies": { - "@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==" - }, - "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==", - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - } - } - }, - "terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - } - }, "test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -13165,27 +11958,26 @@ "minimatch": "^3.0.4" } }, - "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==" - }, "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 }, - "throat": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", - "dev": true - }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } }, "tmpl": { "version": "1.0.5", @@ -13208,111 +12000,78 @@ "is-number": "^7.0.0" } }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - }, - "touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "requires": { - "nopt": "~1.0.10" - } - }, - "tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", - "dev": true, - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - } - }, "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true }, - "triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" - }, "ts-jest": { - "version": "27.1.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.5.tgz", - "integrity": "sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==", + "version": "29.0.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.0.5.tgz", + "integrity": "sha512-PL3UciSgIpQ7f6XjVOmbi96vmDHUqAyqDr8YxzopDqX3kfgYtX1cuNeBjP+L9sFXi6nzsGGA6R3fP3DDDJyrxA==", "dev": true, "requires": { "bs-logger": "0.x", "fast-json-stable-stringify": "2.x", - "jest-util": "^27.0.0", - "json5": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", "lodash.memoize": "4.x", "make-error": "1.x", "semver": "7.x", - "yargs-parser": "20.x" - } - }, - "ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, - "requires": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "dependencies": { - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "yargs-parser": "^21.0.1" + }, + "dependencies": { + "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==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "ts2gas": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ts2gas/-/ts2gas-4.2.0.tgz", + "integrity": "sha512-5xZugaeM3wKQPj/vrWnrtYjNh4xnIz6cGSW/smCe9OTmkh1+KvHpm7M7HLq/OnBaljf4+yKctC4AYimBi4T1/Q==", "dev": true, "requires": { - "tslib": "^1.8.1" + "type-fest": "^2.1.0", + "typescript": "^4.4.2" + }, + "dependencies": { + "type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true + } } }, + "tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", + "dev": true + }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -13329,69 +12088,27 @@ "dev": true }, "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==", + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true }, - "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": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "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, - "requires": { - "is-typedarray": "^1.0.0" - } - }, "typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "dev": true - }, - "uid-safe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", - "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", - "requires": { - "random-bytes": "~1.0.0" - } - }, - "uid2": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz", - "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA==" - }, - "undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true }, "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" - }, "update-browserslist-db": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", - "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", "dev": true, "requires": { "escalade": "^3.1.1", @@ -13407,70 +12124,61 @@ "punycode": "^2.1.0" } }, + "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==", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "url-template": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", - "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==" + "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==", + "dev": true }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "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==" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true }, "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true }, "v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", + "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", "dev": true, "requires": { + "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" - }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" + "convert-source-map": "^1.6.0" + }, + "dependencies": { + "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 + } } }, - "w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { - "xml-name-validator": "^3.0.0" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "walker": { @@ -13482,36 +12190,29 @@ "makeerror": "1.0.12" } }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, "requires": { - "iconv-lite": "0.4.24" + "defaults": "^1.0.3" } }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "dev": true }, "whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, "which": { @@ -13523,33 +12224,6 @@ "isexe": "^2.0.0" } }, - "winston": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.8.1.tgz", - "integrity": "sha512-r+6YAiCR4uI3N8eQNOg8k3P3PqwAm20cLKlzVD9E66Ch39+LZC+VH1UKf9JemQj2B3QoUHfKD7Poewn0Pr3Y1w==", - "requires": { - "@dabh/diagnostics": "^2.0.2", - "async": "^3.2.3", - "is-stream": "^2.0.0", - "logform": "^2.4.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": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz", - "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==", - "requires": { - "logform": "^2.3.2", - "readable-stream": "^3.6.0", - "triple-beam": "^1.3.0" - } - }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -13560,6 +12234,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -13569,78 +12244,57 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, "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==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, "requires": { "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" + "signal-exit": "^3.0.7" } }, - "ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, - "requires": {} - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true }, "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true }, "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "dev": true, "requires": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.1.1" } }, "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "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 }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } } diff --git a/package.json b/package.json new file mode 100644 index 0000000..7d6a91e --- /dev/null +++ b/package.json @@ -0,0 +1,32 @@ +{ + "name": "event-based-marketing", + "version": "0.0.1", + "description": "", + "main": "src/index.ts", + "scripts": { + "clean": "rm -rf build dist", + "build:compile": "npx tsc", + "build:bundle": "npx rollup -c rollup.config.mjs", + "build": "npm run clean && npm run build:compile && npm run build:bundle", + "test": "npx jest src/ --passWithNoTests", + "deploy": "npm run test && npm run build && cp appsscript.json dist && cp .clasp-dev.json .clasp.json && clasp push", + "deploy-prod": "npm run test && npm run build && cp appsscript.json dist && cp .clasp-prod.json .clasp.json && clasp push" + }, + "devDependencies": { + "@google/clasp": "^2.4.2", + "@rollup/plugin-node-resolve": "^15.0.1", + "@types/google-apps-script": "^1.0.57", + "@types/google-apps-script-oauth2": "^38.0.0", + "@types/jest": "^29.4.0", + "eslint": "^8.34.0", + "eslint-config-google": "^0.14.0", + "eslint-config-prettier": "^8.6.0", + "eslint-plugin-prettier": "^4.2.1", + "jest": "^29.4.3", + "prettier": "^2.8.4", + "rollup": "^3.17.2", + "rollup-plugin-cleanup": "^3.2.1", + "ts-jest": "^29.0.5", + "typescript": "^4.9.5" + } +} diff --git a/rollup.config.mjs b/rollup.config.mjs new file mode 100644 index 0000000..01737df --- /dev/null +++ b/rollup.config.mjs @@ -0,0 +1,32 @@ +import { nodeResolve } from '@rollup/plugin-node-resolve'; +import cleanup from 'rollup-plugin-cleanup'; + +const extensions = ['.js']; + +const preventTreeShakingPlugin = () => { + return { + name: 'no-treeshaking', + resolveId(id, importer) { + if (!importer) { + // no treeshaking entry points, as we're not exporting anything + // in Apps Script files + return { id, moduleSideEffects: 'no-treeshake' }; + } + return null; + }, + }; +}; + +export default { + input: './build/index.js', + output: { + dir: 'dist', + format: 'esm', + }, + plugins: [ + preventTreeShakingPlugin(), + nodeResolve({ extensions }), + cleanup({ comments: 'all' }), + ], + context: 'this', +}; diff --git a/server/.eslintignore b/server/.eslintignore deleted file mode 100644 index 7d22296..0000000 --- a/server/.eslintignore +++ /dev/null @@ -1,6 +0,0 @@ -# build artefacts -dist/* -# 3rd party libs -/src/public/ -# custom definition files -/src/types/ \ No newline at end of file diff --git a/server/.eslintrc.js b/server/.eslintrc.js deleted file mode 100644 index 1fee254..0000000 --- a/server/.eslintrc.js +++ /dev/null @@ -1,42 +0,0 @@ -module.exports = { - env: { - browser: true, - commonjs: true, - es2021: true, - node: true, - }, - extends: [ - 'google', - 'prettier', - 'plugin:@typescript-eslint/eslint-recommended', - ], - parser: '@typescript-eslint/parser', - parserOptions: { - ecmaVersion: 13, - }, - plugins: ['@typescript-eslint', 'prettier'], - rules: { - 'valid-jsdoc': [ - 2, - { - prefer: { - return: 'returns', - }, - requireReturnDescription: false, - requireParamDescription: false, - requireReturn: false, - }, - ], - 'new-cap': 'off', - 'prettier/prettier': [ - 'warn', - { - singleQuote: true, - semi: true, - trailingComma: 'es5', - }, - ], - 'no-unused-vars': 'off', - '@typescript-eslint/no-unused-vars': 'error', - }, -}; diff --git a/server/.example_env b/server/.example_env deleted file mode 100644 index 574293c..0000000 --- a/server/.example_env +++ /dev/null @@ -1,11 +0,0 @@ -PROJECT_ID=project-id -GOOGLE_CLIENT_ID=enter-your-client-id -GOOGLE_CLIENT_SECRET=secret -OAUTH_CALLBACK_URL=set-callback-url -SESSION_SECRET=secret-for-sessions -LOG_LEVEL=DEBUG -NODE_ENV=development -PORT=8080 -AGENTS_TOPIC_ID=agent-results -WEATHER_API_KEY=open-weather-api -DEMO_ENV_NAME=test \ No newline at end of file diff --git a/server/.prettierignore b/server/.prettierignore deleted file mode 100644 index d2e742c..0000000 --- a/server/.prettierignore +++ /dev/null @@ -1,11 +0,0 @@ -node_modules -build -dist/* -../client/dist/* -res -coverage -docs -package.json -package-lock.json -../client/.angular/* - diff --git a/server/.prettierrc b/server/.prettierrc deleted file mode 100644 index 937375d..0000000 --- a/server/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "semi": true, - "singleQuote": true -} diff --git a/server/agents/source-agents/ambee/ambee-agent.test.ts b/server/agents/source-agents/ambee/ambee-agent.test.ts deleted file mode 100644 index d3dedb5..0000000 --- a/server/agents/source-agents/ambee/ambee-agent.test.ts +++ /dev/null @@ -1,175 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import axios from 'axios'; -import MockAdapter from 'axios-mock-adapter'; -import 'jest'; -import { SourceAgentTask } from '../../../common/source'; -import { AmbeeAgent } from './ambee-agent'; - -const mockPollenData = { - data: [ - { - Count: { - grass_pollen: 147, - tree_pollen: 0, - weed_pollen: 361, - }, - Risk: { - grass_pollen: 'High', - tree_pollen: 'Low', - weed_pollen: 'Very High', - }, - updatedAt: '2022-07-25T05:09:30.000Z', - }, - ], -}; -const mockAirQualityData = { - message: 'success', - stations: [ - { - CO: 1.453, - NO2: 25.291, - OZONE: 8.032, - PM10: 52.24, - PM25: 21.943, - SO2: 1.898, - city: 'Bangalore', - countryCode: 'IN', - division: 'Bangalore', - lat: 11.98625, - lng: 77.550478, - placeName: 'Race course road', - postalCode: '560020', - state: 'Karnataka', - updatedAt: '2021-05-29T13:00:00.000Z', - AQI: 72, - aqiInfo: { - pollutant: 'PM2.5', - concentration: 21.943, - category: 'Moderate', - }, - }, - ], -}; - -describe('AmbeeAgent', () => { - let agent: AmbeeAgent; - beforeEach(() => { - agent = new AmbeeAgent(); - }); - describe('#id', () => { - it('exposes the correct ID', () => { - expect(agent.id).toEqual('ambee'); - }); - }); - - describe('#describe', () => { - it('provides a description of the agent', async () => { - const description = await agent.describe(); - expect(description.id).toEqual('ambee'); - expect(description.dataPoints).toContainEqual({ - key: 'pollen-level', - name: 'Pollen Level', - type: 'string', - values: ['Low', 'Moderate', 'High', 'Very High'], - }); - expect(description.dataPoints).toContainEqual({ - key: 'air-quality', - name: 'Air Quality', - type: 'string', - values: [ - 'Good', - 'Moderate', - 'Unhealthy for Sensitive Groups', - 'Unhealthy', - 'Very Unhelathy', - 'Hazardous', - ], - }); - expect(description.parameters).toContainEqual({ - key: 'location', - type: 'location', - name: 'Location', - }); - expect(description.settings).toContainEqual({ - key: 'AMBEE_API_KEY', - name: 'Ambee API Key', - }); - }); - }); - - describe('#executeTask', () => { - let axiosMock: MockAdapter; - beforeEach(() => { - axiosMock = new MockAdapter(axios); - axiosMock - .onGet('https://api.ambeedata.com/latest/pollen/by-place') - .replyOnce(200, mockPollenData); - axiosMock - .onGet('https://api.ambeedata.com/latest/by-city') - .replyOnce(200, mockAirQualityData); - }); - - it('succeeds with a task result', async () => { - const testTask: SourceAgentTask = { - dataPoints: ['pollen-level'], - ownerId: '1234', - ownerSettings: { AMBEE_API_KEY: 'test-key' }, - parameters: { location: 'test' }, - }; - - const result = await agent.executeTask(testTask); - expect(result.status).toEqual('success'); - expect(result.data).toEqual({ 'pollen-level': 'Very High' }); - }); - it('succeeds with multiple data points', async () => { - const testTask: SourceAgentTask = { - dataPoints: ['pollen-level', 'air-quality'], - ownerId: '1234', - ownerSettings: { AMBEE_API_KEY: 'test-key' }, - parameters: { location: 'test' }, - }; - - const result = await agent.executeTask(testTask); - expect(result.status).toEqual('success'); - expect(result.data).toEqual({ - 'pollen-level': 'Very High', - 'air-quality': 'Moderate', - }); - }); - - it('fails if no API key is provided', async () => { - const testTask: SourceAgentTask = { - dataPoints: ['pollen-level'], - ownerId: '1234', - ownerSettings: {}, - parameters: { location: 'test' }, - }; - const result = await agent.executeTask(testTask); - expect(result.status).toEqual('failed'); - expect(result.data).toBeUndefined(); - }); - it('fails for an unknown data point', async () => { - const testTask: SourceAgentTask = { - dataPoints: ['unknown-data-point'], - ownerId: '1234', - ownerSettings: { AMBEE_API_KEY: 'test-key' }, - parameters: { location: 'test' }, - }; - const result = await agent.executeTask(testTask); - expect(result.status).toEqual('failed'); - expect(result.data).toBeUndefined(); - }); - }); -}); diff --git a/server/agents/source-agents/ambee/ambee-agent.ts b/server/agents/source-agents/ambee/ambee-agent.ts deleted file mode 100644 index 9d3cffd..0000000 --- a/server/agents/source-agents/ambee/ambee-agent.ts +++ /dev/null @@ -1,151 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { AgentSettingMetadata } from 'common/common'; -import { SourceAgentDataPointMetadata } from 'common/source'; -import { SimpleSourceAgent } from '../simple-source-agent'; - -interface AmbeePollenData { - data: Array<{ - Risk: { - grass_pollen: string; - tree_pollen: string; - weed_pollen: string; - }; - updatedAt: string; - }>; -} -const POLLEN_LEVELS = ['Low', 'Moderate', 'High', 'Very High']; - -/** - * Returns the highest pollen level from a list of levels. - * @param {string[]} levels the levels to compare - * @returns {string} the highest pollen level - */ -function getHighestPollenLevel(...levels: string[]): string { - const indices = levels - .map((level) => POLLEN_LEVELS.indexOf(level)) - .filter((index) => index >= 0); - const highest = Math.max(0, ...indices); - return POLLEN_LEVELS[highest]; -} - -interface AmbeeAirQualityData { - message: string; - stations: Array<{ - AQI: number; - aqiInfo: { - pollutant: string; - concentration: number; - category: string; - }; - }>; -} - -const AMBEE_API_KEY_SETTNG: AgentSettingMetadata = { - key: 'AMBEE_API_KEY', - name: 'Ambee API Key', -}; -const POLLEN_LEVEL_DATAPOINT: SourceAgentDataPointMetadata = { - key: 'pollen-level', - name: 'Pollen Level', - type: 'enum', - values: POLLEN_LEVELS, -}; -const AIR_QUALITY_DATAPOINT: SourceAgentDataPointMetadata = { - key: 'air-quality', - name: 'Air Quality', - type: 'enum', - values: [ - 'Good', - 'Moderate', - 'Unhealthy for Sensitive Groups', - 'Unhealthy', - 'Very Unhelathy', - 'Hazardous', - ], -}; - -/** - * An agent for the Ambee API. - */ -export class AmbeeAgent extends SimpleSourceAgent { - /** - * Constructor. - */ - constructor() { - super({ - id: 'ambee', - name: 'Air Quality & Pollen', - type: 'source', - settings: [AMBEE_API_KEY_SETTNG], - parameters: [{ key: 'location', type: 'location', name: 'Location' }], - dataPoints: [POLLEN_LEVEL_DATAPOINT, AIR_QUALITY_DATAPOINT], - }); - } - - /** - * @inheritdoc - */ - protected async fetch( - dataPoint: string, - sourceParameters: Record, - ownerSettings: Record - ): Promise> { - const apiKey = ownerSettings[AMBEE_API_KEY_SETTNG.key]; - if (!apiKey) { - throw new Error('Missing API key for Ambee API.'); - } - - const baseURL = 'https://api.ambeedata.com/latest'; - const headers = { 'x-api-key': apiKey }; - - const location = sourceParameters['location']; - if (dataPoint === POLLEN_LEVEL_DATAPOINT.key) { - const response = await this.executeHttpRequest( - `${baseURL}/pollen/by-place`, - { params: { place: location }, headers } - ); - - if (response.data?.data && response.data?.data.length > 0) { - const risk = response.data.data[0].Risk; - const highest = getHighestPollenLevel( - risk.grass_pollen, - risk.tree_pollen, - risk.weed_pollen - ); - return { [POLLEN_LEVEL_DATAPOINT.key]: highest }; - } else { - throw new Error( - `Unexpected response format for Ambee data point: ${dataPoint}` - ); - } - } else if (dataPoint === AIR_QUALITY_DATAPOINT.key) { - const response = await this.executeHttpRequest(`${baseURL}/by-city`, { - params: { city: location }, - headers, - }); - - if (response.data?.stations && response.data?.stations.length) { - const station = (response.data as AmbeeAirQualityData).stations[0]; - return { [AIR_QUALITY_DATAPOINT.key]: station.aqiInfo.category }; - } else { - throw new Error( - `Unexpected response format for Ambee data point: ${dataPoint}` - ); - } - } else { - throw new Error(`Unsupported Ambee data point: ${dataPoint}`); - } - } -} diff --git a/server/agents/source-agents/open-weather/open-weather-agent.test.ts b/server/agents/source-agents/open-weather/open-weather-agent.test.ts deleted file mode 100644 index a60f6b8..0000000 --- a/server/agents/source-agents/open-weather/open-weather-agent.test.ts +++ /dev/null @@ -1,201 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import axios from 'axios'; -import MockAdapter from 'axios-mock-adapter'; -import { SourceAgentTask } from '../../../common/source'; -import { OpenWeatherAgent } from './open-weather-agent'; - -const MOCK_OPEN_WEATHER_DATA = { - coord: { - lon: -0.13, - lat: 51.51, - }, - weather: [ - { - id: 300, - main: 'Drizzle', - description: 'light intensity drizzle', - icon: '09d', - }, - ], - base: 'stations', - main: { - temp: 280.32, - pressure: 1012, - humidity: 81, - temp_min: 279.15, - temp_max: 281.15, - }, - visibility: 10000, - wind: { - speed: 4.1, - deg: 80, - }, - clouds: { - all: 90, - }, - dt: 1485789600, - sys: { - type: 1, - id: 5091, - message: 0.0103, - country: 'GB', - sunrise: 1485762037, - sunset: 1485794875, - }, - id: 2643743, - name: 'London', - cod: 200, -}; - -describe('OpenWeatherAgent', () => { - let agent: OpenWeatherAgent; - beforeEach(() => { - agent = new OpenWeatherAgent(); - }); - - describe('#id', () => { - it('exposes the correct ID', () => { - expect(agent.id).toEqual('open-weather'); - }); - }); - - describe('#describe', () => { - it('provides a description of the agent', async () => { - const description = await agent.describe(); - expect(description.id).toEqual('open-weather'); - expect(description.dataPoints).toContainEqual({ - key: 'temperature', - name: 'Temperature', - type: 'number', - }); - expect(description.dataPoints).toContainEqual({ - key: 'windspeed', - name: 'Wind Speed', - type: 'number', - }); - expect(description.dataPoints).toContainEqual({ - key: 'thunderstorm', - name: 'Thunderstorm', - type: 'boolean', - }); - expect(description.dataPoints).toContainEqual({ - key: 'snow', - name: 'Snow', - type: 'boolean', - }); - expect(description.dataPoints).toContainEqual({ - key: 'rain', - name: 'Rain', - type: 'boolean', - }); - expect(description.dataPoints).toContainEqual({ - key: 'clouds', - name: 'Clouds', - type: 'boolean', - }); - expect(description.dataPoints).toContainEqual({ - key: 'clearSky', - name: 'Clear sky', - type: 'boolean', - }); - expect(description.parameters).toContainEqual({ - key: 'location', - type: 'location', - name: 'Location', - }); - expect(description.settings).toContainEqual({ - key: 'OPENWEATHER_API_KEY', - name: 'Open Weather Map API Key', - }); - }); - }); - - describe('#executeTask', () => { - let axiosMock: MockAdapter; - beforeEach(() => { - axiosMock = new MockAdapter(axios); - axiosMock - .onGet('https://api.openweathermap.org/data/2.5/weather/') - .replyOnce(200, MOCK_OPEN_WEATHER_DATA); - }); - - it('succeeds with a task result', async () => { - const testTask: SourceAgentTask = { - dataPoints: ['temperature'], - ownerId: '1234', - ownerSettings: { OPENWEATHER_API_KEY: 'test-key' }, - parameters: { location: 'test' }, - }; - - const result = await agent.executeTask(testTask); - expect(result.status).toEqual('success'); - expect(result.data).toEqual( - expect.objectContaining({ temperature: 280.32 }) - ); - }); - - it('succeeds with multiple data points', async () => { - const testTask: SourceAgentTask = { - dataPoints: ['temperature', 'windspeed'], - ownerId: '1234', - ownerSettings: { OPENWEATHER_API_KEY: 'test-key' }, - parameters: { location: 'test' }, - }; - - const result = await agent.executeTask(testTask); - expect(result.status).toEqual('success'); - expect(result.data).toEqual( - expect.objectContaining({ - temperature: 280.32, - windspeed: 4.1, - }) - ); - }); - - it('only calls the API once for multiple data points', async () => { - const testTask: SourceAgentTask = { - dataPoints: ['temperature', 'windspeed'], - ownerId: '1234', - ownerSettings: { OPENWEATHER_API_KEY: 'test-key' }, - parameters: { location: 'test' }, - }; - await agent.executeTask(testTask); - expect(axiosMock.history.get.length).toBe(1); - }); - - it('fails if no API key is provided', async () => { - const testTask: SourceAgentTask = { - dataPoints: ['temperature'], - ownerId: '1234', - ownerSettings: {}, - parameters: { location: 'test' }, - }; - const result = await agent.executeTask(testTask); - expect(result.status).toEqual('failed'); - expect(result.data).toBeUndefined(); - }); - it('fails for an unknown data point', async () => { - const testTask: SourceAgentTask = { - dataPoints: ['unknown-data-point'], - ownerId: '1234', - ownerSettings: { OPENWEATHER_API_KEY: 'test-key' }, - parameters: { location: 'test' }, - }; - const result = await agent.executeTask(testTask); - expect(result.status).toEqual('failed'); - expect(result.data).toBeUndefined(); - }); - }); -}); diff --git a/server/agents/source-agents/open-weather/open-weather-agent.ts b/server/agents/source-agents/open-weather/open-weather-agent.ts deleted file mode 100644 index cac5827..0000000 --- a/server/agents/source-agents/open-weather/open-weather-agent.ts +++ /dev/null @@ -1,135 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { AgentSettingMetadata } from '../../../common/common'; -import { SourceAgentDataPointMetadata } from '../../../common/source'; -import { SimpleSourceAgent } from '../simple-source-agent'; - -const WEAHTER_CODES = { - THUNDERSTORM: new Set([200, 201, 202, 210, 211, 212, 221, 230, 231, 232]), - DRIZZLE: new Set([300, 301, 302, 310, 311, 312, 313, 314, 321]), - RAIN: new Set([500, 501, 502, 503, 504, 511, 520, 521, 522, 531]), - SNOW: new Set([600, 601, 602, 611, 612, 613, 615, 616, 620, 621, 622]), - CLOUDS: new Set([802, 803, 804]), - CLEAR: new Set([800, 801]), -}; - -const OPENWEATHER_API_KEY_SETTING: AgentSettingMetadata = { - key: 'OPENWEATHER_API_KEY', - name: 'Open Weather Map API Key', -}; - -const TEMPERATURE_DATAPOINT: SourceAgentDataPointMetadata = { - key: 'temperature', - name: 'Temperature', - type: 'number', -}; -const WINDSPEED_DATAPOINT: SourceAgentDataPointMetadata = { - key: 'windspeed', - name: 'Wind Speed', - type: 'number', -}; -const THUNDERSTORM_DATAPOINT: SourceAgentDataPointMetadata = { - key: 'thunderstorm', - name: 'Thunderstorm', - type: 'boolean', -}; -const SNOW_DATAPOINT: SourceAgentDataPointMetadata = { - key: 'snow', - name: 'Snow', - type: 'boolean', -}; -const RAIN_DATAPOINT: SourceAgentDataPointMetadata = { - key: 'rain', - name: 'Rain', - type: 'boolean', -}; -const CLOUDS_DATAPOINT: SourceAgentDataPointMetadata = { - key: 'clouds', - name: 'Clouds', - type: 'boolean', -}; -const CLEAR_SKY_DATAPOINT: SourceAgentDataPointMetadata = { - key: 'clearSky', - name: 'Clear sky', - type: 'boolean', -}; - -/** - * An agent for the OpenWeather API. - */ -export class OpenWeatherAgent extends SimpleSourceAgent { - /** - * Constructor. - */ - constructor() { - super({ - id: 'open-weather', - name: 'Open Weather Map', - type: 'source', - settings: [OPENWEATHER_API_KEY_SETTING], - parameters: [{ key: 'location', type: 'location', name: 'Location' }], - dataPoints: [ - TEMPERATURE_DATAPOINT, - WINDSPEED_DATAPOINT, - THUNDERSTORM_DATAPOINT, - SNOW_DATAPOINT, - RAIN_DATAPOINT, - CLOUDS_DATAPOINT, - CLEAR_SKY_DATAPOINT, - ], - }); - } - - /** - * @inheritdoc - */ - protected async fetch( - dataPoint: string, - sourceParameters: Record, - ownerSettings: Record - ) { - const apiKey = ownerSettings[OPENWEATHER_API_KEY_SETTING.key]; - if (!apiKey) { - throw new Error('Missing API key for Open Weather API.'); - } - - // TODO: Add return type and interface - const response = await this.executeHttpRequest( - 'https://api.openweathermap.org/data/2.5/weather/', - { - q: sourceParameters['location'], - units: 'metric', - appid: apiKey, - } - ); - const data = response.data; - const code = data.weather[0]?.id; - - try { - return { - [TEMPERATURE_DATAPOINT.key]: data.main.temp, - [WINDSPEED_DATAPOINT.key]: data.wind.speed, - [THUNDERSTORM_DATAPOINT.key]: WEAHTER_CODES.THUNDERSTORM.has(code), - [SNOW_DATAPOINT.key]: WEAHTER_CODES.SNOW.has(code), - [RAIN_DATAPOINT.key]: - WEAHTER_CODES.RAIN.has(code) || WEAHTER_CODES.DRIZZLE.has(code), - [CLOUDS_DATAPOINT.key]: WEAHTER_CODES.CLOUDS.has(code), - [CLEAR_SKY_DATAPOINT.key]: WEAHTER_CODES.CLEAR.has(code), - }; - } catch (e) { - this.logger.error(e); - throw new Error(`Unexpected response format for Open Weather`); - } - } -} diff --git a/server/agents/source-agents/simple-source-agent.ts b/server/agents/source-agents/simple-source-agent.ts deleted file mode 100644 index ab8ea4c..0000000 --- a/server/agents/source-agents/simple-source-agent.ts +++ /dev/null @@ -1,162 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import axios, { AxiosResponse } from 'axios'; -import { - SourceAgent, - SourceAgentData, - SourceAgentMetadata, - SourceAgentTask, - SourceAgentTaskResult, -} from 'common/source'; -import { createHash } from 'crypto'; -import { logger } from '../../util/logger'; - -/** - * A very simple base implementation of a source agent. - * - * Extending classes must call the super constructor and implement the fetch - * method. - */ -export abstract class SimpleSourceAgent implements SourceAgent { - /** - * @inheritdoc - */ - readonly id: string; - protected cache: Record>; - - /** - * A logger object this source agent can use to log information about the - * query process. - */ - protected logger = logger; - - /** This agent's support data point names. */ - private supportedDataPoints: Set; - - /** - * Implementing classes must implement this function to respond to a single - * data point query. - * - * If an external API responds with a composite answer of multiple data points - * no matter which data point is being queried, the fetch method may - * pre-emptively return additional data point values to reduce the number of - * API requests. - * - * @param {string} dataPoint the data point being queried - * @param {Record} parameters the parameters for this data - * point query - * @param {Record} ownerSettings the task owner's settings - * object - */ - protected abstract fetch( - dataPoint: string, - parameters: Record, - ownerSettings: Record - ): Promise; - - /** - * Constructor - * @param {SourceAgentMetadata} description the source agent description - * for this agent - */ - constructor(private readonly description: SourceAgentMetadata) { - this.id = description.id; - this.supportedDataPoints = new Set( - description.dataPoints.map((dataPoint) => dataPoint.key) - ); - this.cache = {}; - } - - /** - * Execute HTTP request. - * - * @param {string} url - * @param {Object} params - * @param {AxiosRequestHeaders} headers - * @returns {Promise>} - */ - async executeHttpRequest(url: string, params = {}, headers = {}) { - // Calculate cache key - const cacheKey = createHash('md5') - .update(`${url}.${JSON.stringify(params)}`) - .digest('hex'); - - // Check if request is cached - if (cacheKey in this.cache) { - this.logger.info(`Returning cached result!`); - return this.cache[cacheKey]; - } - - // Execute request - const res = await axios.get(url, { - headers, - params, - }); - - // Store response in cache - this.cache[cacheKey] = res; - - return res; - } - - /** - * @inheritdoc - */ - async executeTask(task: SourceAgentTask): Promise { - const responseData: SourceAgentData = {}; - - const dataPoints = task.dataPoints; - for (const dataPoint of dataPoints) { - if (!this.supportedDataPoints.has(dataPoint)) { - return { - status: 'failed', - error: `Data point ${dataPoint} is not available in agent ${this.id}`, - }; - } - - if (dataPoint in responseData) { - // already fetched this piece of data - continue; - } - try { - const dataPoints = await this.fetch( - dataPoint, - task.parameters, - task.ownerSettings - ); - Object.entries(dataPoints).forEach( - ([dataPoint, value]) => (responseData[dataPoint] = value) - ); - } catch (err) { - this.logger.error(err); - - return { - status: 'failed', - error: - err instanceof Error - ? err.message - : `Fetching data point ${dataPoint} failed.`, - }; - } - } - return { status: 'success', data: responseData }; - } - - /** - * @inheritdoc - */ - describe() { - return Promise.resolve(this.description); - } -} diff --git a/server/agents/target-agents/dv360-ads/dv360-agent.test.ts b/server/agents/target-agents/dv360-ads/dv360-agent.test.ts deleted file mode 100644 index d50d82f..0000000 --- a/server/agents/target-agents/dv360-ads/dv360-agent.test.ts +++ /dev/null @@ -1,460 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import 'jest'; -import { TargetAgentTask } from '../../../common/target'; -import { User } from '../../../common/user'; -import { Dv360Agent } from './dv360-agent'; -import { Dv360ApiClient } from './dv360-api-client'; - -const MOCK_OWNER: User = { - id: '1', - email: 'test@test.tst', - profileId: '123', - settings: {}, - credentials: { - accessToken: 'test', - expiry: new Date(), - refreshToken: 'test', - }, -}; - -const MOCK_ACTIVATE_CAMPAIGN_TASK: TargetAgentTask = { - action: 'ACTIVATE', - agentId: 'dv360', - owner: MOCK_OWNER, - ownerSettings: {}, - parameters: { advertiserId: '1', campaignId: '1', entityType: 'campaign' }, -}; -const MOCK_ACTIVATE_IO_TASK: TargetAgentTask = { - action: 'ACTIVATE', - agentId: 'dv360', - owner: MOCK_OWNER, - ownerSettings: {}, - parameters: { - advertiserId: '1', - insertionOrderId: '2', - entityType: 'insertionOrder', - }, -}; -const MOCK_DEACTIVATE_LI_TASK: TargetAgentTask = { - action: 'DEACTIVATE', - agentId: 'dv360', - owner: MOCK_OWNER, - ownerSettings: {}, - parameters: { - advertiserId: '1', - lineItemId: '3', - entityType: 'lineItem', - }, -}; - -describe('Dv360Agent', () => { - let agent: Dv360Agent; - beforeEach(() => { - jest.resetAllMocks(); - agent = new Dv360Agent(); - }); - - describe('#id', () => { - it('exposes the correct ID', () => { - expect(agent.id).toBe('dv360'); - }); - }); - - describe('#describe', () => { - it('provides a description of the agent', async () => { - const description = await agent.describe(); - expect(description.id).toBe('dv360'); - expect(description.name).toBe('Display & Video 360'); - expect(description.targetEntities).toContainEqual({ - name: 'Line Item', - key: 'lineItem', - parameters: ['advertiserId', 'lineItemId'], - }); - expect(description.targetEntities).toContainEqual({ - name: 'Insertion Order', - key: 'insertionOrder', - parameters: ['advertiserId', 'insertionOrderId'], - }); - expect(description.targetEntities).toContainEqual({ - name: 'Campaign', - key: 'campaign', - parameters: ['advertiserId', 'campaignId'], - }); - expect(description.settings).toBeUndefined(); - }); - }); - - describe('#executeTasks', () => { - it('executes a simple task', async () => { - const modifyCampaignStatusSpy = jest - .spyOn(Dv360ApiClient.prototype, 'modifyCampaignStatus') - .mockImplementation(() => Promise.resolve()); - - const results = await agent.executeTasks([MOCK_ACTIVATE_CAMPAIGN_TASK]); - expect(results[0].status).toBe('success'); - expect(modifyCampaignStatusSpy).toHaveBeenCalled(); - }); - - it('executes a list of tasks', async () => { - const modifyCampaignStatusSpy = jest - .spyOn(Dv360ApiClient.prototype, 'modifyCampaignStatus') - .mockImplementation(() => Promise.resolve()); - const modifyInsertionOrderStatusSpy = jest - .spyOn(Dv360ApiClient.prototype, 'modifyInsertionOrderStatus') - .mockImplementation(() => Promise.resolve()); - const modifyLineItemStatusSpy = jest - .spyOn(Dv360ApiClient.prototype, 'modifyLineItemStatus') - .mockImplementation(() => Promise.resolve()); - - const tasks: TargetAgentTask[] = [ - MOCK_ACTIVATE_CAMPAIGN_TASK, - MOCK_ACTIVATE_IO_TASK, - MOCK_DEACTIVATE_LI_TASK, - ]; - - const results = await agent.executeTasks(tasks); - expect(results[0].status).toBe('success'); - expect(results[1].status).toBe('success'); - expect(results[2].status).toBe('success'); - expect(modifyCampaignStatusSpy).toHaveBeenCalledWith( - '1', - '1', - 'ENTITY_STATUS_ACTIVE' - ); - expect(modifyInsertionOrderStatusSpy).toHaveBeenCalledWith( - '1', - '2', - 'ENTITY_STATUS_ACTIVE' - ); - expect(modifyLineItemStatusSpy).toHaveBeenCalledWith( - '1', - '3', - 'ENTITY_STATUS_PAUSED' - ); - }); - - it('fails individual tasks if the client throws an error', async () => { - jest - .spyOn(Dv360ApiClient.prototype, 'modifyCampaignStatus') - .mockImplementationOnce(() => Promise.reject(new Error('err'))) - .mockImplementationOnce(() => Promise.resolve()); - - const tasks: TargetAgentTask[] = [ - MOCK_ACTIVATE_CAMPAIGN_TASK, - MOCK_ACTIVATE_CAMPAIGN_TASK, - ]; - - const results = await agent.executeTasks(tasks); - - expect(results[0].status).toBe('failed'); - expect(results[1].status).toBe('success'); - }); - - it('fails individual tasks for unsupported entity types', async () => { - jest - .spyOn(Dv360ApiClient.prototype, 'modifyCampaignStatus') - .mockImplementationOnce(() => Promise.resolve()); - - const tasks: TargetAgentTask[] = [ - MOCK_ACTIVATE_CAMPAIGN_TASK, - { - action: 'ACTIVATE', - agentId: 'dv360', - owner: MOCK_OWNER, - ownerSettings: {}, - parameters: { type: 'unknown' }, - }, - ]; - - const results = await agent.executeTasks(tasks); - - expect(results[0].status).toBe('success'); - expect(results[1].status).toBe('failed'); - }); - }); - - describe('#listEntities', () => { - it('lists partners', async () => { - jest - .spyOn(Dv360ApiClient.prototype, 'listPartners') - .mockImplementationOnce(() => - Promise.resolve([ - { - type: 'partner', - name: 'partner1', - parameters: { partnerId: '1' }, - }, - ]) - ); - - const result = await agent.listTargetEntities('partner', {}, MOCK_OWNER); - - expect(result.status).toBe('success'); - expect(result.entities).toEqual([ - { - type: 'partner', - name: 'partner1', - parameters: { partnerId: '1' }, - }, - ]); - }); - it('fails to list partners in case of API errors', async () => { - jest - .spyOn(Dv360ApiClient.prototype, 'listPartners') - .mockImplementationOnce(() => Promise.reject(new Error('err'))); - - const result = await agent.listTargetEntities('partner', {}, MOCK_OWNER); - - expect(result.status).toBe('failed'); - }); - - it('lists advertisers for partner', async () => { - const mockAdvertisers = [ - { - type: 'advertiser', - name: 'advertiser1', - parameters: { partnerId: '1', advertiserId: '1' }, - }, - ]; - jest - .spyOn(Dv360ApiClient.prototype, 'listAdvertisers') - .mockImplementationOnce(() => Promise.resolve(mockAdvertisers)); - - const result = await agent.listTargetEntities( - 'advertiser', - { partnerId: '1' }, - MOCK_OWNER - ); - - expect(result.status).toBe('success'); - expect(result.entities).toEqual(mockAdvertisers); - }); - it('fails to list advertisers in case of API errors', async () => { - jest - .spyOn(Dv360ApiClient.prototype, 'listAdvertisers') - .mockImplementationOnce(() => Promise.reject(new Error('err'))); - - const result = await agent.listTargetEntities( - 'advertiser', - { partnerId: '1' }, - MOCK_OWNER - ); - - expect(result.status).toBe('failed'); - }); - it('fails to list advertisers if no partner ID is provided', async () => { - const result = await agent.listTargetEntities( - 'advertiser', - {}, - MOCK_OWNER - ); - - expect(result.status).toBe('failed'); - }); - - it('lists campaigns for advertiser', async () => { - const mockCampaigns = [ - { - type: 'campaign', - name: 'campaign1', - parameters: { advertiserId: '1', campaignId: '1' }, - }, - ]; - jest - .spyOn(Dv360ApiClient.prototype, 'listCampaigns') - .mockImplementationOnce(() => Promise.resolve(mockCampaigns)); - - const result = await agent.listTargetEntities( - 'campaign', - { advertiserId: '1' }, - MOCK_OWNER - ); - - expect(result.status).toBe('success'); - expect(result.entities).toEqual(mockCampaigns); - }); - it('fails to list campaigns in case of API errors', async () => { - jest - .spyOn(Dv360ApiClient.prototype, 'listCampaigns') - .mockImplementationOnce(() => Promise.reject(new Error('err'))); - - const result = await agent.listTargetEntities( - 'campaign', - { advertiserId: 1 }, - MOCK_OWNER - ); - - expect(result.status).toBe('failed'); - }); - it('fails to list advertisers if no partner ID is provided', async () => { - const result = await agent.listTargetEntities('campaign', {}, MOCK_OWNER); - - expect(result.status).toBe('failed'); - }); - - it('lists insertion orders for advertiser', async () => { - const mockIos = [ - { - type: 'insertionOrder', - name: 'io1', - parameters: { advertiserId: '1', insertionOrderId: '1' }, - }, - ]; - jest - .spyOn(Dv360ApiClient.prototype, 'listInsertionOrders') - .mockImplementationOnce(() => Promise.resolve(mockIos)); - - const result = await agent.listTargetEntities( - 'insertionOrder', - { advertiserId: '1' }, - MOCK_OWNER - ); - - expect(result.status).toBe('success'); - expect(result.entities).toEqual(mockIos); - }); - it('lists insertion orders for advertiser and campaign', async () => { - const mockIos = [ - { - type: 'insertionOrder', - name: 'io1', - parameters: { advertiserId: '1', insertionOrderId: '1' }, - }, - ]; - jest - .spyOn(Dv360ApiClient.prototype, 'listInsertionOrders') - .mockImplementationOnce(() => Promise.resolve(mockIos)); - - const result = await agent.listTargetEntities( - 'insertionOrder', - { advertiserId: '1', campaignId: '1' }, - MOCK_OWNER - ); - - expect(result.status).toBe('success'); - expect(result.entities).toEqual(mockIos); - }); - it('fails to list insertion orders in case of API errors', async () => { - jest - .spyOn(Dv360ApiClient.prototype, 'listInsertionOrders') - .mockImplementationOnce(() => Promise.reject(new Error('err'))); - - const result = await agent.listTargetEntities( - 'insertionOrder', - { advertiserId: '1' }, - MOCK_OWNER - ); - - expect(result.status).toBe('failed'); - }); - it('fails to list insertion orders if no advertiser ID is provided', async () => { - const result = await agent.listTargetEntities( - 'insertionOrder', - {}, - MOCK_OWNER - ); - - expect(result.status).toBe('failed'); - }); - - it('lists line items for advertiser', async () => { - const mockLineItems = [ - { - type: 'lineItem', - name: 'li1', - parameters: { advertiserId: '1', lineItemId: '1' }, - }, - ]; - jest - .spyOn(Dv360ApiClient.prototype, 'listLineItems') - .mockImplementationOnce(() => Promise.resolve(mockLineItems)); - - const result = await agent.listTargetEntities( - 'lineItem', - { advertiserId: '1' }, - MOCK_OWNER - ); - - expect(result.status).toBe('success'); - expect(result.entities).toEqual(mockLineItems); - }); - it('lists line items for advertiser and campaign', async () => { - const mockLineItems = [ - { - type: 'lineItem', - name: 'li1', - parameters: { advertiserId: '1', lineItemId: '1' }, - }, - ]; - jest - .spyOn(Dv360ApiClient.prototype, 'listLineItems') - .mockImplementationOnce(() => Promise.resolve(mockLineItems)); - - const result = await agent.listTargetEntities( - 'lineItem', - { advertiserId: '1', campaignId: '1' }, - MOCK_OWNER - ); - - expect(result.status).toBe('success'); - expect(result.entities).toEqual(mockLineItems); - }); - it('lists line items for advertiser and insertion order', async () => { - const mockLineItems = [ - { - type: 'lineItem', - name: 'li1', - parameters: { advertiserId: '1', lineItemId: '1' }, - }, - ]; - jest - .spyOn(Dv360ApiClient.prototype, 'listLineItems') - .mockImplementationOnce(() => Promise.resolve(mockLineItems)); - - const result = await agent.listTargetEntities( - 'lineItem', - { advertiserId: '1', insertionOrder: '1' }, - MOCK_OWNER - ); - - expect(result.status).toBe('success'); - expect(result.entities).toEqual(mockLineItems); - }); - it('fails to list line items in case of API errors', async () => { - jest - .spyOn(Dv360ApiClient.prototype, 'listLineItems') - .mockImplementationOnce(() => Promise.reject(new Error('err'))); - - const result = await agent.listTargetEntities( - 'lineItem', - { advertiserId: '1' }, - MOCK_OWNER - ); - - expect(result.status).toBe('failed'); - }); - it('fails to list insertion orders if no advertiser ID is provided', async () => { - const result = await agent.listTargetEntities('lineItem', {}, MOCK_OWNER); - - expect(result.status).toBe('failed'); - }); - - it('fails for unsupported line items', async () => { - const result = await agent.listTargetEntities('unknown', {}, MOCK_OWNER); - - expect(result.status).toBe('failed'); - }); - }); -}); diff --git a/server/agents/target-agents/dv360-ads/dv360-agent.ts b/server/agents/target-agents/dv360-ads/dv360-agent.ts deleted file mode 100644 index 2deb87c..0000000 --- a/server/agents/target-agents/dv360-ads/dv360-agent.ts +++ /dev/null @@ -1,298 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { OperationResult } from '../../../common/common'; -import { - TargetAgent, - TargetAgentMetadata, - TargetAgentTask, - TargetEntityResponse, -} from '../../../common/target'; -import { User } from '../../../common/user'; -import { googleAuthService } from '../../../services/google-auth-service'; -import { Dv360ApiClient } from './dv360-api-client'; - -const DV360_AGENT_ID = 'dv360'; - -/** - * Target agent implementation for Display & Video 360. - */ -export class Dv360Agent implements TargetAgent { - readonly id = DV360_AGENT_ID; - - /** - * Returns an API client authorized for the user. - * @param {User} user - * @returns {Dv360ApiClient} the API client with the user's authorization - */ - private getDv360ApiClient(user: User) { - const auth = googleAuthService.getAuthorizedClientForUser(user); - return new Dv360ApiClient(auth); - } - - /** - * Executes a single target agent task. - * @param {TargetAgentTask} task the task - * @returns {Promise}the result of the action - */ - private async executeTask(task: TargetAgentTask): Promise { - const client = this.getDv360ApiClient(task.owner); - - const entityType = task.parameters['entityType']; - const advertiserId = task.parameters['advertiserId'] as string; - const targetStatus = - task.action === 'ACTIVATE' - ? 'ENTITY_STATUS_ACTIVE' - : 'ENTITY_STATUS_PAUSED'; - - try { - switch (entityType) { - case 'lineItem': - await client.modifyLineItemStatus( - advertiserId, - task.parameters['lineItemId'] as string, - targetStatus - ); - return { status: 'success' }; - case 'insertionOrder': - await client.modifyInsertionOrderStatus( - advertiserId, - task.parameters['insertionOrderId'] as string, - targetStatus - ); - return { status: 'success' }; - case 'campaign': - await client.modifyCampaignStatus( - advertiserId, - task.parameters['campaignId'] as string, - targetStatus - ); - return { status: 'success' }; - default: - return { - status: 'failed', - error: `Unsupported target entity type: ${entityType}`, - }; - } - } catch (err) { - return { - status: 'failed', - error: err instanceof Error ? err.message : JSON.stringify(err), - }; - } - } - - /** - * @inheritdoc - */ - async executeTasks(tasks: TargetAgentTask[]): Promise { - const results: OperationResult[] = []; - for (const task of tasks) { - const result = await this.executeTask(task); - results.push(result); - } - return results; - } - - /** - * @inheritdoc - */ - describe() { - const description: TargetAgentMetadata = { - id: 'dv360', - name: 'Display & Video 360', - type: 'target', - targetEntities: [ - { - name: 'Line Item', - key: 'lineItem', - parameters: ['advertiserId', 'lineItemId'], - }, - { - name: 'Insertion Order', - key: 'insertionOrder', - parameters: ['advertiserId', 'insertionOrderId'], - }, - { - name: 'Campaign', - key: 'campaign', - parameters: ['advertiserId', 'campaignId'], - }, - ], - }; - return Promise.resolve(description); - } - - /** - * Fetches a list of DV360 partners. - * @param {Dv360ApiClient} client the DV360 API client - * @returns {Promise} the agent response - */ - private async listPartners( - client: Dv360ApiClient - ): Promise { - try { - const entities = await client.listPartners(); - return { status: 'success', entities }; - } catch (err) { - return { - status: 'failed', - error: err instanceof Error ? err.message : JSON.stringify(err), - }; - } - } - - /** - * Fetches a list of advertisers. - * @param {Dv360ApiClient} client the DV360 API client - * @param {Record} parameters the parameters for the API call - * @returns {Promise} the agent response - */ - private async listAdvertisers( - client: Dv360ApiClient, - parameters: Record - ): Promise { - if (!parameters['partnerId']) { - return { - status: 'failed', - error: 'Missing required parameter: partnerId.', - }; - } - try { - const entities = await client.listAdvertisers( - parameters['partnerId'] as string - ); - return { status: 'success', entities }; - } catch (err) { - return { - status: 'failed', - error: err instanceof Error ? err.message : JSON.stringify(err), - }; - } - } - /** - * Fetches a list of campaigns. - * @param {Dv360ApiClient} client the DV360 API client - * @param {Record} parameters the parameters for the API call - * @returns {Promise} the agent response - */ - private async listCampaigns( - client: Dv360ApiClient, - parameters: Record - ): Promise { - if (!parameters['advertiserId']) { - return { - status: 'failed', - error: 'Missing required parameter: advertiserId.', - }; - } - try { - const entities = await client.listCampaigns( - parameters['advertiserId'] as string - ); - return { status: 'success', entities }; - } catch (err) { - return { - status: 'failed', - error: err instanceof Error ? err.message : JSON.stringify(err), - }; - } - } - /** - * Fetches a list of insertion orders. - * @param {Dv360ApiClient} client the DV360 API client - * @param {Record} parameters the parameters for the API call - * @returns {Promise} the agent response - */ - private async listInsertionOrders( - client: Dv360ApiClient, - parameters: Record - ): Promise { - if (!parameters['advertiserId']) { - return { - status: 'failed', - error: 'Missing required parameter: advertiserId.', - }; - } - try { - const entities = await client.listInsertionOrders( - parameters['advertiserId'] as string, - parameters['campaignId'] as string | undefined - ); - return { status: 'success', entities }; - } catch (err) { - return { - status: 'failed', - error: err instanceof Error ? err.message : JSON.stringify(err), - }; - } - } - /** - * Fetches a list of insertion orders. - * @param {Dv360ApiClient} client the DV360 API client - * @param {Record} parameters the parameters for the API call - * @returns {Promise} the agent response - */ - private async listLineItems( - client: Dv360ApiClient, - parameters: Record - ): Promise { - if (!parameters['advertiserId']) { - return { - status: 'failed', - error: 'Missing required parameter: advertiserId.', - }; - } - try { - const entities = await client.listLineItems( - parameters['advertiserId'] as string, - parameters['campaignId'] as string | undefined, - parameters['insertionOrderId'] as string | undefined - ); - return { status: 'success', entities }; - } catch (err) { - return { - status: 'failed', - error: err instanceof Error ? err.message : JSON.stringify(err), - }; - } - } - - /** - * @inheritdoc - */ - async listTargetEntities( - type: string, - parameters: Record, - requestor: User - ): Promise { - const client = this.getDv360ApiClient(requestor); - switch (type) { - case 'partner': - return this.listPartners(client); - case 'advertiser': - return this.listAdvertisers(client, parameters); - case 'campaign': - return this.listCampaigns(client, parameters); - case 'insertionOrder': - return this.listInsertionOrders(client, parameters); - case 'lineItem': - return this.listLineItems(client, parameters); - default: - return Promise.resolve({ - status: 'failed', - error: `Unsupported target entity type: ${type}`, - }); - } - } -} diff --git a/server/agents/target-agents/dv360-ads/dv360-api-client.test.ts b/server/agents/target-agents/dv360-ads/dv360-api-client.test.ts deleted file mode 100644 index 3f6e99a..0000000 --- a/server/agents/target-agents/dv360-ads/dv360-api-client.test.ts +++ /dev/null @@ -1,425 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { OAuth2Client } from 'google-auth-library'; -import 'jest'; -import { TargetEntity } from '../../../common/target'; -import { Dv360ApiClient } from './dv360-api-client'; -jest.mock('google-auth-library'); - -const responseSuccess = (data?: object) => () => - Promise.resolve({ status: 200, statusText: 'ok', data }); -const responseFailed = (code: number) => () => - Promise.resolve({ status: code, statusText: 'error' }); - -describe('Dv360ApiClient', () => { - const oauthMock = jest.mocked(new OAuth2Client(), true); - let client: Dv360ApiClient; - beforeEach(() => { - jest.resetAllMocks(); - client = new Dv360ApiClient(oauthMock); - }); - - describe('#listPartners', () => { - it('lists partner entities across multiple API pages', async () => { - const mockPartnerPage1 = { - partners: [ - { partnerId: '1', displayName: 'partner1' }, - { partnerId: '2', displayName: 'partner2' }, - ], - nextPageToken: 'test', - }; - const mockPartnerPage2 = { - partners: [{ partnerId: '3', displayName: 'partner3' }], - }; - oauthMock.request - .mockImplementationOnce(responseSuccess(mockPartnerPage1)) - .mockImplementationOnce(responseSuccess(mockPartnerPage2)); - - const expectedEntities: TargetEntity[] = [ - { - type: 'partner', - name: 'partner1', - parameters: { partnerId: '1' }, - }, - { - type: 'partner', - parameters: { partnerId: '2' }, - name: 'partner2', - }, - { - type: 'partner', - parameters: { partnerId: '3' }, - name: 'partner3', - }, - ]; - - const partners = await client.listPartners(); - expect(partners).toContainEqual( - expect.objectContaining(expectedEntities[0]) - ); - expect(partners).toContainEqual( - expect.objectContaining(expectedEntities[1]) - ); - expect(partners).toContainEqual( - expect.objectContaining(expectedEntities[2]) - ); - }); - - it('fails if the API request fails', async () => { - oauthMock.request.mockImplementationOnce(responseFailed(401)); - expect(client.listPartners()).rejects.toBeDefined(); - }); - }); - - describe('#listAdvertisers', () => { - it('lists all advertisers under a partner', async () => { - const mockAdvertisers1 = { - advertisers: [ - { partnerId: '1', advertiserId: '1', displayName: 'adv1' }, - ], - nextPageToken: 'abc', - }; - const mockAdvertisers2 = { - advertisers: [ - { partnerId: '1', advertiserId: '2', displayName: 'adv2' }, - ], - }; - oauthMock.request - .mockImplementationOnce(responseSuccess(mockAdvertisers1)) - .mockImplementationOnce(responseSuccess(mockAdvertisers2)); - const expectedEntities = [ - { - type: 'advertiser', - parameters: { partnerId: '1', advertiserId: '1' }, - name: 'adv1', - }, - { - type: 'advertiser', - parameters: { partnerId: '1', advertiserId: '2' }, - name: 'adv2', - }, - ]; - - const advertisers = await client.listAdvertisers('1'); - - expect(advertisers).toContainEqual( - expect.objectContaining(expectedEntities[0]) - ); - expect(advertisers).toContainEqual( - expect.objectContaining(expectedEntities[1]) - ); - }); - - it('fails if the API request fails', async () => { - oauthMock.request.mockImplementationOnce(responseFailed(401)); - expect(client.listAdvertisers('123')).rejects.toBeDefined(); - }); - }); - - describe('#listCampaigns', () => { - it('lists all campaigns under an advertiser', async () => { - const mockResponses = [ - { - campaigns: [ - { advertiserId: '1', campaignId: '1', displayName: 'cmp1' }, - ], - nextPageToken: 'abc', - }, - { - campaigns: [ - { advertiserId: '1', campaignId: '2', displayName: 'cmp2' }, - ], - }, - ]; - oauthMock.request - .mockImplementationOnce(responseSuccess(mockResponses[0])) - .mockImplementationOnce(responseSuccess(mockResponses[1])); - const expectedEntities = [ - { - type: 'campaign', - parameters: { campaignId: '1', advertiserId: '1' }, - name: 'cmp1', - }, - { - type: 'campaign', - parameters: { campaignId: '2', advertiserId: '1' }, - name: 'cmp2', - }, - ]; - - const campaigns = await client.listCampaigns('1'); - - expect(campaigns).toContainEqual( - expect.objectContaining(expectedEntities[0]) - ); - expect(campaigns).toContainEqual( - expect.objectContaining(expectedEntities[1]) - ); - }); - - it('fails if the API request fails', async () => { - oauthMock.request.mockImplementationOnce(responseFailed(401)); - expect(client.listCampaigns('123')).rejects.toBeDefined(); - }); - }); - - describe('#listInsertionOrders', () => { - it('lists all campaigns under an advertiser', async () => { - const mockResponses = [ - { - insertionOrders: [ - { advertiserId: '1', insertionOrderId: '1', displayName: 'io1' }, - ], - nextPageToken: 'abc', - }, - { - insertionOrders: [ - { advertiserId: '1', insertionOrderId: '2', displayName: 'io2' }, - ], - }, - ]; - oauthMock.request - .mockImplementationOnce(responseSuccess(mockResponses[0])) - .mockImplementationOnce(responseSuccess(mockResponses[1])); - const expectedEntities = [ - { - type: 'insertionOrder', - parameters: { advertiserId: '1', insertionOrderId: '1' }, - name: 'io1', - }, - { - type: 'insertionOrder', - parameters: { advertiserId: '1', insertionOrderId: '2' }, - name: 'io2', - }, - ]; - - const insertionOrders = await client.listInsertionOrders('1'); - - expect(insertionOrders).toContainEqual( - expect.objectContaining(expectedEntities[0]) - ); - expect(insertionOrders).toContainEqual( - expect.objectContaining(expectedEntities[1]) - ); - }); - - it('applies the optional campaign id filter', async () => { - oauthMock.request.mockImplementationOnce( - responseSuccess({ - insertionOrders: [ - { advertiserId: '1', insertionOrderId: '1', displayName: 'io1' }, - ], - }) - ); - - await client.listInsertionOrders('1', '2'); - expect(oauthMock.request).toHaveBeenCalledWith( - expect.objectContaining({ - params: expect.objectContaining({ - filter: expect.stringMatching('campaignId=2'), - }), - }) - ); - }); - - it('fails if the API request fails', async () => { - oauthMock.request.mockImplementationOnce(responseFailed(401)); - expect(client.listInsertionOrders('123')).rejects.toBeDefined(); - }); - }); - - describe('#listLineItems', () => { - it('lists all line items under an advertiser', async () => { - const mockResponses = [ - { - lineItems: [ - { advertiserId: '1', lineItemId: '1', displayName: 'li1' }, - ], - nextPageToken: 'abc', - }, - { - lineItems: [ - { advertiserId: '1', lineItemId: '2', displayName: 'li2' }, - ], - }, - ]; - oauthMock.request - .mockImplementationOnce(responseSuccess(mockResponses[0])) - .mockImplementationOnce(responseSuccess(mockResponses[1])); - const expectedEntities = [ - { - type: 'lineItem', - parameters: { advertiserId: '1', lineItemId: '1' }, - name: 'li1', - }, - { - type: 'lineItem', - parameters: { advertiserId: '1', lineItemId: '2' }, - name: 'li2', - }, - ]; - - const lineItems = await client.listLineItems('1'); - - expect(lineItems).toContainEqual( - expect.objectContaining(expectedEntities[0]) - ); - expect(lineItems).toContainEqual( - expect.objectContaining(expectedEntities[1]) - ); - }); - - it('applies the optional campaign id filter', async () => { - oauthMock.request.mockImplementationOnce( - responseSuccess({ - lineItems: [ - { advertiserId: '1', lineItemId: '1', displayName: 'li1' }, - ], - }) - ); - - await client.listLineItems('1', '2'); - expect(oauthMock.request).toHaveBeenCalledWith( - expect.objectContaining({ - params: expect.objectContaining({ - filter: expect.stringMatching('campaignId=2'), - }), - }) - ); - }); - - it('applies the optional insertion order ID filter', async () => { - oauthMock.request.mockImplementationOnce( - responseSuccess({ - lineItems: [ - { advertiserId: '1', lineItemId: '1', displayName: 'li1' }, - ], - }) - ); - - await client.listLineItems('1', '2', '3'); - expect(oauthMock.request).toHaveBeenCalledWith( - expect.objectContaining({ - params: expect.objectContaining({ - filter: expect.stringMatching('insertionOrderId=3'), - }), - }) - ); - }); - - it('fails if the API request fails', async () => { - oauthMock.request.mockImplementationOnce(responseFailed(401)); - expect(client.listCampaigns('123')).rejects.toBeDefined(); - }); - }); - - describe('modifyCampaignStatus', () => { - it('sets the target campaign status to active', async () => { - oauthMock.request.mockImplementationOnce(responseSuccess()); - - await client.modifyCampaignStatus('1', '1', 'ENTITY_STATUS_ACTIVE'); - - expect(oauthMock.request).toHaveBeenCalledWith({ - method: 'PATCH', - url: 'https://displayvideo.googleapis.com/v1/advertisers/1/campaigns/1', - params: { updateMask: 'entityStatus' }, - body: { entityStatus: 'ENTITY_STATUS_ACTIVE' }, - }); - }); - it('sets the target campaign status to paused', async () => { - oauthMock.request.mockImplementationOnce(responseSuccess()); - - await client.modifyCampaignStatus('1', '1', 'ENTITY_STATUS_PAUSED'); - - expect(oauthMock.request).toHaveBeenCalledWith({ - method: 'PATCH', - url: 'https://displayvideo.googleapis.com/v1/advertisers/1/campaigns/1', - params: { updateMask: 'entityStatus' }, - body: { entityStatus: 'ENTITY_STATUS_PAUSED' }, - }); - }); - it('failes if the API call fails', () => { - oauthMock.request.mockImplementationOnce(responseFailed(400)); - expect( - client.modifyCampaignStatus('1', '1', 'ENTITY_STATUS_ACTIVE') - ).rejects.toBeDefined(); - }); - }); - - describe('modifyInsertionOrderStatus', () => { - it('sets the target campaign status to active', async () => { - oauthMock.request.mockImplementationOnce(responseSuccess()); - - await client.modifyInsertionOrderStatus('1', '1', 'ENTITY_STATUS_ACTIVE'); - - expect(oauthMock.request).toHaveBeenCalledWith({ - method: 'PATCH', - url: 'https://displayvideo.googleapis.com/v1/advertisers/1/insertionOrders/1', - params: { updateMask: 'entityStatus' }, - body: { entityStatus: 'ENTITY_STATUS_ACTIVE' }, - }); - }); - it('sets the target campaign status to paused', async () => { - oauthMock.request.mockImplementationOnce(responseSuccess()); - - await client.modifyInsertionOrderStatus('1', '1', 'ENTITY_STATUS_PAUSED'); - - expect(oauthMock.request).toHaveBeenCalledWith({ - method: 'PATCH', - url: 'https://displayvideo.googleapis.com/v1/advertisers/1/insertionOrders/1', - params: { updateMask: 'entityStatus' }, - body: { entityStatus: 'ENTITY_STATUS_PAUSED' }, - }); - }); - it('failes if the API call fails', () => { - oauthMock.request.mockImplementationOnce(responseFailed(400)); - expect( - client.modifyInsertionOrderStatus('1', '1', 'ENTITY_STATUS_ACTIVE') - ).rejects.toBeDefined(); - }); - }); - describe('modifyLineItemStatus', () => { - it('sets the target campaign status to active', async () => { - oauthMock.request.mockImplementationOnce(responseSuccess()); - - await client.modifyLineItemStatus('1', '1', 'ENTITY_STATUS_ACTIVE'); - - expect(oauthMock.request).toHaveBeenCalledWith({ - method: 'PATCH', - url: 'https://displayvideo.googleapis.com/v1/advertisers/1/lineItems/1', - params: { updateMask: 'entityStatus' }, - body: { entityStatus: 'ENTITY_STATUS_ACTIVE' }, - }); - }); - it('sets the target campaign status to paused', async () => { - oauthMock.request.mockImplementationOnce(responseSuccess()); - - await client.modifyLineItemStatus('1', '1', 'ENTITY_STATUS_PAUSED'); - - expect(oauthMock.request).toHaveBeenCalledWith({ - method: 'PATCH', - url: 'https://displayvideo.googleapis.com/v1/advertisers/1/lineItems/1', - params: { updateMask: 'entityStatus' }, - body: { entityStatus: 'ENTITY_STATUS_PAUSED' }, - }); - }); - it('failes if the API call fails', () => { - oauthMock.request.mockImplementationOnce(responseFailed(400)); - expect( - client.modifyLineItemStatus('1', '1', 'ENTITY_STATUS_ACTIVE') - ).rejects.toBeDefined(); - }); - }); -}); diff --git a/server/agents/target-agents/dv360-ads/dv360-api-client.ts b/server/agents/target-agents/dv360-ads/dv360-api-client.ts deleted file mode 100644 index 87dedc2..0000000 --- a/server/agents/target-agents/dv360-ads/dv360-api-client.ts +++ /dev/null @@ -1,357 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { OAuth2Client } from 'google-auth-library'; -import { TargetEntity } from '../../../common/target'; - -interface ResourceItem { - displayName: string; -} -interface ResourcePage { - nextPageToken?: string; -} -interface Dv360Partner extends ResourceItem { - partnerId: string; -} -interface Dv360PartnerPage extends ResourcePage { - partners: Dv360Partner[]; -} -interface Dv360Advertiser extends ResourceItem { - partnerId: string; - advertiserId: string; -} -interface Dv360AdvertiserPage extends ResourcePage { - advertisers: Dv360Advertiser[]; -} -interface Dv360Campaign extends ResourceItem { - advertiserId: string; - campaignId: string; -} -interface Dv360CampaignPage extends ResourcePage { - campaigns: Dv360Campaign[]; -} -interface Dv360InsertionOrder extends ResourceItem { - campaignId: string; - insertionOrderId: string; -} -interface Dv360InsertionOrderPage extends ResourcePage { - insertionOrders: Dv360InsertionOrder[]; -} -interface Dv360LineItem extends ResourceItem { - insertionOrderId: string; - lineItemId: string; -} -interface Dv360LineItemPage extends ResourcePage { - lineItems: Dv360LineItem[]; -} - -type TargetEntityStatus = 'ENTITY_STATUS_ACTIVE' | 'ENTITY_STATUS_PAUSED'; - -const DV360_API_URL = 'https://displayvideo.googleapis.com/v1'; -const DV360_PARTNER_FIELDS = 'partners(partnerId,displayName),nextPageToken'; -const DV360_ADVERTISER_FIELDS = - 'advertisers(partnerId,advertiserId,displayName),nextPageToken'; -const DV360_CAMPAIGN_FIELDS = - 'campaigns(advertiserId,campaignId,displayName),nextPageToken'; -const DV360_INSERTION_ORDER_FIELDS = - 'insertionOrders(advertiserId,insertionOrderId,displayName),nextPageToken'; -const DV360_LINE_ITEM_FIELDS = - 'lineItems(advertiserId,lineItemId,displayName),nextPageToken'; -const DV360_ACTIVE_FILTER = 'entityStatus="ENTITY_STATUS_ACTIVE"'; -const DV360_ACTIVE_OR_PAUSED_FILTER = `(${DV360_ACTIVE_FILTER} OR entityStatus="ENTITY_STATUS_PAUSED")`; - -/** - * DV360 API interface for the DV360 agent and directory. - */ -export class Dv360ApiClient { - /** - * Constructor. - * @param {OAuth2Client} oauthClient an OAuth client for authorized API - * requests. - */ - constructor(private readonly oauthClient: OAuth2Client) {} - - /** - * Fetches a page of resource items from the API. - * @param {string} url the resource URL - * @param {Record} params additional params to customize the - * API response - * @param {string|undefined} pageToken an optional page token to specify a - * page to fetch - * @returns {Promise} a resource page containing the next page token and - * the resources - */ - private async fetchItemsPage( - url: string, - params: Record, - pageToken?: string - ): Promise { - const requestParams = { ...params, pageToken }; - const response = await this.oauthClient.request({ - url, - params: requestParams, - }); - if (response.status !== 200 || response.data === undefined) { - throw new Error(`DV360 API client error: ${response.statusText}`); - } - return response.data as T; - } - - /** - * Fetches all resource items within a specified resource URL. - * @param {string} url the resource URL - * @param {Record} params addition URL parameters to - * customize the API response - * @param {function(page:U): T} resourceSelector a function which retrieves - * the resource items from the page - * @returns {Promise} a list of resource items - */ - private async fetchItems( - url: string, - params: Record, - resourceSelector: (page: U) => T[] - ): Promise { - let pageToken: string | undefined; - let resources: T[] = []; - do { - const page = await this.fetchItemsPage(url, params, pageToken); - const items = resourceSelector(page); - if (items && items.length) { - resources = resources.concat(items); - } - pageToken = page.nextPageToken; - } while (pageToken); - return resources; - } - - /** - * Fetches all partners for the authorized user. - * @returns {Promise} a list of partner entities - */ - async listPartners(): Promise { - const url = `${DV360_API_URL}/partners`; - - const items = await this.fetchItems( - url, - { - filter: DV360_ACTIVE_FILTER, - fields: DV360_PARTNER_FIELDS, - }, - (page) => page.partners - ); - const entities: TargetEntity[] = items.map((item) => ({ - type: 'partner', - parameters: { partnerId: item.partnerId }, - name: item.displayName, - })); - return entities; - } - - /** - * Fetches all advertisers for the current user (optionally within the - * specified partner ID). - * @param {string} partnerId an optional partner ID filter - * @returns {Promise} a list of advertiser entities - */ - async listAdvertisers(partnerId: string): Promise { - const url = `${DV360_API_URL}/advertisers`; - const items = await this.fetchItems( - url, - { - partnerId, - filter: DV360_ACTIVE_FILTER, - fields: DV360_ADVERTISER_FIELDS, - }, - (page) => page.advertisers - ); - const entities: TargetEntity[] = items.map((item) => ({ - type: 'advertiser', - parameters: { partnerId, advertiserId: item.advertiserId }, - name: item.displayName, - })); - return entities; - } - - /** - * Lists all campaigns under an advertiser. - * @param {string} advertiserId the advertiser ID for which to list campaigns - * @returns {Promise} a list of campaign entities - */ - async listCampaigns(advertiserId: string): Promise { - const url = `${DV360_API_URL}/advertisers/${advertiserId}/campaigns`; - const items = await this.fetchItems( - url, - { - filter: DV360_ACTIVE_OR_PAUSED_FILTER, - fields: DV360_CAMPAIGN_FIELDS, - }, - (page) => page.campaigns - ); - const entities: TargetEntity[] = items.map((item) => ({ - type: 'campaign', - parameters: { advertiserId, campaignId: item.campaignId }, - name: item.displayName, - })); - return entities; - } - - /** - * Lists all line items for the current user and advertiser (optionally also - * within the specified campaign). - * @param {string} advertiserId the advertiser ID - * @param {string} [campaignId] an optional campaign filter - * @returns {Promise} a list of insertion order entities - */ - async listInsertionOrders( - advertiserId: string, - campaignId?: string - ): Promise { - const url = `${DV360_API_URL}/advertisers/${advertiserId}/insertionOrders`; - - let filter = DV360_ACTIVE_OR_PAUSED_FILTER; - if (campaignId) { - filter = `campaignId=${campaignId} AND ${filter}`; - } - - const items = await this.fetchItems< - Dv360InsertionOrder, - Dv360InsertionOrderPage - >( - url, - { - fields: DV360_INSERTION_ORDER_FIELDS, - filter, - }, - (page) => page.insertionOrders - ); - const entities: TargetEntity[] = items.map((item) => ({ - type: 'insertionOrder', - parameters: { advertiserId, insertionOrderId: item.insertionOrderId }, - name: item.displayName, - })); - return entities; - } - - /** - * Lists all line items for the current user and advertiser (optionally also - * within the specified campaign or insertion order). - * @param {string} advertiserId the advertiser ID - * @param {string} [campaignId] an optional campaign filter - * @param {string} [insertionOrderId] an optional insertion order filter - * @returns {Promise} a list of insertion order entities - */ - async listLineItems( - advertiserId: string, - campaignId?: string, - insertionOrderId?: string - ): Promise { - const url = `${DV360_API_URL}/advertisers/${advertiserId}/lineItems`; - - let filter = DV360_ACTIVE_OR_PAUSED_FILTER; - if (insertionOrderId) { - filter = `insertionOrderId=${insertionOrderId} AND ${filter}`; - } else if (campaignId) { - filter = `campaignId=${campaignId} AND ${filter}`; - } - - const items = await this.fetchItems( - url, - { - fields: DV360_LINE_ITEM_FIELDS, - filter, - }, - (page) => page.lineItems - ); - const entities: TargetEntity[] = items.map((item) => ({ - type: 'lineItem', - parameters: { advertiserId, lineItemId: item.lineItemId }, - name: item.displayName, - })); - return entities; - } - - /** - * Modifies a resource item's status - * @param {string} url the URL for the resource item to modify - * @param {TargetEntityStatus} status the target status - * @returns {Promise} completes after the operation - */ - private async modifyItemStatus( - url: string, - status: TargetEntityStatus - ): Promise { - const response = await this.oauthClient.request({ - method: 'PATCH', - url, - params: { updateMask: 'entityStatus' }, - body: { entityStatus: status }, - }); - if (response.status !== 200) { - throw new Error(`${response.status}: ${response.statusText}`); - } - } - - /** - * Modifies a line item's status - * @param {string} advertiserId the advertiser ID for the line item - * @param {string} lineItemId the ID of the line item to modify - * @param {TargetEntityStatus} status the target status - * @returns {Promise} completes after the operation - */ - modifyLineItemStatus( - advertiserId: string, - lineItemId: string, - status: TargetEntityStatus - ): Promise { - return this.modifyItemStatus( - `${DV360_API_URL}/advertisers/${advertiserId}/lineItems/${lineItemId}`, - status - ); - } - - /** - * Modifies a insertion order's status - * @param {string} advertiserId the advertiser ID for the line item - * @param {string} insertionOrderId the ID of the insertion order to modify - * @param {TargetEntityStatus} status the target status - * @returns {Promise} completes after the operation - */ - modifyInsertionOrderStatus( - advertiserId: string, - insertionOrderId: string, - status: TargetEntityStatus - ): Promise { - return this.modifyItemStatus( - `${DV360_API_URL}/advertisers/${advertiserId}/insertionOrders/${insertionOrderId}`, - status - ); - } - - /** - * Modifies a campaign's status - * @param {string} advertiserId the advertiser ID for the line item - * @param {string}campaignId the ID of the campaign to modify - * @param {TargetEntityStatus} status the target status - * @returns {Promise} completes after the operation - */ - modifyCampaignStatus( - advertiserId: string, - campaignId: string, - status: TargetEntityStatus - ): Promise { - return this.modifyItemStatus( - `${DV360_API_URL}/advertisers/${advertiserId}/campaigns/${campaignId}`, - status - ); - } -} diff --git a/server/agents/target-agents/google-ads/google-ads-agent.test.ts b/server/agents/target-agents/google-ads/google-ads-agent.test.ts deleted file mode 100644 index eb58759..0000000 --- a/server/agents/target-agents/google-ads/google-ads-agent.test.ts +++ /dev/null @@ -1,238 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { OAuth2Client } from 'google-auth-library'; -import 'jest'; -import { TargetAgentTask } from '../../../common/target'; -import { User } from '../../../common/user'; -import { GoogleAdsAgent } from './google-ads-agent'; - -jest.mock('google-auth-library'); - -const MOCK_OWNER: User = { - id: '1', - email: 'test@test.tst', - profileId: '123', - settings: {}, - credentials: { - accessToken: 'test', - expiry: new Date(), - refreshToken: 'test', - }, -}; -const MOCK_ACTIVATE_ADGROUP_TASK: TargetAgentTask = { - action: 'ACTIVATE', - agentId: 'google-ads', - owner: MOCK_OWNER, - ownerSettings: { - GOOGLE_ADS_DEVELOPER_TOKEN: 'test', - GOOGLE_ADS_MANAGER_ACCOUNT_ID: 'test', - }, - parameters: { - entityType: 'adGroup', - customerAccountId: '1', - adGroupId: '1', - }, -}; -const MOCK_DEACTIVATE_ADGROUP_TASK: TargetAgentTask = { - action: 'DEACTIVATE', - agentId: 'google-ads', - owner: MOCK_OWNER, - ownerSettings: { - GOOGLE_ADS_DEVELOPER_TOKEN: 'test', - GOOGLE_ADS_MANAGER_ACCOUNT_ID: 'test', - }, - parameters: { - entityType: 'adGroup', - customerAccountId: '1', - adGroupId: '1', - }, -}; - -describe('GoogleAdsAgent', () => { - let agent: GoogleAdsAgent; - beforeEach(() => { - jest.resetAllMocks(); - agent = new GoogleAdsAgent(); - }); - - describe('#id', () => { - it('exposes the correct ID', () => { - expect(agent.id).toBe('google-ads'); - }); - }); - - describe('#describe', () => { - it('provides a description of the agent', async () => { - const description = await agent.describe(); - expect(description.id).toBe('google-ads'); - expect(description.name).toBe('Google Ads'); - expect(description.targetEntities).toContainEqual({ - name: 'Ad Group', - key: 'adGroup', - parameters: ['customerAccountId', 'adGroupId'], - }); - expect(description.settings).toContainEqual({ - key: 'GOOGLEADS_MANAGER_ACCOUNT_ID', - name: 'Google Ads Manager Account ID', - }); - expect(description.settings).toContainEqual({ - key: 'GOOGLEADS_DEV_TOKEN', - name: 'Google Ads Developer Token', - }); - }); - }); - - describe('#executeTasks', () => { - it('executes a simple task', async () => { - const modifyAdGroupStatusSpy = jest - .spyOn(OAuth2Client.prototype, 'request') - .mockImplementation(() => - Promise.resolve({ - status: 200, - }) - ); - - const results = await agent.executeTasks([MOCK_ACTIVATE_ADGROUP_TASK]); - expect(results[0].status).toBe('success'); - expect(modifyAdGroupStatusSpy).toHaveBeenCalled(); - }); - - it('executes a multiple tasks', async () => { - const modifyAdGroupStatusSpy = jest - .spyOn(OAuth2Client.prototype, 'request') - .mockImplementation(() => Promise.resolve({ status: 200 })); - - const results = await agent.executeTasks([ - MOCK_ACTIVATE_ADGROUP_TASK, - MOCK_DEACTIVATE_ADGROUP_TASK, - ]); - expect(results[0].status).toBe('success'); - expect(results[1].status).toBe('success'); - expect(modifyAdGroupStatusSpy).toHaveBeenCalledTimes(2); - }); - - it('fails individual tasks if the client responds with an error', async () => { - jest - .spyOn(OAuth2Client.prototype, 'request') - .mockImplementationOnce(() => Promise.resolve({ status: 400 })) - .mockImplementationOnce(() => Promise.resolve({ status: 200 })); - - const tasks: TargetAgentTask[] = [ - MOCK_ACTIVATE_ADGROUP_TASK, - MOCK_DEACTIVATE_ADGROUP_TASK, - ]; - - const results = await agent.executeTasks(tasks); - - expect(results[0].status).toBe('failed'); - expect(results[1].status).toBe('success'); - }); - - it('fails individual tasks for unsupported entity types', async () => { - jest - .spyOn(OAuth2Client.prototype, 'request') - .mockImplementationOnce(() => Promise.resolve({ status: 200 })); - - const tasks: TargetAgentTask[] = [ - MOCK_ACTIVATE_ADGROUP_TASK, - { - action: 'ACTIVATE', - agentId: 'google-ads', - owner: MOCK_OWNER, - ownerSettings: { - GOOGLE_ADS_DEVELOPER_TOKEN: 'test', - GOOGLE_ADS_MANAGER_ACCOUNT_ID: 'test', - }, - parameters: { type: 'unknown' }, - }, - ]; - - const results = await agent.executeTasks(tasks); - - expect(results[0].status).toBe('success'); - expect(results[1].status).toBe('failed'); - }); - }); - - describe('#listTargetEntities', () => { - it('lists adgroups', async () => { - const mockResponse = { - status: 200, - data: { - results: [ - { - customerAccountId: '1', - campaign: { id: '1', name: 'campaign1' }, - adGroup: { - id: '1', - name: 'adGroup1', - type: 'type', - status: 'PAUSED', - }, - }, - ], - }, - }; - jest - .spyOn(OAuth2Client.prototype, 'request') - .mockImplementation(() => Promise.resolve(mockResponse)); - - const result = await agent.listTargetEntities( - 'adGroup', - { customerAccountId: '1' }, - MOCK_OWNER, - { - GOOGLE_ADS_DEVELOPER_TOKEN: 'test', - GOOGLE_ADS_MANAGER_ACCOUNT_ID: 'test', - } - ); - - expect(result.status).toBe('success'); - expect(result.entities).toContainEqual({ - type: 'adGroup', - name: 'adGroup1', - parameters: { - customerAccountId: '1', - adGroupId: '1', - }, - }); - }); - - it('fails for unsupported line items', async () => { - const result = await agent.listTargetEntities( - 'unknown', - {}, - MOCK_OWNER, - {} - ); - expect(result.status).toBe('failed'); - }); - it('fails for api error responses', async () => { - jest - .spyOn(OAuth2Client.prototype, 'request') - .mockImplementation(() => Promise.resolve({ status: 400 })); - - const result = await agent.listTargetEntities( - 'adGroup', - { customerAccountId: '1' }, - MOCK_OWNER, - { - GOOGLE_ADS_DEVELOPER_TOKEN: 'test', - GOOGLE_ADS_MANAGER_ACCOUNT_ID: 'test', - } - ); - expect(result.status).toBe('failed'); - }); - }); -}); diff --git a/server/agents/target-agents/google-ads/google-ads-agent.ts b/server/agents/target-agents/google-ads/google-ads-agent.ts deleted file mode 100644 index 41e816f..0000000 --- a/server/agents/target-agents/google-ads/google-ads-agent.ts +++ /dev/null @@ -1,243 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { GaxiosError, GaxiosOptions } from 'gaxios'; -import { OAuth2Client } from 'google-auth-library'; -import { OperationResult } from '../../../common/common'; -import { - TargetAgent, - TargetAgentAction, - TargetAgentMetadata, - TargetAgentTask, - TargetEntity, - TargetEntityResponse, -} from '../../../common/target'; -import { User } from '../../../common/user'; -import { googleAuthService } from '../../../services/google-auth-service'; - -interface GoogleAdsAdgroupInfo { - customerAccountId: string; - campaign: { id: string; name: string }; - adGroup: { id: string; name: string; type: string; status: string }; -} -interface GoogleAdsQueryResult { - results: T[]; -} - -const GOOGLEADS_API_URL = 'https://googleads.googleapis.com/v10'; -const GOOGLEADS_AGENT_ID = 'google-ads'; - -/** - * Target agent implementation for Google Ads. - */ -export class GoogleAdsAgent implements TargetAgent { - readonly id = GOOGLEADS_AGENT_ID; - - /** - * Performs an action on the specified ad group. - * @param {OAuth2Client} client the authorized API client - * @param {TargetAgentAction} action the action to perform - * @param {string} customerAccountId the customer account ID - * @param {string} adGroupId the ad group ID - * @param {string} developerToken the Google Ads developer token - * @param {string} managerAccountId the MCC ID - * @returns {Promise} the result of the action - */ - public async performAdGroupAction( - client: OAuth2Client, - action: TargetAgentAction, - customerAccountId: string, - adGroupId: string, - developerToken: string, - managerAccountId: string - ): Promise { - const resourceUrl = `/customers/${customerAccountId}/adGroups/${adGroupId}`; - const adGroupOperation = { - updateMask: 'status', - update: { - resourceName: resourceUrl, - status: action === 'ACTIVATE' ? 'ENABLED' : 'PAUSED', - }, - }; - const mutateOperation = { operations: [adGroupOperation] }; - - const request: GaxiosOptions = { - method: 'POST', - baseURL: GOOGLEADS_API_URL, - url: `/customers/${customerAccountId}/adGroups:mutate`, - headers: { - 'developer-token': developerToken, - 'login-customer-id': parseInt(managerAccountId), - }, - body: mutateOperation, - }; - const response = await client.request(request); - if (response.status === 200) { - return { status: 'success' }; - } else { - return { - status: 'failed', - error: `Failed to activate target entity: ${resourceUrl}`, - }; - } - } - - /** - * Executes a single target agent task. - * @param {TargetAgentTask} task the task to execute - * @returns {Promise} the result of the performed action - */ - private executeTask(task: TargetAgentTask): Promise { - const client = googleAuthService.getAuthorizedClientForUser(task.owner); - - const entityType = task.parameters['entityType']; - const customerAccountId = task.parameters['customerAccountId'] as string; - const managerAccountId = task.ownerSettings['GOOGLEADS_MANAGER_ACCOUNT_ID']; - const developerToken = task.ownerSettings['GOOGLEADS_DEV_TOKEN']; - - switch (entityType) { - case 'adGroup': - try { - const adGroupId = task.parameters['adGroupId'] as string; - return this.performAdGroupAction( - client, - task.action, - customerAccountId, - adGroupId, - developerToken, - managerAccountId - ); - } catch (err) { - return Promise.resolve({ - status: 'failed', - error: err instanceof Error ? err.message : JSON.stringify(err), - }); - } - default: - return Promise.resolve({ - status: 'failed', - error: `Unsupported entity type: ${entityType}`, - }); - } - } - - /** - * @inheritdoc - */ - async executeTasks(tasks: TargetAgentTask[]): Promise { - const results: OperationResult[] = []; - - for (const task of tasks) { - const result = await this.executeTask(task); - results.push(result); - } - - return results; - } - - /** - * @inheritdoc - */ - describe() { - const description: TargetAgentMetadata = { - id: 'google-ads', - name: 'Google Ads', - type: 'target', - settings: [ - { - key: 'GOOGLEADS_MANAGER_ACCOUNT_ID', - name: 'Google Ads Manager Account ID', - }, - { key: 'GOOGLEADS_DEV_TOKEN', name: 'Google Ads Developer Token' }, - ], - targetEntities: [ - { - name: 'Ad Group', - key: 'adGroup', - parameters: ['customerAccountId', 'adGroupId'], - }, - ], - }; - return Promise.resolve(description); - } - - /** - * @inheritdoc - */ - async listTargetEntities( - type: string, - parameters: Record, - requestor: User, - requestorSettings: Record - ): Promise { - const client = googleAuthService.getAuthorizedClientForUser(requestor); - const customerAccountId = - 'customerAccountId' in parameters - ? (parameters['customerAccountId'] as string) - : (requestorSettings['GOOGLEADS_ACCOUNT_ID'] as string); - const developerToken = requestorSettings['GOOGLEADS_DEV_TOKEN'] as string; - const managerAccountId = requestorSettings[ - 'GOOGLEADS_MANAGER_ACCOUNT_ID' - ] as string; - - if (type.toLowerCase() === 'adgroup') { - const query = `SELECT ad_group.name, - campaign.id, - campaign.name, - ad_group.id, - ad_group.name, - ad_group.status, - ad_group.type - FROM ad_group - WHERE ad_group.status != 'REMOVED'`; - - let response; - - try { - response = await client.request< - GoogleAdsQueryResult - >({ - url: `${GOOGLEADS_API_URL}/customers/${customerAccountId}/googleAds:search`, - data: { query }, - method: 'POST', - headers: { - 'developer-token': developerToken, - 'login-customer-id': parseInt(managerAccountId), - }, - }); - } catch (err) { - console.log(err); - response = (err as GaxiosError).response; - } - - if (response.status !== 200 || response.data === undefined) { - return { - status: 'failed', - error: `HTTP error: ${response.statusText}`, - }; - } - - const entities = response.data.results.map( - ({ adGroup }) => - ({ - type: 'adGroup', - parameters: { customerAccountId, adGroupId: adGroup.id }, - name: adGroup.name, - } as TargetEntity) - ); - - return { status: 'success', entities }; - } - return { status: 'failed', error: `Unsupported entity type: ${type}` }; - } -} diff --git a/server/app.ts b/server/app.ts deleted file mode 100644 index 531f59e..0000000 --- a/server/app.ts +++ /dev/null @@ -1,122 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -// Load environment variables first -import env from 'dotenv'; -import { logger } from './util/logger'; - -const envConfig = env.config(); -if (envConfig.error || envConfig.parsed == null) { - logger.error('Error loading configuration from .env file'); -} - -import { FirestoreStore } from '@google-cloud/connect-firestore'; -import { Firestore } from '@google-cloud/firestore'; -import bodyParser from 'body-parser'; -import cors from 'cors'; -import express, { NextFunction, Request, Response } from 'express'; -import session from 'express-session'; -import passport from 'passport'; -import path from 'path'; -import { createGoogleStrategy } from './auth/google-auth'; -import { User } from './common/user'; -import router from './routes'; -import { handleGenericError } from './util/error'; - -const app = express(); - -logger.info(`LOG LEVEL SETTING : ${process.env.LOG_LEVEL}`); -logger.debug({ ...process.env }); -logger.debug( - '-------------------------------END CONFIGURATION----------------' -); -const PORT = process.env.PORT || 8080; -app.set('PORT', PORT); -/** - * Express configuration - */ - -// Configure CORS -app.use( - cors({ - origin: true, - credentials: true, - methods: ['GET', 'POST', 'PATCH', 'DELETE', 'PUT', 'HEAD', 'OPTIONS'], - preflightContinue: true, - optionsSuccessStatus: 204, - }) -); -// Configure static assets & Frontend files -app.use(express.static(path.join(__dirname, './public'))); -app.use(express.json()); - -// Configure app to process any request body as JSON and throw error if JSON is -// not valid -app.use(bodyParser.json({ type: '*/*' })); -app.use(express.urlencoded({ extended: true })); - -// Configure sessions -// TDOD(jhoesel): Check if session cookie can live longer than access-token -const SESSION_COOKIE_MAX_AGE = 3600000; -app.use( - session({ - store: new FirestoreStore({ - dataset: new Firestore(), - kind: 'sessions', - }), - secret: process.env.SESSION_SECRET || 's9hp0VtUkd$FJM$T91lB', - cookie: { - secure: process.env.NODE_ENV !== 'development', - maxAge: SESSION_COOKIE_MAX_AGE, - }, - resave: false, - saveUninitialized: true, - }) -); - -// Configure request logger -export const requestLogger = ( - req: Request, - res: Response, - next: NextFunction -) => { - const message = ` Url:${req.url} - Method: ${req.method} - Params: ${JSON.stringify(req.params, null, 2)} - Body: ${JSON.stringify(req.body, null, 2)}`; - logger.debug(message); - next(); -}; -app.use(requestLogger); - -// Initialize passport for app login -try { - passport.use(createGoogleStrategy()); - // TODO(jhoesel): Reduce user properties stored in session - passport.serializeUser((user, done) => done(null, user)); - passport.deserializeUser((user, done) => done(null, user)); - - app.use(passport.initialize()); - app.use(passport.session()); -} catch (err) { - logger.error(err); -} - -// Configure routes -app.use('/', router); - -// Configure error handlers (always do last) -// Register generic error handler for anything uncaught -app.use(handleGenericError); - -export default app; diff --git a/server/auth/google-auth.ts b/server/auth/google-auth.ts deleted file mode 100644 index f4438aa..0000000 --- a/server/auth/google-auth.ts +++ /dev/null @@ -1,290 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import axios from 'axios'; -import { add as dateAdd, isFuture as dateIsFuture } from 'date-fns'; -import { NextFunction, Request, Response } from 'express'; -import { - Profile, - Strategy, - StrategyOptions, - VerifyCallback, -} from 'passport-google-oauth20'; -import { ModelSpec } from '../common/common'; -import { Credentials, User } from '../common/user'; -import { collectionService } from '../services/collections-service'; -import { AppError } from '../util/error'; -import { logger } from '../util/logger'; - -const users = collectionService.users; -const GOOGLE_TOKEN_URL = 'https://oauth2.googleapis.com/token'; - -// **************************************************************************** -// Authentication -// **************************************************************************** - -/** - * Extracts the raw access token from a HTTP authorization header. - * @param {string} authorizationHeader the authorization header - * @returns {string|undefined} the access token or undefined - */ -function extractAccessTokenFromHeader(authorizationHeader: string) { - return authorizationHeader?.split(' ')[1]; -} - -/** - * Extracts the raw access token from a HTTP request. - * @param {Request} req the express request - * @returns {string|undefined} the access token or undefined - */ -function extractAccessTokenFromRequest(req: Request) { - const authorizationHeader = req.headers.authorization ?? ''; - return extractAccessTokenFromHeader(authorizationHeader); -} - -/** - * Express middleware function to validate access tokens sent to the API. - * @param {Request} req the express request - * @param {Response} res the express response - * @param {NextFunction} next the express next function - * @returns {void} - */ -export async function isAuthenticated( - req: Request, - res: Response, - next: NextFunction -) { - const accessToken = extractAccessTokenFromRequest(req); - logger.debug(`Authenticating via access token ${accessToken}.`); - if (accessToken) { - const user = await users.findByAccessToken(accessToken); - if (user) { - logger.debug(`Found eligible user ${user.id}`); - if (dateIsFuture(user.credentials.expiry)) { - logger.debug(`Eligible user's access token is valid.`); - return next(); - } - } - } - return next(new AppError('Not authenticated', 401)); -} - -// **************************************************************************** -// Token refresh -// **************************************************************************** - -/** - * Get new auth token. - * - * @param {string} refreshToken - * @returns {Promise} the new credentials for the user - */ -async function getNewAuthToken(refreshToken: string): Promise { - try { - logger.debug(`Exchanging Refresh token ${refreshToken} for Auth Token`); - const grantType = 'refresh_token'; - const clientSecret = process.env.GOOGLE_CLIENT_SECRET; - const clientId = process.env.GOOGLE_CLIENT_ID; - - const payload = { - client_id: clientId, - client_secret: clientSecret, - grant_type: grantType, - refresh_token: refreshToken, - }; - const now = new Date(); - const request = await axios.post(GOOGLE_TOKEN_URL, payload); - - if (request.status == 200) { - const credenitals: Credentials = { - accessToken: request.data.access_token, - expiry: dateAdd(now, { seconds: request.data.expires_in }), - refreshToken: request.data.refresh_token, - }; - - logger.info(`Obtained new access Token ${credenitals.accessToken}`); - logger.info(`Token expires in ${request.data.expires_in}`); - - return credenitals; - } - } catch (err) { - logger.error(err); - return Promise.reject(err); - } - return Promise.reject( - new Error('Could not obtain token, check logs for errors') - ); -} - -/** - * Refresh tokens for user. - * - * For server-internal use only. - * @param {string} userId the user ID - * @returns {Promise} the new credentials for the user - */ -export async function refreshTokensForUser( - userId: string -): Promise { - try { - const user = await users.get(userId); - - if (user) { - if (dateIsFuture(user.credentials.expiry)) { - logger.info(`Access token for user ${userId} is still valid`); - return user.credentials; - } - logger.info( - `Noticed expired access token for user ${userId} , refreshing...` - ); - const refreshToken: string = user.credentials.refreshToken; - const newCredentials = await getNewAuthToken(refreshToken); - Object.assign(user.credentials, newCredentials); - await users.update(userId, user); - return user.credentials; - } - throw new AppError('Unknown user.', 401); - } catch (err) { - logger.error(['google-auth:refreshTokenForUser', err as string]); - throw err; - } -} - -/** - * Reissues a new token for the user, upon presentation of the old token. - * @param {string} userId the user ID - * @param {string} accessToken the user's current access token - * @returns {Promise} the new credentials for the user - */ -export async function refreshAccessToken( - userId: string, - accessToken: string -): Promise { - if (!userId && !accessToken) { - return Promise.reject( - new Error('Both userId and expired access Token are required for renewal') - ); - } - - try { - const user: User = (await users.get(userId)) as User; - if (user?.credentials?.accessToken == accessToken) { - const newCredentials = await refreshTokensForUser(userId); - return newCredentials; - } - throw new Error('Refresh request denied'); - } catch (e) { - logger.error(e); - throw e; - } -} - -// **************************************************************************** -// Passport config -// **************************************************************************** - -/** - * Initializes a new user in the data store. - * @param {Profile} profile the profile from which to create the user. - */ -async function createUser(profile: Profile) { - logger.debug('Initializing new user.'); - const profileData = profile._json; - const userData: ModelSpec = { - profileId: profile.id, - displayName: profile.displayName, - givenName: profile.name?.givenName, - familyName: profile.name?.familyName, - email: profileData.email!, - verified: profileData.email_verified === 'true', - gender: 'unknown', - profilePhoto: profileData.picture, - locale: profileData.locale, - credentials: { - accessToken: '', - expiry: new Date(), - refreshToken: '', - }, - settings: {}, - }; - logger.debug(`User data from profile: ${JSON.stringify(userData, null, 2)}`); - const user = await users.insert(userData); - logger.debug(`Stored user data with id: ${user.id}`); - - if (!user) { - throw new AppError('Could not create user entry', 500); - } - return user; -} - -/** - * Implements passport's verify callback. - * @param {string} accessToken the user's access token - * @param {string} refreshToken the user's refresh token - * @param {Profile} profile the user's profile data - * @param {VerifyCallback} done the callback to notify completion - */ -async function verify( - accessToken: string, - refreshToken: string, - profile: Profile, - done: VerifyCallback -) { - // this is the callback method called after successful authentication - logger.debug(`Profile : ${JSON.stringify(profile, null, 2)}`); - - // Check if the user exists in db - let [user] = await users.findWhere('profileId', profile.id); - logger.debug(user); - if (!user) { - user = await createUser(profile); - } - - user.credentials = Object.assign(user.credentials, { - accessToken: accessToken, - refreshToken: refreshToken, - expiry: dateAdd(Date.now(), { seconds: 3599 }), - }); - - await users.update(user.id!, user); - // Do not transfer refresh token back to client. - return done(null, user, true); -} - -/** - * Creates a Google OAuth2.0 sign-in strategy. - * @returns {Strategy} the Google OAuth strategy. - */ -export function createGoogleStrategy() { - if (typeof process.env.OAUTH_CALLBACK_URL === 'undefined') { - throw new Error( - 'OAUTH_CALLBACK_URL undefined, it must be set as environment variable' - ); - } - logger.warn( - `Set oauth callback URL to ${process.env.OAUTH_CALLBACK_URL}, adjust Authorized URLs in GCP client settings accordingly` - ); - - const strategyOptions: StrategyOptions = { - clientID: process.env.GOOGLE_CLIENT_ID!, - clientSecret: process.env.GOOGLE_CLIENT_SECRET!, - callbackURL: process.env.OAUTH_CALLBACK_URL, - scope: [ - 'email', - 'profile', - 'https://www.googleapis.com/auth/display-video', - 'https://www.googleapis.com/auth/adwords', - ], - }; - return new Strategy(strategyOptions, verify); -} diff --git a/server/collections/firebase-collection.ts b/server/collections/firebase-collection.ts deleted file mode 100644 index 5f2f934..0000000 --- a/server/collections/firebase-collection.ts +++ /dev/null @@ -1,285 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { - DocumentData, - Firestore, - FirestoreDataConverter, - QueryDocumentSnapshot, - SetOptions, - Timestamp, -} from '@google-cloud/firestore'; -import { Model, ModelSpec } from '../common/common'; -import { logger } from '../util/logger'; - -/** - * A firebase data converter that converts dates to timestamps. - */ -class FirebaseDateConverter - implements FirestoreDataConverter> -{ - /** - * Converts a object's date properties to firebase timestamps. - * @param {unknown} value the object to convert - * @param {string} fieldName an optional field path - */ - private deepConvertToFirestore(value: unknown, fieldName = '') { - if (value instanceof Object) { - Object.entries(value as object).forEach(([field, fieldValue]) => { - if (fieldValue instanceof Date) { - logger.debug(`Converting date to timestamp: ${fieldName}.${field}`); - value[field] = Timestamp.fromDate(fieldValue); - } else { - this.deepConvertToFirestore(fieldValue, field); - } - }); - } - } - /** - * Converts a object's date properties to firebase timestamps. - * @param {unknown} value the object to convert - * @param {string} fieldName an optional field path - */ - private deepConvertFromFirestore(value: unknown, fieldName: string = '') { - if (value instanceof Object) { - Object.entries(value as object).forEach(([field, fieldValue]) => { - if (fieldValue instanceof Timestamp) { - logger.debug(`Converting timestamp to date: ${fieldName}.${field}`); - value[field] = fieldValue.toDate(); - } else { - this.deepConvertFromFirestore(fieldValue); - } - }); - } - } - - /** - * @inheritdoc - */ - toFirestore(modelObject: ModelSpec): DocumentData; - /** - * @inheritdoc - */ - toFirestore( - modelObject: Partial>, - options: SetOptions - ): DocumentData; - /** - * @inheritdoc - */ - toFirestore( - modelObject: ModelSpec, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - options?: unknown - ): DocumentData { - this.deepConvertToFirestore(modelObject); - return modelObject; - } - - /** - * @inheritdoc - */ - fromFirestore(snapshot: QueryDocumentSnapshot): ModelSpec { - const data = snapshot.data(); - this.deepConvertFromFirestore(data); - return data as ModelSpec; - } -} - -/** - * A collection implementation for Firebase - */ -export class FirebaseCollection { - private dateConverter = new FirebaseDateConverter(); - - /** - * Constructor - * @param {string} name the name of this collection - * @param {Firestore} firestore the underlying Firestore - */ - constructor(readonly name: string, readonly firestore: Firestore) {} - - /** - * Retrieves a single model from Firestore. - * @param {string} id the model ID - * @returns {Promise} the model or undefined if no model with - * the given ID exists - */ - async get(id: string): Promise { - logger.debug(['FirebaseCollection:get', id]); - if (!id) { - throw new Error('Document id cannot be empty'); - } - - try { - const docRef = this.firestore - .collection(this.name) - .withConverter(this.dateConverter) - .doc(id); - - const doc = await docRef.get(); - - if (!doc.exists) { - logger.info(`Document with id : ${id} not found`); - return undefined; - } - return { id: doc.id, ...doc.data() } as T; - } catch (err) { - logger.error(err); - return Promise.reject(err); - } - } - /** - * Retrieves all model from Firestore - * @returns {Promise} the list of existing models - */ - async list(): Promise { - const data: T[] = []; - - try { - const collection = await this.firestore - .collection(this.name) - .withConverter(this.dateConverter) - .get(); - - collection.forEach((entry) => { - data.push({ id: entry.id, ...entry.data() } as T); - }); - logger.debug('Repository:list'); - logger.debug(data); - return data; - } catch (err) { - logger.error(err); - return Promise.reject(err); - } - } - - /** - * Inserts a model. - * @param {ModelSpec} modelSpec the model data to insert - * @returns {Promise} the inserted model - */ - async insert(modelSpec: ModelSpec): Promise { - logger.debug('Saving data to firestore'); - logger.debug(modelSpec); - try { - const collectionRef = this.firestore.collection(this.name); - const result = await collectionRef.add(modelSpec); - logger.debug('Saved entity with id :' + result.id); - return (await this.get(result.id))!; - } catch (err) { - logger.error(err); - throw err; - } - } - - /** - * Replaces a model's data. - * @param {string} id the model ID - * @param {ModelSpec} modelSpec the model data to replace - * @returns {Promise} the updated model - */ - async update(id: string, modelSpec: ModelSpec): Promise { - // Refer to https://cloud.google.com/firestore/docs/manage-data/add-data - // on updating nested objects and difference between set & update functions. - // set replaces existing document with the new copy. - try { - const docRef = this.firestore.collection(this.name).doc(id); - await docRef.set(modelSpec); - return (await this.get(id))!; - } catch (err) { - logger.error(err); - throw err; - } - } - - /** - * Deletes a model. - * @param {string} id the model ID. - * @returns {Promise} completes after model deletion - */ - async delete(id: string): Promise { - try { - const docRef = this.firestore.collection(this.name).doc(id); - await docRef.delete(); - } catch (err) { - logger.error(err); - throw err; - } - } - - /** - * Retrieves all models for which the value at the specified field path - * matches the provided value. - * @param {string} fieldSpec the field path - * @param {unknown} value the value to match - * @returns {Promise} the models which match the value at the field path - */ - async findWhere(fieldSpec: string, value: unknown): Promise { - logger.debug('Repository:getBy'); - const models: Array = []; - try { - const colRef = this.firestore - .collection(this.name) - .withConverter(this.dateConverter); - const snapshot = await colRef.where(fieldSpec, '==', value).get(); - - if (snapshot.empty) { - logger.debug( - `Collection ${this.name} contains no document with field ${fieldSpec} : ${value}` - ); - } - - snapshot.forEach((doc) => { - models.push({ id: doc.id, ...doc.data() } as T); - }); - } catch (err) { - logger.error(err); - throw err; - } - - return Promise.resolve(models); - } - - /** - * Retrieves all models for which the array at the specified field path - * contains the provided value. - * @param {string} fieldSpec the field path - * @param {unknown} value the value to match - * @returns {Promise} the models which contain the value at the field - * path - */ - async findWhereArrayContains( - fieldSpec: string, - value: unknown - ): Promise { - const data: T[] = []; - logger.debug('repository:arrayContainsAny'); - const snapshot = await this.firestore - .collection(this.name) - .where(fieldSpec, 'array-contains', value) - .withConverter(this.dateConverter) - .get(); - - if (snapshot.empty) { - logger.debug( - `No matching documents found ${fieldSpec}[] containing ${value}` - ); - } - - snapshot.forEach((doc) => { - data.push({ id: doc.id, ...doc.data() } as T); - }); - return data; - } -} diff --git a/server/collections/users-collection.ts b/server/collections/users-collection.ts deleted file mode 100644 index 08f4208..0000000 --- a/server/collections/users-collection.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { User } from 'common/user'; -import { FirebaseCollection } from './firebase-collection'; - -/** - * A firebase collection implementation with additional functionality for users. - */ -export class UsersCollection extends FirebaseCollection { - /** - * - * @param {string} accessToken - * @returns {Promise} the user or undefined if no user with - * access token can be found. - */ - async findByAccessToken(accessToken: string): Promise { - const [user] = await this.findWhere('credentials.accessToken', accessToken); - return user; - } -} diff --git a/server/common/common.ts b/server/common/common.ts deleted file mode 100644 index 8219cd7..0000000 --- a/server/common/common.ts +++ /dev/null @@ -1,53 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -/** - * Base interface of all IFTTA DB models. - */ -export interface Model { - id: string; -} - -/** - * A model's data (excluding the ID). - */ -export type ModelSpec = Omit; - -export interface OperationResult { - status: 'success' | 'failed'; - error?: string; -} - -export type AgentParameters = Record; - -export interface Agent { - /** The unique ID of this agent. */ - readonly id: string; - - /** - * Provides descriptive metadata about this agent, including its name, id and - * additional capabilities. - */ - describe(): Promise; -} - -export interface AgentSettingMetadata { - key: string; - name: string; -} -export interface AgentMetadata { - id: string; - name: string; - type: 'source' | 'target'; - settings?: AgentSettingMetadata[]; -} diff --git a/server/common/rule.ts b/server/common/rule.ts deleted file mode 100644 index fcc0769..0000000 --- a/server/common/rule.ts +++ /dev/null @@ -1,94 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { AgentParameters, Model, OperationResult } from './common'; -import { TargetAgentAction } from './target'; - -export type Comparator = 'eq' | 'gt' | 'lt'; - -/** - * A rule's condition definition - */ -export interface Condition { - /** The source data point to compare. */ - dataPoint: string; - /** The condition's comparator. */ - comparator: Comparator; - /** The value to compare against. */ - compareValue: string | number | boolean; -} - -/** - * A rule's source definition. - */ -export interface RuleSourceAction { - /** The source agent ID. */ - agentId: string; - /** The source agent parameters. */ - parameters: AgentParameters; -} - -/** - * A rule's target definition. - */ -export interface RuleTargetAction { - /** The target agent ID. */ - agentId: string; - /** The target agent parameters. */ - parameters: AgentParameters; - /** The action to execute if the condition evaluates to true. */ - action: TargetAgentAction; -} - -export interface RuleStatus { - /** A flag indicating that the rule evaluation succeeded. */ - success: boolean; - /** The rule's last evaluation date. */ - lastExecution: Date; - /** The reason the rule evaluation did not succeed. */ - error?: string; -} - -/** - * The rule definition. - */ -export interface Rule extends Model { - /** The rule's human-readable name */ - name: string; - /** The user ID of the rule owner. */ - ownerId: string; - /** The execution interval in minutes. */ - executionInterval: number; - /** The rule's source definition. */ - source: RuleSourceAction; - /** The rule's condition definition. */ - condition: Condition; - /** The rule's target defintion. */ - targets: RuleTargetAction[]; - - /** The status of the rule's last evaluation. */ - latestStatus?: RuleStatus; -} - -/** - * The result of evaluating a rule. - * - * During evaluation source agent data is translated to the resulting - * actions for the target agent. - */ -export interface RuleEvaluationResult extends OperationResult { - /** The rule which was evaluated */ - rule: Rule; - /** The resulting target actions after evaluation. */ - targetActions?: RuleTargetAction[]; -} diff --git a/server/common/source.ts b/server/common/source.ts deleted file mode 100644 index 91bd521..0000000 --- a/server/common/source.ts +++ /dev/null @@ -1,151 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { - Agent, - AgentMetadata, - AgentParameters, - OperationResult, -} from './common'; - -/** - * A description of a parameter a source agent requires to make calls - * to the ultimate API. - */ -export interface SourceAgentParameterMetadata { - /** The parameter's human readable name. */ - name: string; - /** The parameter's unique key. */ - key: string; - /** The type of the parameter. */ - type: string; - /** Optional enumeration values. */ - values?: string[]; -} - -/** - * A description of a data point provided by a source agent. - * - * Source agent can provide data point values as strings, numbers or booleans. - * - * Numeric data points should also specify the unit of measurement if applicable. - * E.g. temperature data points should specify whether they are in °C, °F or K. - * - * Enumeration values may be specified via the values property. - * E.g. index data points should specify possible values like 'low', 'medium', - * 'high', etc. - */ -export interface SourceAgentDataPointMetadata { - /** The data point's unique key. */ - key: string; - /** The data point's human readable name. */ - name: string; - /** The type of the data point. */ - type: 'string' | 'number' | 'boolean' | 'enum'; - /** Optional enumeration values. */ - values?: string[]; -} - -/** - * A description of an agent and it's capabilities. - */ -export interface SourceAgentMetadata extends AgentMetadata { - /** - * Parameters which a source agent requires to fetch data. - */ - readonly parameters: SourceAgentParameterMetadata[]; - /** - * Data points which a source agent provides. - */ - readonly dataPoints: SourceAgentDataPointMetadata[]; -} - -/** - * A query task for the source agent to execute. - */ -export interface SourceAgentTask { - /** - * Parameters for this task. - */ - parameters: AgentParameters; - - /** - * The ID of the user who owns this task. - */ - ownerId: string; - - /** - * The task owners settings object. - */ - ownerSettings: Record; - /** - * The data points for which this task requires data. - */ - dataPoints: string[]; -} - -/** - * The source agent's response data object. When executing tasks, the - * source agent must respons with an object that contains values for each - * queried data point. - * - * If a task's data points contain ["a", "b", "c"] the source agent must provide - * a response object in the form of { "a": , "b": , "c": }, - * where values must be of the type specified by the data point description. - */ -export interface SourceAgentData { - [dataPoint: string]: number | boolean | string; -} - -/** - * The result of a data fetching job. The data object must contain values for - * each queried data point. The data can be undefined in error cases (i.e. if - * the result's status is 'failed' rather than 'success'.) - */ -export interface SourceAgentTaskResult extends OperationResult { - /** The agent's response data. */ - data?: SourceAgentData; -} - -/** - * The source agent is responsible for fetching data from a source. - * - * Source agents access an external API to request input signals and translate - * those signals into data for the rule engine. The process of fetching data - * is asynchronous and source agent implementations will be invoked via tasks. - * - * A source agent task encapsulates the query for a set of data points. Source - * agents must provide data for all queried data points. Tasks will also - * receive a set of parameters for the query and the task owner's settings. - * Source agents should inspect parameters and owner settings to draw required - * values for the ultimate API query. - * - * In addition to the process of executing tasks, source agents must also - * implement the method "describe", which provides metadata for the agent, - * including the agent's name and ID, which data points this source agent - * provides, etc. Please refer to the SourceAgentDescription interface for - * information on descriptive metadat. - */ -export interface SourceAgent extends Agent { - /** - * Executes a query task. - * @param task the task to be executed - */ - executeTask(task: SourceAgentTask): Promise; - - /** - * Provides descriptive metadata about this agent, including its name, id and - * available source data points . - */ - describe(): Promise; -} diff --git a/server/common/target.ts b/server/common/target.ts deleted file mode 100644 index 3020a16..0000000 --- a/server/common/target.ts +++ /dev/null @@ -1,79 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { - Agent, - AgentMetadata, - AgentParameters, - OperationResult, -} from './common'; -import { User } from './user'; - -export interface TargetEntity { - type: string; - name: string; - parameters: Record; -} - -export interface TargetEntityMetadata { - key: string; - name: string; - parameters?: string[]; -} - -export interface TargetAgent extends Agent { - /** - * Executes a set of tasks that result from rule evaluations - * @param {TargetAgentTask[]} tasks the tasks to execute - */ - executeTasks(tasks: TargetAgentTask[]): Promise; - - /** - * @inheritdoc - */ - describe(): Promise; - - /** - * List a set of target entities this agent can interact with. - * @param {string} type the entity type - * @param {AgentParameters} parameters the call parameters - * @param {User} requestor the requesting user - * @param {Record} requestorSettings the requestor's user - * settings. - * @returns {Promise} the agent's response - */ - listTargetEntities( - type: string, - parameters: AgentParameters, - requestor: User, - requestorSettings: Record - ): Promise; -} - -export interface TargetAgentMetadata extends AgentMetadata { - targetEntities: TargetEntityMetadata[]; -} - -export type TargetAgentAction = 'ACTIVATE' | 'DEACTIVATE'; - -export interface TargetAgentTask { - agentId: string; - action: TargetAgentAction; - parameters: AgentParameters; - owner: User; - ownerSettings: Record; -} - -export interface TargetEntityResponse extends OperationResult { - entities?: TargetEntity[]; -} diff --git a/server/common/user.ts b/server/common/user.ts deleted file mode 100644 index 9902c5a..0000000 --- a/server/common/user.ts +++ /dev/null @@ -1,34 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { Model } from './common'; - -export interface Credentials { - accessToken: string; - expiry: Date; - refreshToken: string; -} - -export interface User extends Model { - profileId: string; - displayName?: string; - givenName?: string; - familyName?: string; - gender?: string; - email: string; - verified?: boolean; - profilePhoto?: string; - locale?: string; - credentials: Credentials; - settings: Record; -} diff --git a/server/controllers/account-controller.ts b/server/controllers/account-controller.ts deleted file mode 100644 index c1d0d2d..0000000 --- a/server/controllers/account-controller.ts +++ /dev/null @@ -1,90 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ -import { ModelSpec } from 'common/common'; -import { Request, Response } from 'express'; -import { User } from '../common/user'; -import { collectionService } from '../services/collections-service'; -import { logger } from '../util/logger'; - -const users = collectionService.users; - -// TODO: add exception handling -// input data validation -export const listAccounts = async (req: Request, res: Response) => { - try { - const userData = await users.list(); - return res.json(userData); - } catch (e) { - logger.debug(e); - return res.status(500).send('Failed to fetch account list'); - } -}; - -export const create = async (req: Request, res: Response) => { - // TODO: implement data validation. - const user: ModelSpec = { ...req.body }; - const result = await users.insert(user); - return res.json(result); -}; - -export const get = async (req: Request, res: Response) => { - const userData = await users.get(req.params.id); - return res.json(userData); -}; - -/** - * Updates user object. - * @param {Request} req :id - * @param {Response} res Updated user object - */ -export const update = async (req: Request, res: Response) => { - try { - const userId = req.params.id; - const user: ModelSpec = { ...req.body }; - await users.update(userId, user); - return res.sendStatus(200); - } catch (e) { - logger.error(e); - return res.sendStatus(500); - } -}; - -export const updateSettings = async (req: Request, res: Response) => { - try { - const user = (await users.get(req.params.userId)) as User; - user.settings = req.body; - await users.update(req.params.userId, user); - } catch (e) { - logger.error(e); - return res - .status(500) - .json({ error: 'Error occurred while updating user settings' }); - } - return res.status(200).json({ status: 'ok' }); -}; - -export const remove = async (req: Request, res: Response) => { - const id = req.params.id; - logger.debug(`Deleting document ${id}`); - await users.delete(id); - return res.json({ status: 'done' }); -}; - -export const getBy = async (req: Request, res: Response) => { - const fieldName = req.query.fieldName! as string; - const fieldValue: string = req.query.fieldValue! as string; - - const data = await users.findWhere(fieldName, fieldValue); - - return res.json(data); -}; diff --git a/server/controllers/agents-controller.ts b/server/controllers/agents-controller.ts deleted file mode 100644 index db1aca0..0000000 --- a/server/controllers/agents-controller.ts +++ /dev/null @@ -1,72 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -require('module-alias/register'); - -import { Request, Response } from 'express'; -import { agentsService } from '../services/agents-service'; -import { collectionService } from '../services/collections-service'; -import { logger } from '../util/logger'; - -export const getAgentsMetadata = async (req: Request, res: Response) => { - const agentMetadata = await agentsService.describeAll(); - return res.json(agentMetadata); -}; - -export const getAgentEntityList = async (req: Request, res: Response) => { - const agentId = req.params.agent; - if (!agentId) { - return res.status(400).send('Invalid agent parameter.'); - } - - const entityType = req.params.entityType; - if (!entityType) { - return res.status(400).send('Invalid entityType parameter.'); - } - - const accessToken = req.headers.authorization?.split(' ')[1]; - if (!accessToken) { - logger.error('Invalid request credentials.'); - return res.status(401).send(); - } - - const [requestor] = await collectionService.users.findWhere( - 'credentials.accessToken', - accessToken - ); - if (!requestor) { - logger.error('Invalid request credentials.'); - return res.status(401).send(); - } - - const agent = agentsService.getTargetAgent(agentId); - if (!agent) { - logger.error(`Unknown target agent: ${agentId}`); - return res.status(404).send(); - } - - const params = Object.fromEntries( - Object.entries(req.query).filter((entry) => typeof entry[1] === 'string') - ) as Record; - const response = await agent.listTargetEntities( - entityType, - params, - requestor, - requestor.settings - ); - if (response.status === 'failed') { - logger.error(response.error); - return res.status(400).send(response.error); - } - return res.json(response); -}; diff --git a/server/controllers/auth-controller.ts b/server/controllers/auth-controller.ts deleted file mode 100644 index 9af2c8e..0000000 --- a/server/controllers/auth-controller.ts +++ /dev/null @@ -1,128 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { NextFunction, Request, Response } from 'express'; -import passport from 'passport'; -import { logger } from '../util/logger'; - -// TODO(jhoesel): move token refresh out of job runner. -import { refreshAccessToken } from '../auth/google-auth'; - -/** - * Encodes the login request parameters into a pass-through state variable for - * the OAuth flow. - * @param {Request} req the express request - * @returns {string} the base-64 encoded state value - */ -function encodeLoginStateFromRequest(req: Request) { - return Buffer.from( - JSON.stringify({ - returnTo: req.query.returnTo, - clientUrl: req.query.clientUrl, - }) - ).toString('base64'); -} - -/** - * - * @param {Request} req the express request - * @returns {{returnTo: string, clientUrl: string}} the decoded login state - */ -function decodeLoginStateFromRequest(req: Request) { - const parsed = JSON.parse( - Buffer.from(req.query.state!.toString(), 'base64').toString() - ); - return { - returnTo: parsed['returnTo'] as string, - clientUrl: parsed['clientUrl'] as string, - }; -} - -/** - * Attempts an access token refresh. - * @param {Request} req the express request - * @param {Response} res the express response - * @param {NextFunction} next the express next function - */ -export async function refreshToken( - req: Request, - res: Response, - next: NextFunction -) { - try { - const { userId, token } = req.body; - const newToken = await refreshAccessToken(userId, token); - res.json(newToken); - } catch (err) { - next(err); - } -} - -/** - * Performs a logout. - * @param {Request} req the express request - * @param {Response} res the express response - */ -export function logout(req: Request, res: Response) { - req.logout(() => { - req.session.destroy(() => { - res.clearCookie('connect.sid'); - res.redirect('/'); - }); - }); -} - -/** - * Handles the login callback from Google's OAuth flow. - * @param {Request} req the express request - * @param {Response} res the express response - * @param {NextFunction} next the express next function - */ -export function googleLoginCallback( - req: Request, - res: Response, - next: NextFunction -) { - logger.debug('Google login called back.'); - passport.authenticate('google', { - failureRedirect: '/api/auth/login', - })(req, res, next); -} - -/** - * Handles the final leg of the OAuth flow and redirects the user's agent to - * the final 'logged-in' page. - * @param {Request} req the express request - * @param {Response} res the express response - */ -export function googleLoginDone(req: Request, res: Response) { - logger.debug('Google login process done, redirecting client.'); - const { returnTo, clientUrl } = decodeLoginStateFromRequest(req); - const userValue = encodeURIComponent(JSON.stringify(req.user) || ''); - res.redirect(`${clientUrl}/login?returnTo=${returnTo}&user=${userValue}`); -} - -/** - * Starts the Google OAuth login flow. - * @param {Request} req the express request - * @param {Response} res the express response - * @param {NextFunction} next the express next function - */ -export function login(req: Request, res: Response, next: NextFunction) { - logger.debug('Executing Google login.'); - passport.authenticate('google', { - accessType: 'offline', - prompt: 'consent', - state: encodeLoginStateFromRequest(req), - })(req, res, next); -} diff --git a/server/controllers/rules-controller.ts b/server/controllers/rules-controller.ts deleted file mode 100644 index 836685d..0000000 --- a/server/controllers/rules-controller.ts +++ /dev/null @@ -1,156 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { Request, Response } from 'express'; -import { ModelSpec } from '../common/common'; -import { Comparator, Rule } from '../common/rule'; -import { collectionService } from '../services/collections-service'; -import { rulesService } from '../services/rules-service'; -import { logger } from '../util/logger'; - -/** - * Endpoint to create a rule. - * - * @param {Request} req - * @param {Response} res - */ -export const create = async (req: Request, res: Response) => { - console.log('create rule', req.body); - // TODO: add express-validator - - // Parse incoming rule data. - const ruleSpec: ModelSpec = { - name: req.body.name, - ownerId: req.body.ownerId, - source: { - agentId: req.body.source.agentId, - parameters: req.body.source.parameters, - }, - condition: { - dataPoint: req.body.condition.dataPoint, - comparator: req.body.condition.comparator as Comparator, - compareValue: req.body.condition.compareValue, - }, - targets: req.body.targets.map((target) => ({ - agentId: target.agentId, - parameters: target.parameters, - action: target.action, - })), - executionInterval: req.body.executionInterval, - }; - - try { - logger.debug(ruleSpec); - logger.info('rules-controller:create: Creating rule'); - const rule = await rulesService.insertRule(ruleSpec); - logger.info( - `rules-controller:create: Successfully created rule with id : ${rule.id}` - ); - return res.json(rule); - } catch (err) { - console.log(err); - return res.sendStatus(500); - } -}; - -/** - * List all available rules. - * - * @param {Request} req - * @param {Response} res - */ -export const list = async (req: Request, res: Response) => { - return res.json(await collectionService.rules.list()); -}; - -/** - * Delete a rule and its associated jobs. - * - * @param {Request} req - * @param {Response} res - */ -export const remove = async (req: Request, res: Response) => { - try { - const userId = req.params.userId; - const ruleId = req.params.id; - - const rule = await collectionService.rules.get(ruleId); - if (rule) { - if (rule.ownerId === userId) { - await rulesService.deleteRule(rule.id); - return res.status(200).send(); - } else { - const msg = `FORBIDDEN: Non ower userId: ${userId} attempted to delete Rule ${ruleId}`; - logger.warn(msg); - return res.status(403).send(msg); - } - } else { - return res.status(404).send('Not found'); - } - } catch (e) { - logger.error(e); - return res.sendStatus(500); - } -}; - -/** - * Get a single rule by id. - * - * @param {string} req :id - * @param {Response} res - */ -export const get = async (req: Request, res: Response) => { - try { - const ruleId = req.params.id; - const rule = await collectionService.rules.get(ruleId); - return res.json(rule); - } catch (e) { - logger.error(e); - return res.sendStatus(500); - } -}; - -/** - * Get all rules for a user. - * - * @param {Request} req :id - * @param {Response} res Rules[] - */ -export const getByUser = async (req: Request, res: Response) => { - try { - const userId = req.params.id; - const rules = await collectionService.rules.findWhere('ownerId', userId); - return res.json(rules); - } catch (e) { - logger.error(e); - return res.sendStatus(500).json(e); - } -}; - -/** - * Run all rules. - * - * @param {Request} req - * @param {Response} res - * @returns {Response} - */ -export const runAll = (req: Request, res: Response) => { - try { - rulesService.runAll(); - - return res.json({ status: 'started' }); - } catch (e) { - logger.error(e); - return res.sendStatus(500).json(e); - } -}; diff --git a/server/docs/README.md b/server/docs/README.md deleted file mode 100644 index a6049f4..0000000 --- a/server/docs/README.md +++ /dev/null @@ -1,26 +0,0 @@ - - -# IFTTA Server Documentation - -## Server architecture -![Client-Server architecture](imgs/iftta-client-server-architecture.png) - -## Agents -### Source agents -#### OpenWeatherMap interfaces -![OpenWeatherMap interfaces](imgs/agent-openweather-interface.png) -### Target agents -#### DV360 interfaces -![DV360 interfaces](imgs/agent-dv360-ads-interface.png) - diff --git a/server/docs/imgs/agent-dv360-ads-interface.png b/server/docs/imgs/agent-dv360-ads-interface.png deleted file mode 100644 index dbd072ed2b67c0158d06c434d07d0500105bf84c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 439578 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
      44Gn)G**UrHg}QWDfC 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

      otNKmOIEB=ct#5* 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

      U>tl-id?pwjQmN>^^|%k!yb*j4f%{0MPJvh(3U# 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 F{1;B`znB03 diff --git a/server/docs/imgs/agent-openweather-interface.png b/server/docs/imgs/agent-openweather-interface.png deleted file mode 100644 index a22119a21043ac840c190c9d26ae093575bd07ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192073 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�_zJH`z*hi}LV<~3@Yl;Mj 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

      WIVfRiO?Tls?;SWvtt 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 diff --git a/server/docs/imgs/iftta-client-server-architecture.png b/server/docs/imgs/iftta-client-server-architecture.png deleted file mode 100644 index c61be9d5d702e304ffe53f0ec2fbda1ce79fb37f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 197520 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[N9}gx?y@J0J8RpR=FF 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%0D_9f^=EVQL&P7P9K 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 { - logger.info(`Server listening on port ${port}`); - logger.info('ctrl + C to kill it'); -}); - -export default server; diff --git a/server/jest.config.js b/server/jest.config.js deleted file mode 100644 index aecf64b..0000000 --- a/server/jest.config.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ -module.exports = { - preset: 'ts-jest', - testEnvironment: 'node', - modulePathIgnorePatterns: ['/dist'], - moduleNameMapper: { - '@iftta/util': '/util', - }, -}; diff --git a/server/package.json b/server/package.json deleted file mode 100644 index 98cbdc6..0000000 --- a/server/package.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "description": "If This Then Ad", - "version": "1.0.0", - "private": true, - "main": "index.js", - "scripts": { - "start": "node dist/index.js", - "compile": "npx tsc", - "reset": "rm -Rf dist && rm -Rf node_modules", - "build": "npm install && npx tsc", - "post-build": "cd dist/ && npm install", - "fix-paths": "cd dist/ && sed -i 's+./dist+.+g' package.json", - "lint": "npx tsc --noEmit && eslint \"**/*.{js,ts}\" --fix", - "copy-static": "cp -R public dist/ && cp *.json dist/", - "build-local": "npm install --production=false && npm run build && npm run copy-static && npm run post-build", - "build-dist": "npm i && npm run compile && npm run copy-static && npm run post-build", - "w-typescript": "npx tsc -w", - "debug": "nodemon --exec node --inspect=0.0.0.0:9229 --require ts-node/register index.ts", - "w-node": "nodemon dist/index.js", - "dev": "concurrently -k -p \"[{name}]\" -n \"TypeScript,Node\" -c \"yellow.bold,green.bold\" \"npm run w-typescript\" \"npm run w-node\"", - "test": "jest --silent=false server/", - "format": "npx prettier --config .prettierrc --write .", - "pre-commit": "npm install && npm run format && npm run build && npm test" - }, - "engines": { - "node": ">= 12.0.0" - }, - "author": "Google LLC", - "license": "Apache-2.0", - "dependencies": { - "@google-cloud/connect-firestore": "^2.0.2", - "@google-cloud/debug-agent": "^5.2.8", - "@google-cloud/firestore": "^4.15.1", - "@google-cloud/logging-winston": "^4.1.1", - "@google-cloud/pubsub": "^2.18.4", - "axios": "^0.25.0", - "body-parser": "^1.19.1", - "cors": "^2.8.5", - "dotenv": "^10.0.0", - "express": "^4.17.1", - "express-session": "^1.17.2", - "googleapis": "^91.0.0", - "module-alias": "^2.2.2", - "oauth": "^0.10.0", - "passport": "^0.5.2", - "passport-google-oauth20": "^2.0.0", - "typescript": "^4.5.4", - "winston": "^3.3.3" - }, - "devDependencies": { - "@types/cors": "^2.8.12", - "@types/errorhandler": "^1.5.0", - "@types/express": "^4.17.13", - "@types/express-session": "^1.17.4", - "@types/jest": "^27.4.0", - "@types/node": "^16.11.10", - "@types/passport": "^1.0.7", - "@types/passport-google-oauth20": "^2.0.11", - "@typescript-eslint/eslint-plugin": "^5.4.0", - "@typescript-eslint/parser": "^5.4.0", - "axios-mock-adapter": "^1.21.2", - "concurrently": "^6.4.0", - "eslint": "^8.16.0", - "eslint-config-google": "^0.14.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-prettier": "^4.0.0", - "jest": "^27.5.1", - "nodemon": "^2.0.15", - "prettier": "^2.5.0", - "ts-jest": "^27.1.3", - "ts-node": "^10.4.0", - "typescript": "^4.5.4" - }, - "overrides": { - "oauth": "$oauth" - }, - "_moduleAliases": { - "@iftta/job-runner": "./job-runner", - "@iftta/rules-engine": "./packages/rule-engine", - "@iftta/open-weather-map-agent": "./agents/source-agents/open-weather-map", - "@iftta/ambee-agent": "./agents/source-agents/ambee", - "@iftta/dv360-ads": "./agents/target-agents/dv360-ads", - "@iftta/google-ads": "./agents/target-agents/google-ads", - "@iftta/util": "./util" - } -} \ No newline at end of file diff --git a/server/public/.gitkeep b/server/public/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/server/routes/index.ts b/server/routes/index.ts deleted file mode 100644 index ce0a226..0000000 --- a/server/routes/index.ts +++ /dev/null @@ -1,103 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import express, { Router } from 'express'; -import * as AuthController from '../controllers/auth-controller'; -import * as AccountController from '../controllers/account-controller'; -import * as AgentsController from '../controllers/agents-controller'; -import * as RulesController from '../controllers/rules-controller'; -import path from 'path'; -import passport from 'passport'; -import { isAuthenticated } from '../auth/google-auth'; - -// eslint-disable-next-line new-cap -const router = Router(); - -// ************************** -// * Authorization routes -// ************************** -// App authorization routes -router.get('/api/auth/login', AuthController.login); -router.get('/api/auth/logout', AuthController.logout); -router.post('/api/auth/logout', AuthController.logout); -router.get( - '/api/auth/oauthcallback', - passport.authenticate('google', { failureRedirect: '/api/auth/login' }), - AuthController.googleLoginDone -); -router.post('/api/auth/refresh', AuthController.refreshToken); - -// ************************** -// * API routes -// ************************** - -// Account routes -router.get('/api/accounts', isAuthenticated, AccountController.listAccounts); -router.get('/api/accounts/:id', isAuthenticated, AccountController.get); -router.post('/api/accounts', isAuthenticated, AccountController.create); -router.post('/api/accounts/:id', isAuthenticated, AccountController.update); -router.delete('/api/accounts/:id', isAuthenticated, AccountController.remove); -// User settings endpoint (save/update) -router.post( - '/api/accounts/:userId/settings', - isAuthenticated, - AccountController.updateSettings -); - -// Rules endpoints -router.post('/api/rules', isAuthenticated, RulesController.create); -router.get('/api/rules/run', RulesController.runAll); -router.get('/api/rules', isAuthenticated, RulesController.list); -router.get('/api/rules/:id', isAuthenticated, RulesController.get); -router.get('/api/rules/user/:id', isAuthenticated, RulesController.getByUser); -router.delete( - '/api/rules/:userId/:id', - isAuthenticated, - RulesController.remove -); - -router.get( - '/api/agents/metadata', - isAuthenticated, - AgentsController.getAgentsMetadata -); - -router.get( - '/api/agents/:agent/list/:entityType', - isAuthenticated, - AgentsController.getAgentEntityList -); - -/** - * Depending on the env determine the location of static files. - * - * @returns {string} filePath - */ -const getStaticFilePath = (): string => { - let filePath = ''; - - if (process.env.NODE_ENV == 'development') { - filePath = path.join(__dirname, '../../../client/dist/client'); - } else { - filePath = path.join(__dirname, '../', 'public'); - } - - return filePath; -}; - -// Serve static Angular build environment dependent. -if (process.env.NODE_ENV !== 'development') { - router.use('*', express.static(getStaticFilePath())); -} - -export default router; diff --git a/server/services/agents-service.ts b/server/services/agents-service.ts deleted file mode 100644 index f435dbf..0000000 --- a/server/services/agents-service.ts +++ /dev/null @@ -1,84 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { AmbeeAgent } from '../agents/source-agents/ambee/ambee-agent'; -import { OpenWeatherAgent } from '../agents/source-agents/open-weather/open-weather-agent'; -import { Dv360Agent } from '../agents/target-agents/dv360-ads/dv360-agent'; -import { GoogleAdsAgent } from '../agents/target-agents/google-ads/google-ads-agent'; -import { SourceAgent, SourceAgentMetadata } from '../common/source'; -import { TargetAgent, TargetAgentMetadata } from '../common/target'; - -export interface AgentsMetadata { - /** A list of source agent descriptions */ - source: SourceAgentMetadata[]; - /** A list of target agent descriptions */ - target: TargetAgentMetadata[]; -} - -/** - * Provides agent utilities. - */ -export class AgentService { - private readonly sourceAgents: Array; - private readonly targetAgents: Array; - - /** - * Constructor. - */ - constructor() { - this.sourceAgents = [new AmbeeAgent(), new OpenWeatherAgent()]; - - this.targetAgents = [new Dv360Agent(), new GoogleAdsAgent()]; - } - - /** - * Provides a description of all available agents. - * @returns {Promise} - */ - async describeAll(): Promise { - const sources = await Promise.all( - this.sourceAgents.map((agent) => agent.describe()) - ); - const targets = await Promise.all( - this.targetAgents.map((agent) => agent.describe()) - ); - - return { - source: sources, - target: targets, - }; - } - - /** - * Looks up a source agent with the specified ID. - * @param {string} id the ID of the agent - * @returns {SourceAgent|undefined} the source agent or undefined if no agent - * with the specified ID exists. - */ - getSourceAgent(id: string): SourceAgent | undefined { - return this.sourceAgents.find((agent) => agent.id === id); - } - - /** - * Looks up a target agent with the specified ID. - * @param {string} id the ID of the agent - * @returns {TargetAgent|undefined} the target agent or undefined if no agent - * with the specified ID exists. - */ - getTargetAgent(id: string): TargetAgent | undefined { - return this.targetAgents.find((agent) => agent.id === id); - } -} - -/** The default singleton instance of the agent service. */ -export const agentsService = new AgentService(); diff --git a/server/services/collections-service.ts b/server/services/collections-service.ts deleted file mode 100644 index 99b0d4c..0000000 --- a/server/services/collections-service.ts +++ /dev/null @@ -1,61 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { Firestore } from '@google-cloud/firestore'; -import { FirebaseCollection } from '../collections/firebase-collection'; -import { UsersCollection } from '../collections/users-collection'; -import { Rule } from '../common/rule'; - -/** - * Provides access to model collections. - */ -export class CollectionService { - readonly users = new UsersCollection(this.prefix + 'users', this.fireStore); - readonly rules = new FirebaseCollection( - this.prefix + 'rules', - this.fireStore - ); - - /** - * Creates a collection service based on the environment variable configuration. - * @returns {CollectionService} configured collection service. - */ - static fromEnv() { - const projectId = process.env.PROJECT_ID; - if (!projectId) { - throw new Error('Undefined env variable PROJECT_ID'); - } - - const envPrefix = process.env.DEMO_ENV_NAME; - const prefix = envPrefix ? envPrefix.replace('/', '-') + ':' : ''; - - const fireStore = new Firestore({ projectId }); - fireStore.settings({ ignoreUndefinedProperties: true }); - return new CollectionService(fireStore, prefix); - } - - /** - * Constructor. - * @param {Firestore} fireStore the underlying Firestore database connection - * @param {string} prefix a prefix for Firebase collections - */ - constructor( - private readonly fireStore: Firestore, - private readonly prefix = '' - ) {} -} - -/** - * The default singleton collections service. - */ -export const collectionService = CollectionService.fromEnv(); diff --git a/server/services/conditions-service.test.ts b/server/services/conditions-service.test.ts deleted file mode 100644 index 0aaadac..0000000 --- a/server/services/conditions-service.test.ts +++ /dev/null @@ -1,71 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import 'jest'; -import { ConditionsService } from './conditions-service'; - -describe('ConditionsService', () => { - let conditionsService: ConditionsService; - beforeEach(() => { - conditionsService = new ConditionsService(); - }); - - describe('#evaluate', () => { - it('evaluates {number eq number} ', () => { - expect(conditionsService.evaluate(123, 'eq', 123)).toBe(true); - expect(conditionsService.evaluate(123, 'eq', 124)).toBe(false); - }); - it('evaluates {number gt number}', () => { - expect(conditionsService.evaluate(123, 'gt', 122)).toBe(true); - expect(conditionsService.evaluate(123, 'gt', 123)).toBe(false); - expect(conditionsService.evaluate(123, 'gt', 124)).toBe(false); - }); - it('evaluates {number lt number}', () => { - expect(conditionsService.evaluate(122, 'lt', 123)).toBe(true); - expect(conditionsService.evaluate(123, 'lt', 123)).toBe(false); - expect(conditionsService.evaluate(124, 'lt', 123)).toBe(false); - }); - it('evaluates {boolean eq boolean}', () => { - expect(conditionsService.evaluate(true, 'eq', true)).toBe(true); - expect(conditionsService.evaluate(false, 'eq', false)).toBe(true); - expect(conditionsService.evaluate(true, 'eq', false)).toBe(false); - expect(conditionsService.evaluate(false, 'eq', true)).toBe(false); - }); - it('evaluates {string eq string}', () => { - expect(conditionsService.evaluate('abc', 'eq', 'abc')).toBe(true); - expect(conditionsService.evaluate('abc', 'eq', 'cde')).toBe(false); - }); - - it('does not evaluate for different data types', () => { - expect(conditionsService.evaluate(1, 'eq', true)).toBe(undefined); - expect(conditionsService.evaluate(true, 'eq', 1)).toBe(undefined); - expect(conditionsService.evaluate(1, 'eq', '1')).toBe(undefined); - expect(conditionsService.evaluate('1', 'eq', 1)).toBe(undefined); - expect(conditionsService.evaluate('true', 'eq', true)).toBe(undefined); - expect(conditionsService.evaluate(true, 'eq', 'true')).toBe(undefined); - }); - - it('does not evaluate {string gt string}', () => { - expect(conditionsService.evaluate('123', 'gt', '122')).toBe(undefined); - }); - it('does not evaluate {string lt string}', () => { - expect(conditionsService.evaluate('123', 'lt', '122')).toBe(undefined); - }); - it('does not evaluate {boolean gt boolean}', () => { - expect(conditionsService.evaluate(true, 'gt', false)).toBe(undefined); - }); - it('does not evaluate {boolean lt boolean}', () => { - expect(conditionsService.evaluate(false, 'lt', true)).toBe(undefined); - }); - }); -}); diff --git a/server/services/conditions-service.ts b/server/services/conditions-service.ts deleted file mode 100644 index b25bad6..0000000 --- a/server/services/conditions-service.ts +++ /dev/null @@ -1,62 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { Comparator } from '../common/rule'; -import { logger } from '../util/logger'; - -const COMPARATORS = new Map boolean>([ - ['number_eq', (a, b) => a === b], - ['number_gt', (a, b) => (a as number) > (b as number)], - ['number_lt', (a, b) => (a as number) < (b as number)], - ['string_eq', (a, b) => a === b], - ['boolean_eq', (a, b) => a === b], -]); - -/** - * A service for evaluating rule conditions. - */ -export class ConditionsService { - /** - * Evaluates a comparison between two arbitrary values. - * @param {unknown} value the first comparison operand - * @param {Comparator} comparator the comparator - * @param {unknown} other the second comparison operand - * @returns {boolean|undefined} the result of the comparison or undefined if - * the comparison operation cannot be performed - */ - evaluate(value: unknown, comparator: Comparator, other: unknown) { - const valueType = typeof value; - const otherType = typeof other; - if (valueType !== otherType) { - logger.error( - `Condition: Trying to compare values of different type: ${valueType} <> ${otherType}` - ); - return undefined; - } - - const compare = COMPARATORS.get(`${valueType}_${comparator}`); - if (!compare) { - logger.error( - `Condition: Cannot compare values of type ${valueType} with comparator ${comparator}` - ); - return undefined; - } else { - return compare(value, other); - } - } -} - -/** - * The default singleton conditions service. - */ -export const conditionsService = new ConditionsService(); diff --git a/server/services/google-auth-service.ts b/server/services/google-auth-service.ts deleted file mode 100644 index cedc14a..0000000 --- a/server/services/google-auth-service.ts +++ /dev/null @@ -1,50 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { OAuth2Client } from 'google-auth-library'; -import { User } from '../common/user'; - -/** - * A helper class for Google authorized API calls. - */ -export class GoogleAuthService { - /** - * Returns an application-authorized OAuth2Client. - * @returns {OAuth2Client} the application-authorized client - */ - getClient() { - const clientSecret = process.env.GOOGLE_CLIENT_SECRET; - const clientId = process.env.GOOGLE_CLIENT_ID; - return new OAuth2Client(clientId, clientSecret); - } - - /** - * Returns a user-authorized OAuth2Client. - * @param {User} user the user for which to authorize. - * @returns {OAuth2Client} the user-authorized client - */ - getAuthorizedClientForUser(user: User) { - const client = this.getClient(); - client.setCredentials({ - access_token: user.credentials.accessToken, - expiry_date: user.credentials.expiry.getTime(), - refresh_token: user.credentials.refreshToken, - }); - return client; - } -} - -/** - * The default singleton google auth service. - */ -export const googleAuthService = new GoogleAuthService(); diff --git a/server/services/rules-service.ts b/server/services/rules-service.ts deleted file mode 100644 index 62b20c3..0000000 --- a/server/services/rules-service.ts +++ /dev/null @@ -1,329 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { TargetAgent, TargetAgentTask } from 'common/target'; -import { add as dateAdd, isPast as isDatePast } from 'date-fns'; -import { ModelSpec } from '../common/common'; -import { Rule, RuleEvaluationResult } from '../common/rule'; -import { - SourceAgentData, - SourceAgentTask, - SourceAgentTaskResult, -} from '../common/source'; -import { logger } from '../util/logger'; -import { agentsService } from './agents-service'; -import { collectionService } from './collections-service'; -import { conditionsService } from './conditions-service'; - -/** - * Manages rules. - */ -export class RulesService { - /** - * Something - * - * @returns {FirebaseCollection} - */ - async listRules() { - return await collectionService.rules.list(); - } - - /** - * @param {ModelSpec} ruleSpec the rule specification to insert - * @returns {Promise} the created rule - */ - async insertRule(ruleSpec: ModelSpec): Promise { - // persist rule - const rules = collectionService.rules; - const rule = await rules.insert(ruleSpec); - - return rule; - } - - /** - * Deletes a rule. - * @param {string} ruleId the rule ID - * @returns {Promise} completes on deletion - */ - async deleteRule(ruleId: string): Promise { - const rules = collectionService.rules; - await rules.delete(ruleId); - } - - /** - * Updates a rule. - * @param {string} id the rule ID - * @param {ModelSpec} ruleSpec the rule data. - * @returns {Promise} the updated rule - */ - async updateRule(id: string, ruleSpec: ModelSpec): Promise { - await this.deleteRule(id); - return await this.insertRule(ruleSpec); - } - - /** - * Evaluates a rule's condition against the source agent data. - * @param {Rule} rule the rule to evaluate - * @param {SourceAgentData} data the data against which to evaluate the rule - * @returns {RuleEvaluationResult} the evaluation results - */ - private evaluateRule( - rule: Rule, - data: SourceAgentData - ): RuleEvaluationResult { - const { condition } = rule; - - if (!(condition.dataPoint in data)) { - logger.error( - `Required data point not in source data ${condition.dataPoint}.` - ); - return { - status: 'failed', - rule: rule, - }; - } - const sourceDataPointValue = data[condition.dataPoint]!; - const evaluationResult = conditionsService.evaluate( - sourceDataPointValue, - condition.comparator, - condition.compareValue - ); - - if (evaluationResult === undefined) { - logger.error(`Condition evaluation failed. for rule: ${rule.id}`); - return { - status: 'failed', - error: `Condition evaluation failed. for rule: ${rule.id}`, - rule: rule, - }; - } - - const targetActions = rule.targets.map((target) => { - const action = evaluationResult - ? target.action - : target.action === 'ACTIVATE' - ? 'DEACTIVATE' - : 'ACTIVATE'; - - return { - agentId: target.agentId, - parameters: target.parameters, - action, - }; - }); - - return { - status: 'success', - targetActions: targetActions, - rule, - }; - } - - /** - * Executes a single source agent task. - * @param {string} agentId the source agent's ID - * @param {SourceAgentTask} task the task to execute - * @returns {Promise} the result of the taks - */ - private async executeSourceAgentTask( - agentId: string, - task: SourceAgentTask - ): Promise { - const agent = agentsService.getSourceAgent(agentId); - if (!agent) { - logger.error(`Cannot run rule for unknown source agent: ${agentId}`); - return { status: 'failed' }; - } - logger.info(`Executing task via agent ${agentId}`); - return agent.executeTask(task); - } - - /** - * Executes a set of target agent tasks. - * @param {TargetAgentTask[]} targetTasks the tasks to execute - * @returns {Promise} completes when all task have been executed - */ - async executeTargetAgentTasks( - targetTasks: TargetAgentTask[] - ): Promise { - let success = true; - const involvedAgentIds = new Set( - ...targetTasks.map((task) => task.agentId) - ); - const involvedAgents: TargetAgent[] = []; - - for (const agentId of involvedAgentIds) { - const agent = agentsService.getTargetAgent(agentId); - if (!agent) { - logger.error( - `Received target agent task for unknown agent: ${agentId}` - ); - } else { - involvedAgents.push(agent); - } - } - - for (const agent of involvedAgents) { - const tasksForAgent = targetTasks.filter( - (task) => task.agentId === agent.id - ); - const results = await agent.executeTasks(tasksForAgent); - results.forEach((result) => { - if (result.status !== 'success') { - success = false; - logger.error(`Target agent task did not succeed: ${agent.id}`); - } - }); - } - - return success; - } - - /** - * Determines if a rule is up for execution. - * @param {Rule} rule the rule to inspect - * @returns {boolean} true if the rule needs execution, false otherwise - */ - private isRuleInNeedOfExecution(rule: Rule) { - // For first time executions lastExecution will not be set - if (rule.latestStatus?.lastExecution) { - logger.debug( - `Rule [${rule.id}] last execution date: ${rule.latestStatus.lastExecution}` - ); - const nextExecutionDate = dateAdd(rule.latestStatus.lastExecution, { - minutes: rule.executionInterval, - }); - logger.debug( - `Rule [${rule.id}] next execution date: ${nextExecutionDate}` - ); - const needsExecution = isDatePast(nextExecutionDate); - if (needsExecution) { - logger.debug(`Rule [${rule.id}] needs execution.`); - } else { - logger.debug(`Rule [${rule.id}] does not need execution.`); - } - - return needsExecution; - } else { - logger.debug(`Rule [${rule.id}] has never run and needs execution.`); - return true; - } - } - - /** - * Run all rules. - */ - async runAll() { - const rules = await rulesService.listRules(); - const users = collectionService.users; - - for (const rule of rules) { - if (!this.isRuleInNeedOfExecution(rule)) { - continue; - } - - const executionDate = new Date(); - const agent = agentsService.getSourceAgent(rule.source.agentId); - if (!agent) { - logger.error( - `Cannot run rule for unknown source agent: ${rule.source.agentId}` - ); - return { status: 'failed' }; - } - - const owner = await users.get(rule.ownerId); - - if (!owner) { - logger.error(`Rule owner does not exist: ${rule.ownerId}`); - continue; - } - - const dataPoints = [rule.condition.dataPoint]; - - const sourceTasks: SourceAgentTask = { - parameters: rule.source.parameters, - ownerId: owner.id, - ownerSettings: owner.settings, - dataPoints, - }; - - // Execute data fetching task. - const taskResult = await this.executeSourceAgentTask( - rule.source.agentId, - sourceTasks - ); - - logger.info(taskResult); - - // Process task failure. - if (taskResult.status !== 'success') { - logger.error(`Source agent task did not succeed: ${rule.id}`); - rule.latestStatus = { - success: false, - lastExecution: executionDate, - error: taskResult.error ?? 'Error while fetching source agent data.', - }; - await collectionService.rules.update(rule.id, rule); - continue; - } - - // Evaluate rules. - const ruleResult = rulesService.evaluateRule(rule, taskResult.data!); - - if (ruleResult.targetActions === undefined) { - logger.info('No target actions defined'); - continue; - } - - // Process rule evaluation failures. - if (ruleResult.status === 'failed') { - rule.latestStatus = { - success: false, - lastExecution: executionDate, - error: - ruleResult.error ?? - `Rule ${rule.id} condition could not be evaluated.`, - }; - - await collectionService.rules.update(rule.id, rule); - } - - const targetTasks = ruleResult.targetActions.map((target) => ({ - agentId: target.agentId, - parameters: target.parameters, - owner: owner, - ownerSettings: owner.settings, - action: target.action, - })); - - logger.info(targetTasks); - - // TODO: defrag tasks to avoid a target agent executing the same or - // even conflicting actions on the same target entity and reduce API - // calls. - const success = await this.executeTargetAgentTasks(targetTasks); - - // Update rule status and last execution - rule.latestStatus = { - success, - lastExecution: executionDate, - }; - - await collectionService.rules.update(rule.id, rule); - } - - return { status: 'done' }; - } -} - -export const rulesService = new RulesService(); diff --git a/server/tsconfig.json b/server/tsconfig.json deleted file mode 100644 index c8a9581..0000000 --- a/server/tsconfig.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "compilerOptions": { - /* Language and Environment */ - "target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, - /* Modules */ - "module": "commonjs" /* Specify what module code is generated. */, - "outDir": "dist" /* Specify an output folder for all emitted files. */, - "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */, - "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, - /* Type Checking */ - "strict": true /* Enable all strict type-checking options. */, - "skipLibCheck": true /* Skip type checking all .d.ts files. */, - "allowSyntheticDefaultImports": true, - "sourceMap": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noImplicitAny": false, - "strictNullChecks": true, - "rootDir": "./", - "composite": true, - "resolveJsonModule": true, - "baseUrl": "." - } -} diff --git a/server/util/error.ts b/server/util/error.ts deleted file mode 100644 index 5ca2d8f..0000000 --- a/server/util/error.ts +++ /dev/null @@ -1,65 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import { Request, Response, NextFunction } from 'express'; - -/** - * A error implementation for Express error handling. - * - * This class allows to specify status codes to be passed with the error - * so that Express can respond accordingly. - * - * @param {string} message the error message - * @param {number} statusCode the HTTP status code associated with this error - */ -export class AppError extends Error { - constructor(message: string, readonly statusCode = 500) { - super(message); - Object.setPrototypeOf(this, AppError.prototype); - } -} - -/** - * Implements default error handling for API calls. - * - * Express' default error handler responds with HTML. This handler transforms - * errors into JSON API responses. If the application is running in - * development mode, the full JSON-ified error will be returned, otherwise - * only the error message will be returned. - */ -export function handleGenericError( - err: any, - req: Request, - res: Response, - next: NextFunction -) { - let status: number = 500; - let responseBody: Record = {}; - - if (res.headersSent) { - next(err); - } - if (!(err instanceof Error)) { - err = new Error(JSON.stringify(err)); - } - - if ('statusCode' in err) { - status = err.statusCode; - } - - responseBody.message = err.message; - if (process.env.NODE_ENV === 'development') { - responseBody['stack'] = JSON.stringify(err.stack); - } - res.status(status).json(responseBody); -} diff --git a/server/util/logger.ts b/server/util/logger.ts deleted file mode 100644 index 575ef3c..0000000 --- a/server/util/logger.ts +++ /dev/null @@ -1,73 +0,0 @@ -/** - Copyright 2022 Google LLC - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import winston from 'winston'; -// Imports the Google Cloud client library for Winston -import { LoggingWinston } from '@google-cloud/logging-winston'; -const { format, transports } = winston; - -const logFormat = format.printf( - (info) => `${info.timestamp} ${info.level} ${info.message} ` -); - -const getTransportsForEnv = () => { - const env = process.env.NODE_ENV; - if (env === 'production') { - // for Prod add stackdriver logging - const loggingWinston = new LoggingWinston(); - return [ - new transports.Console({ - format: format.combine( - format.timestamp({ - format: 'YYYY-MM-DD HH:mm:ss', - }), - format.json() - ), - }), - loggingWinston, - ]; - } - // for all other envs - return [ - new transports.Console({ - format: format.combine( - format.colorize({ message: true, level: true }), - format.timestamp({ - format: 'YYYY-MM-DD HH:mm:ss', - }), - logFormat - ), - }), - ]; -}; - -const getLogLevel = (): string => { - // when Log level is set override environment settings - if (typeof process.env.LOG_LEVEL != 'undefined') { - return process.env.LOG_LEVEL.toLowerCase(); - } - if (process.env.NODE_ENV == 'production') { - return 'info'; - } - return 'debug'; -}; - -export const logger = winston.createLogger({ - level: getLogLevel(), - format: format.combine( - format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), - format.metadata({ fillExcept: ['message', 'level', 'timestamp'] }) - ), - transports: getTransportsForEnv(), - exitOnError: false, -}); diff --git a/setup/post-create.sh b/setup/post-create.sh deleted file mode 100755 index f561dcc..0000000 --- a/setup/post-create.sh +++ /dev/null @@ -1,73 +0,0 @@ -#!/bin/bash - -# Set Project ID -echo "Setting Project ID: ${GOOGLE_CLOUD_PROJECT}" -gcloud config set project ${GOOGLE_CLOUD_PROJECT} - -# Enable Identity-Aware Proxy API -echo "Enabling API: Identity-Aware Proxy..." -gcloud services enable iap.googleapis.com --no-user-output-enabled - -# Enable Cloud Logging API -echo "Enabling API: Cloud Logging..." -gcloud services enable logging.googleapis.com --no-user-output-enabled - -# Enable Firestore API -echo "Enabling API: Firestore..." -gcloud services enable firestore.googleapis.com --no-user-output-enabled - -# Enable Cloud Run API -echo "Enabling API: Cloud Run..." -gcloud services enable run.googleapis.com --no-user-output-enabled - -# Enable App Engine API -echo "Enabling API: App Engine..." -gcloud services enable appengine.googleapis.com --no-user-output-enabled - -# Enable DV360 API -echo "Enabling API: DV360..." -gcloud services enable displayvideo.googleapis.com --no-user-output-enabled - -# Enable Google Ads API -echo "Enabling API: Google Ads..." -gcloud services enable googleads.googleapis.com --no-user-output-enabled - -# Enable Google Maps API (for the UI location autocompletion) -echo "Enabling API: Google Maps..." -gcloud services enable places-backend.googleapis.com --no-user-output-enabled - -# Enable Cloud Scheduler API -echo "Enabling API: Cloud Scheduler..." -gcloud services enable cloudscheduler.googleapis.com --no-user-output-enabled - -# Create App Engine if not exists -echo "Checking for App Engine..." - -gcloud app describe --no-user-output-enabled -q --verbosity="none" -RESULT=$? - -if [ $RESULT != 0 ]; then - echo "Creating App Engine..." - gcloud app create --region ${GOOGLE_CLOUD_REGION} -fi - -# Create Firestore in Native Mode -gcloud firestore databases create --region ${GOOGLE_CLOUD_REGION} --no-user-output-enabled -q --verbosity="none" - -# Create Cloud Scheduler Job -gcloud scheduler jobs create http iftta-rules-run --schedule="*/15 * * * *" --http-method=GET --uri="${SERVICE_URL}/api/rules/run" - -# Generate session secret -SESSION_SECRET=$(openssl rand -hex 32) - -# Build OAuth Callback URL -OAUTH_CALLBACK_URL=${SERVICE_URL}/api/auth/oauthcallback - -# Update environment variables -echo "Updating environment variables..." -gcloud run services update ${K_SERVICE} --region=${GOOGLE_CLOUD_REGION} --no-user-output-enabled --update-env-vars PROJECT_ID=${GOOGLE_CLOUD_PROJECT},SESSION_SECRET=${SESSION_SECRET},OAUTH_CALLBACK_URL=${OAUTH_CALLBACK_URL} - -echo "### Important manual steps ###" -echo "Go to https://console.cloud.google.com/apis/credentials" -echo "Add the following URL to your OAuth Client ID's 'Authorized JavaScript origins':" ${SERVICE_URL} -echo "Add the following URL to your OAuth Client ID's 'Authorized redirect URIs':" ${OAUTH_CALLBACK_URL} diff --git a/src/config.ts b/src/config.ts new file mode 100644 index 0000000..9e6e35c --- /dev/null +++ b/src/config.ts @@ -0,0 +1,39 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export const GLOBALCTX = this; + +export const CONFIG = { + spreadsheetId: null, + sourceNamespace: 'source', + targetNamespace: 'target', + resultNamespace: 'result', + rules: { + sheetName: 'Rules', + startRow: 1, + cols: { + ruleName: 0, + lastUpdate: 1, + status: 2, + activationFormula: 3, + updateInterval: 4, + targetAgent: 5, + targetId: 6, + targetIdType: 7, + }, + }, +}; diff --git a/src/external/ads-script/agent.js b/src/external/ads-script/agent.js new file mode 100644 index 0000000..239e93e --- /dev/null +++ b/src/external/ads-script/agent.js @@ -0,0 +1,217 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +class GoogleAds extends TargetAgent { + name = 'Google Ads'; + requiredParameters = ['id', 'type']; + + /** + * Constructor. + */ + constructor() { + super(); + } + + /** + * Process entity based on evaluation. + * + * @param {Object} params + * @param {boolean} evaluation + */ + process(params, evaluation) { + // Check for missing parameters + /*this.ensureRequiredParameters(params); + + const condition = `Name = '${params.identifier}'`; + this.switchAdGroupStatus(condition, evaluation);*/ + + // Enable/pause the Ad Groups + const adGroupIds = row[CONFIG.feed.columns.adGroupIds] + ? row[CONFIG.feed.columns.adGroupIds] + .split(';') + .map((id) => parseInt(id, 10)) + : []; + const adGroupsByIds = getAdGroupsByIds(adGroupIds); + const adGroupsByLabel = getAdGroupsByLabel( + row[CONFIG.feed.columns.adGroupLabel] + ); + const adGroups = [...adGroupsByIds, ...adGroupsByLabel]; + adGroups.forEach((adGroup) => { + if (enable && !adGroup.isEnabled()) { + Logger.log(`Enabling Ad Group ${adGroup.getId()}`); + adGroup.enable(); + } else if (enable && adGroup.isEnabled()) { + Logger.log(`Ad Group ${adGroup.getId()} already enabled`); + } else if (!enable && adGroup.isEnabled()) { + Logger.log(`Pausing Ad Group ${adGroup.getId()}`); + adGroup.pause(); + } else { + Logger.log(`Ad Group ${adGroup.getId()} already paused`); + } + }); + // Enable/pause the Ads + const adIds = row[CONFIG.feed.columns.adIds] + ? row[CONFIG.feed.columns.adIds] + .split(';') + .map((pair) => pair.split(',').map((id) => parseInt(id, 10))) + : []; + const adsByIds = getAdsByIds(adIds); + const adsByLabel = getAdsByLabel(row[CONFIG.feed.columns.adLabel]); + const ads = [...adsByIds, ...adsByLabel]; + ads.forEach((ad) => { + if (enable && !ad.isEnabled()) { + Logger.log(`Enabling Ad ${ad.getId()}`); + ad.enable(); + } else if (enable && ad.isEnabled()) { + Logger.log(`Ad ${ad.getId()} already enabled`); + } else if (!enable && ad.isEnabled()) { + Logger.log(`Pausing Ad ${ad.getId()}`); + ad.pause(); + } else { + Logger.log(`Ad ${ad.getId()} already paused`); + } + }); + } + + /** + * Check if supposed entity status matches its actual live status. + * + * @param {Object} params + * @param {boolean} evaluation + * @throws {Error} + */ + validate(params, evaluation) {} + + /** + * Enable or pause an AdGroup by its name + * + * @param {string} condition AdGroup name + * @param {boolean} enable If true, then enable, else pause + */ + switchAdGroupStatus(condition, enable) { + const selectors = [ + AdsApp.adGroups(), + AdsApp.videoAdGroups(), + AdsApp.shoppingAdGroups(), + ]; + + for (var i = 0; i < selectors.length; i++) { + const adGroupIter = selectors[i].withCondition(condition).get(); + + if (adGroupIter.hasNext()) { + const adGroup = adGroupIter.next(); + + this.switchEntityStatus(adGroup, enable); + } + } + } + + getAdGroupsByName(adGroupName) {} + + switchEntityStatus(entity, enable) { + if (enable && !entity.isEnabled()) { + entity.enable(); + } else if (enable && !entity.isEnabled()) { + entity.pause(); + } + } + + /** + * Get Ads based on their IDs. + * An ID is a pair of [Ad Group ID, Ad ID] + * + * @param {Array>} + * @returns {Array} + */ + getAdsByIds(ids) { + const ads = []; + const adsIterator = AdsApp.ads().withIds(ids).get(); + + while (adsIterator.hasNext()) { + ads.push(adsIterator.next()); + } + + return ads; + } + + /** + * Get Ad Groups based on their IDs. + * + * @param {Array} + * @returns {Array} + */ + getAdGroupsByIds(ids) { + const adGroups = []; + const adGroupsIterator = AdsApp.adGroups().withIds(ids).get(); + + while (adGroupsIterator.hasNext()) { + adGroups.push(adGroupsIterator.next()); + } + + return adGroups; + } + + /** + * Get Ads by their label. + * + * @param {string} label + * @returns {Array} + */ + getAdsByLabel(label) { + const ads = []; + const labelsIterator = AdsApp.labels() + .withCondition(`label.name = '${label}'`) + .get(); + + if (!labelsIterator.hasNext()) { + return []; + } + + const adsIterator = labelsIterator.next().ads().get(); + + while (adsIterator.hasNext()) { + ads.push(adsIterator.next()); + } + + return ads; + } + + /** + * Get Ad Groups based on their label. + * + * @param {string} label + * @returns {Array} + */ + getAdGroupsByLabel(label) { + const adGroups = []; + const labelsIterator = AdsApp.labels() + .withCondition(`label.name = '${label}'`) + .get(); + + if (!labelsIterator.hasNext()) { + return []; + } + + const adGroupsIterator = labelsIterator.next().adGroups().get(); + + while (adGroupsIterator.hasNext()) { + adGroups.push(adGroupsIterator.next()); + } + + return adGroups; + } +} diff --git a/src/external/ads-script/api.js b/src/external/ads-script/api.js new file mode 100644 index 0000000..a18897f --- /dev/null +++ b/src/external/ads-script/api.js @@ -0,0 +1,111 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export class ApiHelper { + cache = {}; + + /** + * Constructor. + */ + constructor() { + this.cache = {}; + } + + /** + * Call API. + * + * @param {string} url + * @param {string} method + * @param {?GoogleAppsScript.URL_Fetch.HttpHeaders} headers + * @param {?Record} queryParams + * @param {?Object} body + * @returns {Object} + */ + callApi( + url, + headers, + queryParams, + body, + method = 'get', + contentType = 'application/json' + ) { + if (queryParams) { + url = `${url}${this.objectToUrlQuery(url, queryParams)}`; + } + + const params = { + headers: headers ?? {}, + method: method, + muteHttpExceptions: true, + contentType: contentType, + }; + + // Add body if any + if (body) { + // Stringify JSON if applicable + if (contentType === 'application/json') { + body = JSON.stringify(body); + } + + params.payload = body; + } + + const cacheKey = `${url}-${JSON.stringify(params)}`; + if (!(cacheKey in this.cache) || !this.cache[cacheKey]) { + const res = UrlFetchApp.fetch(url, params); + + if (200 != res.getResponseCode() && 204 != res.getResponseCode()) { + Logger.log('HTTP code: ' + res.getResponseCode()); + Logger.log('API error: ' + res.getContentText()); + Logger.log('URL: ' + url); + throw new Error(res.getContentText()); + } + + this.cache[cacheKey] = res.getContentText() + ? JSON.parse(res.getContentText()) + : {}; + } + + return this.cache[cacheKey]; + } + + /** + * Convert object into URL query string. + * + * @param {string} url + * @param {Object|null} obj + * @returns {string} + */ + objectToUrlQuery(url, obj) { + if (!obj || (obj && Object.keys(obj).length === 0)) return ''; + + const prefix = url.includes('?') ? '&' : '?'; + + return prefix.concat( + Object.keys(obj) + .map((key) => { + if (obj[key] instanceof Array) { + const joined = obj[key].join(`&${key}=`); + return joined.length ? `${key}=${joined}` : null; + } + return `${key}=${obj[key]}`; + }) + .filter((param) => param) + .join('&') + ); + } +} diff --git a/src/external/ads-script/base.js b/src/external/ads-script/base.js new file mode 100644 index 0000000..6bc04a5 --- /dev/null +++ b/src/external/ads-script/base.js @@ -0,0 +1,65 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +class TargetAgent extends ApiHelper { + name = ''; + requiredParameters = []; + static instance; + + constructor() { + super(); + } + + process(params, evaluation) {} + + validate(params, evaluation) {} + + /** + * Find missing required parameters exist in object. + * + * @param {!Object} params + * @returns {string} + */ + findMissingRequiredParameter(params) { + const keys = Object.keys(params); + + return this.requiredParameters.find((param) => !keys.includes(param)); + } + + /** + * Ensure all required parameters exist in object. + * + * @param {!Object} params + * @throws {Error} + */ + ensureRequiredParameters(params) { + // Check for missing parameters + const missingParameter = !this.findMissingRequiredParameter(params); + + if (missingParameter) { + throw new Error(`Missing parameter: '${missingParameter}'`); + } + } + + static getInstance() { + if (!this.instance) { + this.instance = new this(); + } + + return this.instance; + } +} diff --git a/src/external/ads-script/config.js b/src/external/ads-script/config.js new file mode 100644 index 0000000..68c7b9a --- /dev/null +++ b/src/external/ads-script/config.js @@ -0,0 +1,34 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +const CONFIG = { + spreadsheetId: '', + rules: { + sheetName: 'Rules', + startRow: 1, + cols: { + ruleName: 0, + lastUpdate: 1, + status: 2, + activationFormula: 3, + updateInterval: 4, + targetAgent: 5, + targetId: 6, + targetIdType: 7, + }, + }, +}; diff --git a/src/external/ads-script/index.js b/src/external/ads-script/index.js new file mode 100644 index 0000000..60c76c2 --- /dev/null +++ b/src/external/ads-script/index.js @@ -0,0 +1,94 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** @type {?ApiSports} */ +let apiHelper; + +/** @type {?SheetsService} */ +let sheetsService; + +/** + * Parse all rules in the feed and, according to mode, + * fetches data from API and/or syncs state with target, respectively. + */ +function main() { + // Get all rows from the sheet + const rows = getSheetsService().getRangeData(CONFIG.rules.sheetName, 1, 1); + + if (rows.length === 0) { + return; + } + + // Extract and parse column headers + const columnHeaders = rows.shift(); + const columnHeaderHelper = new DynamicColumnHeaders(columnHeaders); + + // Handle every row + rows.forEach((row, index) => { + console.log(`Processing row ${index + 1}`); + + let status = ''; + + try { + if (row[CONFIG.rules.cols.targetAgent] !== 'Google Ads') return; + + console.log('Synchronizing...'); + const evaluation = getSheetsService().getCellValue( + CONFIG.rules.sheetName, + index + 1 + CONFIG.rules.startRow, + CONFIG.rules.cols.activationFormula + 1 + ); + + if (evaluation === '') return; + + const targetAgent = GoogleAds.getInstance(); + + targetAgent.process( + row[CONFIG.rules.cols.targetId], + row[CONFIG.rules.cols.targetIdType], + evaluation + ); + + status = `Synchronized (${Utils.getCurrentDateString()})`; + + // Update timestamp + getSheetsService().setCellValue( + index + CONFIG.rules.startRow + 1, + CONFIG.rules.cols.lastUpdate + 1, + String(Date.now()), + CONFIG.rules.sheetName + ); + } catch (err) { + console.log( + `Error (${Utils.getCurrentDateString()}): ${JSON.stringify(err)}` + ); + } + }); +} + +/** + * Returns the SheetsService instance, initializing it if it does not exist yet. + * + * @return {!SheetsService} The initialized SheetsService instance + */ +function getSheetsService() { + if (sheetsService == null) { + sheetsService = new SheetsService(CONFIG.spreadsheetId); + } + + return sheetsService; +} diff --git a/src/external/ads-script/sheets.js b/src/external/ads-script/sheets.js new file mode 100644 index 0000000..b26e202 --- /dev/null +++ b/src/external/ads-script/sheets.js @@ -0,0 +1,88 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +class SheetsService { + constructor(spreadsheetId) { + this.spreadsheet_ = SpreadsheetApp.openById(spreadsheetId); + } + + /** + * Retrieves data from the underlying spreadsheet using the provided range + * parameters and sheet name. + * + * @param {string} sheetName The name of the sheet + * @param {number} startRow The range's start row + * @param {number} startCol The range's start column + * @param {number=} numRows Optional number of rows to retrieve. Defaults to + * all available rows + * @param {number=} numCols Optional number of columns to retrieve. Defaults + * to all available columns + * @return {?Array>} The data found at the specified range + */ + getRangeData(sheetName, startRow, startCol, numRows = 0, numCols = 0) { + const sheet = this.getSpreadsheet().getSheetByName(sheetName); + + // Return empty result if no rows + if (numRows + sheet.getLastRow() - startRow + 1 === 0) { + console.log('nope'); + return [[]]; + } + + console.log( + sheetName, + startRow, + startCol, + numRows, + numCols, + sheet.getLastRow() - startRow + 1, + sheet.getLastColumn() - startCol + 1 + ); + + return sheet + .getRange( + startRow, + startCol, + numRows || sheet.getLastRow() - startRow + 1, + numCols || sheet.getLastColumn() - startCol + 1 + ) + .getValues(); + } + + /** + * Retrieves a cell's value by the given parameters. + * + * @param {string} sheetName The name of the sheet + * @param {number} row The row identifier + * @param {number} col The column identifier + * @return {?Object} The value of the cell + */ + getCellValue(sheetName, row, col) { + const sheet = this.getSpreadsheet().getSheetByName(sheetName); + const cell = sheet.getRange(row, col); + + return cell.getValue(); + } + + /** + * Returns the initialized {@link SpreadsheetApp.Spreadsheet} reference. + * + * @return {?SpreadsheetApp.Spreadsheet} The spreadsheet + */ + getSpreadsheet() { + return this.spreadsheet_; + } +} diff --git a/src/helpers/api.ts b/src/helpers/api.ts new file mode 100644 index 0000000..bde9b84 --- /dev/null +++ b/src/helpers/api.ts @@ -0,0 +1,149 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export class ApiHelper { + private cache: Record = {}; + + /** + * Constructor. + */ + constructor() { + this.cache = {}; + } + + /** + * Call API. + * + * @param {string} url + * @param {?GoogleAppsScript.URL_Fetch.HttpHeaders} headers + * @param {?Record} queryParams + * @param {?Object} body + * @param {string} method + * @param {string} contentType + * @param {boolean} forceCache + * @returns {Object} + */ + callApi( + url: string, + headers?: GoogleAppsScript.URL_Fetch.HttpHeaders, + queryParams?: Record, + body?: Object, + method = 'get', + contentType = 'application/json', + forceCache = false + ) { + if (queryParams) { + url = `${url}${this.objectToUrlQuery(url, queryParams)}`; + } + + const params: { + headers: GoogleAppsScript.URL_Fetch.HttpHeaders; + method: GoogleAppsScript.URL_Fetch.HttpMethod; + muteHttpExceptions: boolean; + contentType?: string; + payload?: Object; + } = { + headers: headers ?? {}, + method: method as GoogleAppsScript.URL_Fetch.HttpMethod, + muteHttpExceptions: true, + contentType: contentType, + }; + + // Add body if any + if (body) { + // Stringify JSON if applicable + if (contentType === 'application/json') { + body = JSON.stringify(body); + } + + params.payload = body; + } + + const cacheKey = `${url}-${JSON.stringify(params)}`; + + if (cacheKey in this.cache && this.cache[cacheKey]) { + console.log( + 'Returning cached result', + JSON.stringify(this.cache[cacheKey]) + ); + return this.cache[cacheKey]; + } + + const resRaw = UrlFetchApp.fetch(url, params); + + if (200 != resRaw.getResponseCode() && 204 != resRaw.getResponseCode()) { + Logger.log('HTTP code: ' + resRaw.getResponseCode()); + Logger.log('API error: ' + resRaw.getContentText()); + Logger.log('URL: ' + url); + throw new Error(resRaw.getContentText()); + } + + const res = resRaw.getContentText() + ? JSON.parse(resRaw.getContentText()) + : {}; + + // Only cache GET and forced cache requests + if (method.toLowerCase() === 'get' || forceCache) { + this.cache[cacheKey] = res; + } + + return res; + + /*if (!(cacheKey in this.cache) || !this.cache[cacheKey]) { + const res = UrlFetchApp.fetch(url, params); + + if (200 != res.getResponseCode() && 204 != res.getResponseCode()) { + Logger.log('HTTP code: ' + res.getResponseCode()); + Logger.log('API error: ' + res.getContentText()); + Logger.log('URL: ' + url); + throw new Error(res.getContentText()); + } + + this.cache[cacheKey] = res.getContentText() + ? JSON.parse(res.getContentText()) + : {}; + } + + return this.cache[cacheKey];*/ + } + + /** + * Convert object into URL query string. + * + * @param {string} url + * @param {Object|null} obj + * @returns {string} + */ + objectToUrlQuery(url: string, obj?: object) { + if (!obj || (obj && Object.keys(obj).length === 0)) return ''; + + const prefix = url.includes('?') ? '&' : '?'; + + return prefix.concat( + Object.keys(obj) + .map((key) => { + if ((obj as any)[key] instanceof Array) { + const joined = (obj as any)[key].join(`&${key}=`); + return joined.length ? `${key}=${joined}` : null; + } + return `${key}=${(obj as any)[key]}`; + }) + .filter((param) => param) + .join('&') + ); + } +} diff --git a/src/helpers/auth.ts b/src/helpers/auth.ts new file mode 100644 index 0000000..66de169 --- /dev/null +++ b/src/helpers/auth.ts @@ -0,0 +1,93 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export interface ServiceAccount { + type: 'this.serviceAccount'; + project_id: string; + private_key_id: string; + private_key: string; + client_email: string; + client_id: string; + auth_uri: 'https://accounts.google.com/o/oauth2/auth'; + token_uri: 'https://oauth2.googleapis.com/token'; + auth_provider_x509_cert_url: 'https://www.googleapis.com/oauth2/v1/certs'; + client_x509_cert_url: string; + user_email: string; +} + +/** + * This is a wrapper class for handling authentification to DV360 API. + * This class can be used to auth also to other Google APIs. + */ +export class Auth { + serviceAccount: ServiceAccount; + /** + * Set the OAuth configuration. + * In order to authorise your DV360 API calls you can: + * 1. Use the same Google account as you open the spreadsheet. + * If you chose this approach, you don't need to do pass account. + * 2. Use a service account. + * This is a service account in JSON format from your GCP project. + * How to get a service account credentials from GCP: + * https://cloud.google.com/iam/docs/service-accounts + * + * Service account credentials should be specified in the following JSON format: + * { + * "type": "this.serviceAccount", + * "project_id": "...", + * "private_key_id": "...", + * "private_key": "...", + * "client_email": "...@...gserviceaccount.com", + * "client_id": "...", + * "auth_uri": "https://accounts.google.com/o/oauth2/auth", + * "token_uri": "https://oauth2.googleapis.com/token", + * "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + * "client_x509_cert_url": "..." + * } + * + * @param {?Object} account The service account or empty + */ + constructor(account?: Object) { + this.serviceAccount = account as ServiceAccount; + } + + /** + * Get Auth Token for OAuth authorisation for your service account. + * You need this token in order to authorise your DV360 API requests. + * See more: https://github.com/gsuitedevs/apps-script-oauth2/blob/master/README.md + * See more: https://developers.google.com/apps-script/reference/script/script-app#getOAuthToken() + * + * @returns {string} OAuth Token + */ + getAuthToken() { + if (!this.serviceAccount || !('private_key' in this.serviceAccount)) { + return ScriptApp.getOAuthToken(); + } + + const service = OAuth2.createService('Service Account') + .setTokenUrl('https://accounts.google.com/o/oauth2/token') + .setPrivateKey(this.serviceAccount.private_key) + .setIssuer(this.serviceAccount.client_email) + .setSubject(this.serviceAccount.user_email) + .setPropertyStore(PropertiesService.getScriptProperties()) + .setParam('access_type', 'offline') + .setScope('https://www.googleapis.com/auth/display-video'); + + service.reset(); + return service.getAccessToken(); + } +} diff --git a/src/helpers/dynamic-column-headers.ts b/src/helpers/dynamic-column-headers.ts new file mode 100644 index 0000000..157f667 --- /dev/null +++ b/src/helpers/dynamic-column-headers.ts @@ -0,0 +1,94 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { JPath } from './jpath'; + +export class DynamicColumnHeaders { + headers: Array; + static namespaceSeparator = ':'; + + /** + * Constructor. + * + * @param {Array} headers + */ + constructor(headers: Array) { + this.headers = headers; + } + + /** + * Maps values of cells in a row to their respective + * header for a given namespace. + * With no namespace provided, it returns values for ALL namespaces + * and nests the results under each namespace as property. + * Per default it will nest results under the respective group, which is '0' + * if none exists. + * + * @param {Array} row + * @param {string} namespace + * @param {string} separator + * @param {boolean} includeGroup + * @returns {Record} + */ + getMappedValues( + row: Array, + namespace: string | undefined = undefined, + includeGroup: boolean = true + ): Record { + let res = {}; + + row.forEach((cell, index) => { + const exp = new RegExp( + `^${namespace ?? '\\w+'}(?:\\.\\d)*${ + DynamicColumnHeaders.namespaceSeparator + }` + ); + + if (exp.test(this.headers[index])) { + const prefixAndPath = this.headers[index].split( + DynamicColumnHeaders.namespaceSeparator + ); + const namespaceAndGroupArr = prefixAndPath[0].split('.'); + const group = namespaceAndGroupArr[1] ?? '0'; + + // Only include namespace in path when extracting for ALL namespaces + const path = `${namespace ? '' : `${namespaceAndGroupArr[0]}.`}${ + includeGroup ? `${group}.` : '' + }${prefixAndPath[1]}`; + + res = JPath.setValue(res, path, cell); + } + }); + + return res; + } + + /** + * Returns the index of the first header to have the given namespace. + * + * @param {string} namespace + * @returns {number} + */ + getFirstColWithNamespace(namespace: string) { + const exp = new RegExp( + `^${namespace ?? '\\w+'}(?:\\.\\d)*${ + DynamicColumnHeaders.namespaceSeparator + }` + ); + return this.headers.findIndex((header) => exp.test(header)); + } +} diff --git a/src/helpers/jpath.ts b/src/helpers/jpath.ts new file mode 100644 index 0000000..4f21e06 --- /dev/null +++ b/src/helpers/jpath.ts @@ -0,0 +1,105 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export class JPath { + /** + * Get Object entry value for the provided path. + * + * @param {string} path Format "..." + * @param {Object} json JSON or JavaScript Object + * @returns {string} Value from JSON or null if value does not exist + */ + static getValue(path: string, json: Object) { + let tmpJson: Record = json; + let val = null; + + for (const part of path.split('.')) { + if (part.startsWith('!')) { + return this.getAgregatedValue(part.substring(1), tmpJson); + } + + let tmpVal; + const intVal = parseInt(part); + if (intVal && intVal in tmpJson) { + tmpVal = tmpJson[intVal]; + } else if (tmpJson.hasOwnProperty(part)) { + tmpVal = tmpJson[part]; + } else { + break; + } + + const typeOf = typeof tmpVal; + if ('string' == typeOf || 'number' == typeOf) { + return tmpVal; + } else { + tmpJson = tmpVal; + } + } + + return val; + } + + /** + * Get aggregated value (e.g. MAX, MIN, etc.) from JSON entry values. + * + * @param {string} aggFunction Aggregation function (now only MIN and MAX function are supported) + * @param {Object} json JSON or JavaScript Object + * @returns {number} Agregated value from JSON + */ + static getAgregatedValue(aggFunction: string, json: Object) { + switch (aggFunction.toLowerCase()) { + case 'min': + return Math.min.apply(Math, Object.values(json)); + + case 'max': + return Math.max.apply(Math, Object.values(json)); + + default: + throw `Aggregation function "${aggFunction}" is not supported`; + } + } + + /** + * Set Object property at specified path. + * + * @param {Record} obj + * @param {string} pathString + * @param {string|number} value + * @returns {Record} + */ + static setValue( + obj: Record, + pathString: string, + value: string | number + ) { + let curr = obj; + const path = pathString.split('.'); + + path.forEach((key, index) => { + if (index + 1 === path.length) { + curr[key] = value; + } else { + if (!(key in curr)) { + curr[key] = {}; + } + curr = curr[key]; + } + }); + + return obj; + } +} diff --git a/src/helpers/sheets.ts b/src/helpers/sheets.ts new file mode 100644 index 0000000..cd3fa6c --- /dev/null +++ b/src/helpers/sheets.ts @@ -0,0 +1,169 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Helper class to wrap calls to Sheets API. + * Sheets API Read/Write usually works faster then reading and writing from/to + * spreadsheet directly. + */ +export class SheetsService { + defaultMode: string; + spreadsheet_: GoogleAppsScript.Spreadsheet.Spreadsheet; + + /** + * Constructor. + * + * @param {string} spreadsheetId + */ + constructor(spreadsheetId?: string) { + let spreadsheet; + + if (spreadsheetId) { + try { + spreadsheet = SpreadsheetApp.openById(spreadsheetId); + } catch (e) { + console.error(e); + throw new Error( + `Unable to identify spreadsheet with provided ID: ${spreadsheetId}!` + ); + } + } else { + spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); + } + + /** @private @const {?SpreadsheetApp.Spreadsheet} */ + this.spreadsheet_ = spreadsheet; + + /** @type {string} */ + this.defaultMode = 'FORMULA'; + } + + /** + * Writes the given values in the specified sheet and range. + * + * @param {string} sheetName The name of the sheet + * @param {number} row The range's start row + * @param {number} col The range's start col + * @param {?Array>} values The values to write + */ + setValuesInDefinedRange( + sheetName: string, + row: number, + col: number, + values: Array> + ) { + const sheet = this.getSpreadsheet().getSheetByName(sheetName); + + if (!sheet) return; + + if (values[0]) { + sheet + .getRange(row, col, values.length, values[0].length) + .setValues(values); + } + } + + /** + * Retrieves data from the underlying spreadsheet using the provided range + * parameters and sheet name. + * + * @param {string} sheetName The name of the sheet + * @param {number} startRow The range's start row + * @param {number} startCol The range's start column + * @param {number=} numRows Optional number of rows to retrieve. Defaults to + * all available rows + * @param {number=} numCols Optional number of columns to retrieve. Defaults + * to all available columns + * @return {?Array>} The data found at the specified range + */ + getRangeData( + sheetName: string, + startRow: number, + startCol: number, + numRows = 0, + numCols = 0 + ) { + const sheet = this.getSpreadsheet().getSheetByName(sheetName); + + // Return empty result if no rows + if (!sheet || numRows + sheet.getLastRow() - startRow + 1 === 0) { + return [[]]; + } + + return sheet + .getRange( + startRow, + startCol, + numRows || sheet.getLastRow() - startRow + 1, + numCols || sheet.getLastColumn() - startCol + 1 + ) + .getValues(); + } + + /** + * Retrieves a cell's value by the given parameters. + * + * @param {string} sheetName The name of the sheet + * @param {number} row The row identifier + * @param {number} col The column identifier + * @return {?Object} The value of the cell + */ + getCellValue(sheetName: string, row: number, col: number) { + const sheet = this.getSpreadsheet().getSheetByName(sheetName); + + return sheet ? sheet.getRange(row, col).getValue() : null; + } + + /** + * Sets a cell's value by the given parameters. + * + * @param {number} row The row identifier + * @param {number} col The column identifier + * @param {string} val The value to set + * @param {?string=} sheetName The name of the sheet to use. Uses the + * sheet the user currently has open (active sheet) if not given + */ + setCellValue(row: number, col: number, val: string, sheetName?: string) { + const sheet = sheetName + ? this.getSpreadsheet().getSheetByName(sheetName) + : this.getSpreadsheet().getActiveSheet(); + + if (!sheet) return; + + sheet.getRange(row, col).setValue(val); + } + + /** + * Spreadsheet API has quota of requests per minute, so each next retry will + * be done after this wait time. Wait time will be increased progressively. + * + * @param {number} i Current number of retries + * @returns {number} Number of seconds + */ + getWaitTimeInSeconds(i: number) { + return (i > 3 ? 10 : 5) * (i + 1); + } + + /** + * Returns the initialized {@link SpreadsheetApp.Spreadsheet} reference. + * + * @return {?SpreadsheetApp.Spreadsheet} The spreadsheet + */ + getSpreadsheet() { + return this.spreadsheet_; + } +} diff --git a/src/helpers/utils.ts b/src/helpers/utils.ts new file mode 100644 index 0000000..b7e1b46 --- /dev/null +++ b/src/helpers/utils.ts @@ -0,0 +1,31 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export class Utils { + /** + * Get current date and time as string. + * + * @return {string} + */ + static getCurrentDateString() { + return new Date() + .toISOString() + .replace('T', ' ') + .replace('Z', '') + .replace(/\.\d*/, ''); + } +} diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..4be4466 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,369 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { CONFIG, GLOBALCTX } from './config'; +import { ApiHelper } from './helpers/api'; +import { DynamicColumnHeaders } from './helpers/dynamic-column-headers'; +import { JPath } from './helpers/jpath'; +import { SheetsService } from './helpers/sheets'; +import { Utils } from './helpers/utils'; +import { TargetAgent } from './target-agents/base'; +import { AVAILABLE_AGENTS } from './target-agents/index'; + +// TODO: Remove me! +function teamHasWonInPastXDays(fixtures: any, params: any) { + return fixtures.response.some((item: any) => { + return ( + item.fixture.status.short === 'FT' && + ((item.teams.home.id == params.teamId && + item.teams.home.winner === true) || + (item.teams.away.id == params.teamId && + item.teams.away.winner === true)) && + item.fixture.timestamp * 1000 > params.lookAroundDays + ); + }); +} + +// TODO: Remove me! +function teamIsPlayingWithinNextXDays(fixtures: any, params: any) { + const now = new Date(); + const maxFuture = new Date(now.valueOf()).setDate( + now.getDate() + params.lookAroundDays + ); + + return fixtures.response.some((item: any) => { + return ( + item.fixture.timestamp * 1000 > now.getTime() && + item.fixture.timestamp * 1000 < maxFuture + ); + }); +} + +enum MODE { + FETCH = 0, + SYNC = 1, + FETCH_AND_SYNC = 2, +} + +/** @type {?SheetsService} */ +let sheetsService: SheetsService; + +/** @type {Record} */ +let targetAgents: Record = {}; + +/** + * Add custom menu item into the Spreadsheet menu. + */ +function onOpen() { + const ui = SpreadsheetApp.getUi(); + ui.createMenu('IFTTA') + .addItem('Fetch', 'fetch') + .addItem('Sync', 'sync') + .addItem('FetchAndSync', 'fetchAndSync') + .addItem('Validate', 'validate') + .addToUi(); +} + +/** + * Call main() with mode 'FETCH'. + */ +function fetch() { + main(MODE.FETCH); +} + +/** + * Call main() with mode 'SYNC'. + */ +function sync() { + main(MODE.SYNC); +} + +/** + * Call main() with mode 'FETCH_AND_SYNC'. + */ +function fetchAndSync() { + main(MODE.FETCH_AND_SYNC); +} + +/** + * Parse all rules in the feed and, according to mode, + * fetches data from API and/or syncs state with target, respectively. + * + * @param {string} mode + */ +function main(mode: MODE) { + // Get all rows from the sheet + const rows = getSheetsService().getRangeData(CONFIG.rules.sheetName, 1, 1); + + if (rows.length === 0) { + return; + } + + // Extract and parse column headers + const columnHeaders = rows.shift() as Array; + const columnHeaderHelper = new DynamicColumnHeaders(columnHeaders); + + const apiHelper = new ApiHelper(); + + // Handle every row + rows.forEach((row: Array, index: number) => { + console.log(`Processing row ${index + 1}`); + + // Check if update is due + let lastUpdate = Number(row[CONFIG.rules.cols.lastUpdate]); + const updateInterval = Number(row[CONFIG.rules.cols.updateInterval]); + let status = ''; + + if ( + updateInterval > 0 && + Date.now() < lastUpdate + updateInterval * 3600 * 1000 + ) { + console.log('Update not due.'); + return; + } + + try { + // Fetch + if (mode === MODE.FETCH || mode === MODE.FETCH_AND_SYNC) { + console.log('Fetching data from API...'); + + const sourceParams = columnHeaderHelper.getMappedValues( + row, + CONFIG.sourceNamespace + ); + + for (const group in sourceParams) { + const source = sourceParams[group]; + + console.log('calling api'); + console.log('url', source.url); + console.log('headers', JSON.stringify(source.headers)); + console.log('params', JSON.stringify(source.params)); + + const res = apiHelper.callApi( + source.url, + source.headers, + source.params + ); + + row = updateRowWithResultData(columnHeaders, row, res, group); + + const resultsHeaderStartCol = + columnHeaderHelper.getFirstColWithNamespace(CONFIG.resultNamespace); + + const results = row.slice(resultsHeaderStartCol); + + getSheetsService().setValuesInDefinedRange( + CONFIG.rules.sheetName, + index + CONFIG.rules.startRow + 1, + resultsHeaderStartCol + 1, + [results] + ); + + status = `Fetched (${Utils.getCurrentDateString()})`; + } + } + + // Sync + if (mode === MODE.SYNC || mode === MODE.FETCH_AND_SYNC) { + console.log('Synchronizing...'); + const evaluation = getSheetsService().getCellValue( + CONFIG.rules.sheetName, + index + 1 + CONFIG.rules.startRow, + CONFIG.rules.cols.activationFormula + 1 + ); + + if (evaluation === '') return; + + const params = columnHeaderHelper.getMappedValues( + row, + CONFIG.targetNamespace, + false + ); + + const targetAgent = getTargetAgent(row[CONFIG.rules.cols.targetAgent]); + + targetAgent.process( + row[CONFIG.rules.cols.targetId], + row[CONFIG.rules.cols.targetIdType], + evaluation, + params + ); + + status = `Synchronized (${Utils.getCurrentDateString()})`; + + // Update timestamp + getSheetsService().setCellValue( + index + CONFIG.rules.startRow + 1, + CONFIG.rules.cols.lastUpdate + 1, + String(Date.now()), + CONFIG.rules.sheetName + ); + } + } catch (err) { + status = `Error (${Utils.getCurrentDateString()}): ${JSON.stringify( + err + )}`; + } finally { + // Update status + getSheetsService().setCellValue( + index + CONFIG.rules.startRow + 1, + CONFIG.rules.cols.status + 1, + status, + CONFIG.rules.sheetName + ); + } + }); +} + +/** + * Validate that the Sheet and target entities are in sync. + */ +function validate() { + const errors: Array = []; + + // Get all rows from the sheet + const rows = getSheetsService().getRangeData(CONFIG.rules.sheetName, 1, 1); + + // Extract and parse column headers + const columnHeaders = rows.shift() as Array; + const columnHeaderHelper = new DynamicColumnHeaders(columnHeaders); + + // Handle every row + rows.forEach((row: Array, index: number) => { + try { + const evaluation = getSheetsService().getCellValue( + CONFIG.rules.sheetName, + index + CONFIG.rules.startRow + 1, + CONFIG.rules.cols.activationFormula + 1 + ); + + if (evaluation === '') return; + + const params = columnHeaderHelper.getMappedValues( + row, + CONFIG.targetNamespace + ); + + getTargetAgent(row[CONFIG.rules.cols.targetAgent]).validate( + row[CONFIG.rules.cols.targetId], + row[CONFIG.rules.cols.targetIdType], + evaluation, + params + ); + } catch (err) { + errors.push(JSON.stringify((err as Error).message)); + } + }); + + if (errors.length) { + throw errors.join('\n'); + } +} + +/** + * Update row with data from API according to path in header. + * + * @param {Array} headers + * @param {Array} row + * @param {Object} data + * @param {string} group + * @returns {string} + */ +function updateRowWithResultData( + headers: Array, + row: Array, + data: Object, + group: string +) { + row = row.map((cell, index) => { + const exp = new RegExp( + `^${CONFIG.resultNamespace}(?:\\.${group})*${DynamicColumnHeaders.namespaceSeparator}` + ); + + if (exp.test(headers[index])) { + const path = headers[index].split( + DynamicColumnHeaders.namespaceSeparator + )[1]; + + if (path.startsWith('!CUSTOM')) { + const functionName = path.split('.')[1]; + + if (GLOBALCTX && GLOBALCTX[functionName]) { + const columnHeaderHelper = new DynamicColumnHeaders(headers); + + const customParams = columnHeaderHelper.getMappedValues( + row, + functionName, + false + ); + + // Update cell value using custom function + return (GLOBALCTX as any)[functionName](data, customParams); + } + } else { + // Update cell value from result using JPath + return JPath.getValue(path, data); + } + } + + // Leave cell value untouched + return cell; + }); + + return row; +} + +/** + * Dynamically ('lazy') load and return target agent instances. + * This is done to avoid ReferenceErrors on direct access due to wrong file order + * + * @param {string} targetName + * @returns {TargetAgent} + * @throws {Error} + */ +function getTargetAgent(agentName: string) { + if (agentName in targetAgents) { + return targetAgents[agentName]; + } + + const agent = AVAILABLE_AGENTS.find( + (agent) => agent.friendlyName === agentName + ); + + if (!agent) { + throw new Error(`Unknown target agent: '${agentName}'`); + } + + targetAgents[agentName] = agent.getInstance(); + + return targetAgents[agentName]; +} + +/** + * Return the SheetsService instance, initializing it if it does not exist yet. + * + * @returns {!SheetsService} The initialized SheetsService instance + */ +function getSheetsService() { + if (sheetsService === undefined) { + const spreadsheetId = CONFIG.spreadsheetId || undefined; + sheetsService = new SheetsService(spreadsheetId); + } + + return sheetsService; +} diff --git a/src/target-agents/agent.sample.ts b/src/target-agents/agent.sample.ts new file mode 100644 index 0000000..807cae7 --- /dev/null +++ b/src/target-agents/agent.sample.ts @@ -0,0 +1,62 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { TargetAgent } from './base'; + +interface Parameters { + token: string; // required + advertiserId?: string; // optional +} + +export class Sample extends TargetAgent { + static friendlyName = 'Sample'; + requiredParameters: Array = ['token']; + + /** + * Process entity based on evaluation. + * + * @param {string} identifier + * @param {string} type + * @param {boolean} evaluation + * @param {Parameters} params Additional parameters + */ + process( + identifier: string, + type: string, + evaluation: boolean, + params: Parameters + ) { + // Check for missing parameters + this.ensureRequiredParameters(params); + } + + /** + * Check if supposed entity status matches its actual live status. + * + * @param {string} identifier + * @param {string} type + * @param {boolean} evaluation + * @param {Parameters} params Additional parameters + * @throws {Error} + */ + validate( + identifier: string, + type: string, + evaluation: boolean, + params: Parameters + ) {} +} diff --git a/src/target-agents/base.ts b/src/target-agents/base.ts new file mode 100644 index 0000000..2726c5b --- /dev/null +++ b/src/target-agents/base.ts @@ -0,0 +1,84 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ApiHelper } from '../helpers/api'; + +export class TargetAgent extends ApiHelper { + public static friendlyName: string = ''; + protected requiredParameters: Array = []; + static instance: TargetAgent; + + protected constructor() { + super(); + } + + process( + identifier: string, + type: string, + evaluation: boolean, + params: Object + ) {} + + validate( + identifier: string, + type: string, + evaluation: boolean, + params: Object + ) {} + + /** + * Find missing required parameters exist in object. + * + * @param {!Object} params + * @returns {string} + */ + private findMissingRequiredParameter(params: Object) { + const keys = Object.keys(params); + + return this.requiredParameters.find((param) => !keys.includes(param)); + } + + /** + * Ensure all required parameters exist in object. + * + * @param {!Object} params + * @throws {Error} + */ + protected ensureRequiredParameters(params: Object) { + // Check for missing parameters + const missingParameter = this.findMissingRequiredParameter( + params as Object + ); + + if (missingParameter) { + throw new Error(`Missing parameter: '${missingParameter}'`); + } + } + + /** + * Get agent singleton instance. + * + * @returns {TargetAgent} + */ + public static getInstance() { + if (!this.instance) { + this.instance = new this(); + } + + return this.instance; + } +} diff --git a/src/target-agents/dv360.ts b/src/target-agents/dv360.ts new file mode 100644 index 0000000..9706b90 --- /dev/null +++ b/src/target-agents/dv360.ts @@ -0,0 +1,282 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Auth } from '../helpers/auth'; +import { TargetAgent } from './base'; + +enum DV360_ENTITY_STATUS { + ACTIVE = 'ENTITY_STATUS_ACTIVE', + PAUSED = 'ENTITY_STATUS_PAUSED', +} + +enum DV360_ENTITY_TYPE { + LINE_ITEM = 'LINE_ITEM', + INSERTION_ORDER = 'INSERTION_ORDER', +} + +interface Entity { + entityStatus: DV360_ENTITY_STATUS; +} + +interface Parameters { + advertiserId: string; + serviceAccount?: string; +} + +/** + * DV360 API Wrapper class. Implements DV360 API calls. + */ +export class DV360 extends TargetAgent { + static friendlyName = 'DV360'; + authToken?: string; + baseUrl: string; + requiredParameters = ['id', 'type', 'advertiserId']; + + /** + * Set the DV360 wrapper configuration + */ + constructor() { + super(); + + /** + * DV360 Write API Endpoint Prefix + * See more: https://developers.google.com/display-video/api/reference/rest + */ + this.baseUrl = 'https://displayvideo.googleapis.com/v1'; + } + + /** + * Process entity based on evaluation. + * + * @param {string} identifier + * @param {DV360_ENTITY_TYPE} type + * @param {boolean} evaluation + * @param {Parameters} params Additional parameters + */ + process( + identifier: string, + type: DV360_ENTITY_TYPE, + evaluation: boolean, + params: Parameters + ) { + // Check for missing parameters + this.ensureRequiredParameters(params); + + const auth = new Auth(params.serviceAccount ?? undefined); + this.authToken = auth.getAuthToken(); + + console.log('Switching', identifier, type, evaluation); + + if (type === DV360_ENTITY_TYPE.LINE_ITEM) { + this.switchLIStatus(params.advertiserId, identifier, evaluation); + } else if (type === DV360_ENTITY_TYPE.INSERTION_ORDER) { + this.switchIOStatus(params.advertiserId, identifier, evaluation); + } + } + + /** + * Check if supposed entity status matches its actual live status. + * + * @param {string} identifier + * @param {DV360_ENTITY_TYPE} type + * @param {boolean} evaluation + * @param {Parameters} params Additional parameters + * @throws {Error} + */ + validate( + identifier: string, + type: DV360_ENTITY_TYPE, + evaluation: boolean, + params: Parameters + ) { + // Check for missing parameters + this.ensureRequiredParameters(params); + + const auth = new Auth(params.serviceAccount ?? undefined); + this.authToken = auth.getAuthToken(); + + let status; + + if (type === DV360_ENTITY_TYPE.LINE_ITEM) { + status = this.isLIActive(params.advertiserId, identifier); + } else if (type === DV360_ENTITY_TYPE.INSERTION_ORDER) { + status = this.isIOActive(params.advertiserId, identifier); + } + + if (evaluation !== status) { + throw Error( + `Status for ${identifier} (${type}) should be ${evaluation} but is ${status}` + ); + } + } + + /** + * Make an HTTP API request to the DV360 API. + * + * @param {string} url - API endpoint to be requested + * @param {string?} method - HTTP method, e.g. GET, PATCH, etc. + * @param {Object|undefined} payload - What should be updated + * @returns {JSON} Result of the operation + */ + private fetchUrl(url: string, method = 'get', payload?: Object | undefined) { + const headers = { + Authorization: `Bearer ${this.authToken}`, + Accept: '*/*', + }; + + return this.callApi(url, headers, undefined, payload, method); + } + + /** + * Change DV360 entity status (Active/Paused) for the specified ID. + * See more: https://developers.google.com/display-video/api/reference/rest/v1/advertisers.lineItems + * See more: https://developers.google.com/display-video/api/reference/rest/v1/advertisers.insertionOrders + * + * @param {string} advertiserId DV360 Advertiser ID + * @param {string} entityId DV360 Line Item/Insertion Order ID + * @param {boolean} turnOn Activate on 'true', deactivate on 'false' + * @param {string} entity + */ + private switchEntityStatus( + advertiserId: string, + entityId: string, + turnOn: boolean, + entity: string + ) { + const newStatus = turnOn + ? DV360_ENTITY_STATUS.ACTIVE + : DV360_ENTITY_STATUS.PAUSED; + const updateMask = { + entityStatus: newStatus, + }; + + const url = `${this.baseUrl}/advertisers/${advertiserId}/${entity}/${entityId}?updateMask=entityStatus`; + + this.fetchUrl(url, 'patch', updateMask); + + Logger.log( + `* [DV360:switch ${entity}]: DONE, ID: ${entityId} new status ${newStatus}` + ); + } + + /** + * Change Insertion Order status (Active/Paused) for the specified IO ID. + * + * @param {string} advertiserId DV360 Advertiser ID + * @param {string} insertionOrderId DV360 Line Item ID + * @param {boolean} turnOn Activate IO on 'true', deactivate on 'false' + */ + private switchIOStatus( + advertiserId: string, + insertionOrderId: string, + turnOn: boolean + ) { + this.switchEntityStatus( + advertiserId, + insertionOrderId, + turnOn, + 'insertionOrders' + ); + } + + /** + * Change Line Item status (Active/Paused) for the specified LI ID. + * + * @param {string} advertiserId - DV360 Advertiser ID + * @param {string} lineItemId - DV360 Line Item ID + * @param {boolean} turnOn - Activate LI on 'true', deactivate on 'false' + */ + private switchLIStatus( + advertiserId: string, + lineItemId: string, + turnOn: boolean + ) { + const newStatus = this.switchEntityStatus( + advertiserId, + lineItemId, + turnOn, + 'lineItems' + ); + } + + /** + * Get DV360 entity for the specified ID. + * See more: https://developers.google.com/display-video/api/reference/rest/v1/advertisers.lineItems + * See more: https://developers.google.com/display-video/api/reference/rest/v1/advertisers.insertionOrders + * + * @param {string} advertiserId DV360 Advertiser ID + * @param {string} entityId DV360 Line Item/Insertion Order ID + * @param {string} entity Entity (e.g. lineItems/insertionOrders), see API refernece + * @returns {Entity} Entity object + */ + private getEntity( + advertiserId: string, + entityId: string, + entity: string + ): Entity { + const url = `${this.baseUrl}/advertisers/${advertiserId}/${entity}/${entityId}`; + + return this.fetchUrl(url) as Entity; + } + + /** + * Get DV360 entity for the specified ID. + * See more: https://developers.google.com/display-video/api/reference/rest/v1/advertisers.lineItems + * See more: https://developers.google.com/display-video/api/reference/rest/v1/advertisers.insertionOrders + * + * @param {number} advertiserId DV360 Advertiser ID + * @param {number} entityId DV360 Line Item/Insertion Order ID + * @param {string} entity Entity (e.g. lineItems/insertionOrders), see API refernece + * @returns {DV360_ENTITY_STATUS} Entity status + */ + private getEntityStatus( + advertiserId: string, + entityId: string, + entity: string + ): DV360_ENTITY_STATUS { + const e = this.getEntity(advertiserId, entityId, entity); + return e.entityStatus; + } + + /** + * Return true if the entity is active else false. + * + * @param {string} advertiserId DV360 Advertiser ID + * @param {string} lineItemId DV360 Line Item ID + * @returns {boolean} + */ + private isLIActive(advertiserId: string, lineItemId: string) { + return ( + DV360_ENTITY_STATUS.ACTIVE == + this.getEntityStatus(advertiserId, lineItemId, 'lineItems') + ); + } + + /** + * Return true if the entity is active else false. + * + * @param {string} advertiserId DV360 Advertiser ID + * @param {string} insertionOrderId DV360 Insertion Order ID + * @returns {boolean} + */ + private isIOActive(advertiserId: string, insertionOrderId: string) { + return ( + DV360_ENTITY_STATUS.ACTIVE == + this.getEntityStatus(advertiserId, insertionOrderId, 'insertionOrders') + ); + } +} diff --git a/src/target-agents/google-ads.ts b/src/target-agents/google-ads.ts new file mode 100644 index 0000000..1c94362 --- /dev/null +++ b/src/target-agents/google-ads.ts @@ -0,0 +1,431 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Auth, ServiceAccount } from '../helpers/auth'; +import { TargetAgent } from './base'; + +export enum GOOGLE_ADS_SELECTOR_TYPE { + AD_ID = 'AD_ID', + AD_LABEL = 'AD_LABEL', + AD_GROUP_ID = 'AD_GROUP_ID', + AD_GROUP_LABEL = 'AD_GROUP_LABEL', +} + +enum GOOGLE_ADS_ENTITY_STATUS { + ENABLED = 'ENABLED', + PAUSED = 'PAUSED', +} + +interface Parameters { + customerId: string; + developerToken: string; + serviceAccount?: ServiceAccount; +} + +export class GoogleAds extends TargetAgent { + static friendlyName = 'Google Ads'; + authToken?: string; + developerToken?: string; + baseUrl: string; + requiredParameters: Array = [ + 'customerId', + 'developerToken', + ]; + + constructor() { + super(); + + this.baseUrl = 'https://googleads.googleapis.com/v13'; + } + + /** + * Process entity based on evaluation. + * + * @param {string} identifier + * @param {GOOGLE_ADS_SELECTOR_TYPE} type + * @param {boolean} evaluation + * @param {Parameters} params Additional parameters + */ + process( + identifier: string, + type: GOOGLE_ADS_SELECTOR_TYPE, + evaluation: boolean, + params: Parameters + ) { + // Check for missing parameters + this.ensureRequiredParameters(params); + + const auth = new Auth(params.serviceAccount ?? undefined); + this.authToken = auth.getAuthToken(); + + this.developerToken = params.developerToken; + + const status = evaluation + ? GOOGLE_ADS_ENTITY_STATUS.ENABLED + : GOOGLE_ADS_ENTITY_STATUS.PAUSED; + + if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_ID) { + console.log(`Updating status of Ad ${identifier} to '${status}'`); + this.updateAdStatusById_( + params.customerId, + identifier.split(',').map((id) => Number(id)), + status + ); + } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_LABEL) { + this.updateAdStatusByLabel_(params.customerId, identifier, status); + } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_GROUP_ID) { + this.updateAdGroupStatusById_( + params.customerId, + identifier.split(',').map((id) => Number(id)), + status + ); + } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_GROUP_LABEL) { + console.log( + `Updating status of AdGroup by label '${identifier}' to '${status}'` + ); + this.updateAdGroupStatusByLabel_(params.customerId, identifier, status); + } + } + + /** + * Check if supposed entity status matches its actual live status. + * + * @param {string} identifier + * @param {GOOGLE_ADS_SELECTOR_TYPE} type + * @param {boolean} evaluation + * @param {Parameters} params Additional parameters + * @throws {Error} + */ + validate( + identifier: string, + type: GOOGLE_ADS_SELECTOR_TYPE, + evaluation: boolean, + params: Parameters + ) { + const auth = new Auth(params.serviceAccount ?? undefined); + this.authToken = auth.getAuthToken(); + + this.developerToken = params.developerToken; + } + + /** + * Update entity status. + * + * @param {string} path + * @param {string} resourceName + * @param {string} status + */ + private updateEntityStatus_( + path: string, + resourceName: string, + status: string + ) { + const payload = { + operations: [ + { + updateMask: 'status', + update: { + resourceName: resourceName, + status: status, + }, + }, + ], + }; + + const res = this.fetchUrl_(path, 'POST', payload); + } + + /** + * Make an HTTP API request to the Ads API. + * + * @param {string} url - API endpoint to be requested + * @param {string?} method - HTTP method, e.g. GET, PATCH, etc. + * @param {Object|undefined} payload - What should be updated + * @param {boolean} forceCache + * @returns {JSON} Result of the operation + */ + private fetchUrl_( + path: string, + method = 'get', + payload: Object, + forceCache: boolean = false + ) { + const headers = { + Authorization: `Bearer ${this.authToken}`, + Accept: '*/*', + 'developer-token': this.developerToken ?? '', + }; + + const url = `${this.baseUrl}/${path}`; + return this.callApi( + url, + headers, + undefined, + payload, + method, + undefined, + forceCache + ); + } + + /** + * Update Ad status by ID(s). + * + * @param {string} customerId + * @param {Array} ids + * @param {string} status + */ + private updateAdStatusById_( + customerId: string, + ids: Array, + status: string + ) { + const ads = this.getAdsById_(customerId, ids); + const path = `customers/${customerId}/adGroupAds:mutate`; + + for (const ad of ads) { + this.updateEntityStatus_(path, ad, status); + } + } + + /** + * Update AdGroup status by ID(s). + * + * @param {string} customerId + * @param {Array} ids + * @param {string} status + */ + private updateAdGroupStatusById_( + customerId: string, + ids: Array, + status: string + ) { + const adGroups = this.getAdGroupsById_(customerId, ids); + const path = `customers/${customerId}/adGroup:mutate`; + + for (const adGroup of adGroups) { + this.updateEntityStatus_(path, adGroup, status); + } + } + + /** + * Update Ad status by label. + * + * @param {string} customerId + * @param {string} label + * @param {string} status + */ + private updateAdStatusByLabel_( + customerId: string, + label: string, + status: string + ) { + const ads = this.getAdsByLabel_(customerId, label); + const path = `customers/${customerId}/adGroupAds:mutate`; + + for (const ad of ads) { + this.updateEntityStatus_(path, ad, status); + } + } + + /** + * Update AdGroup status by label. + * + * @param {string} customerId + * @param {string} label + * @param {string} status + */ + private updateAdGroupStatusByLabel_( + customerId: string, + label: string, + status: string + ) { + const adGroups = this.getAdGroupsByLabel_(customerId, label); + + const path = `customers/${customerId}/adGroups:mutate`; + + for (const adGroup of adGroups) { + this.updateEntityStatus_(path, adGroup, status); + } + } + + /** + * Get Ads status by ID(s). + * + * @param {string} customerId + * @param {Array} ids + * @returns {Array} + */ + getAdsById_(customerId: any, ids: Array): Array { + const query = ` + SELECT + ad_group_ad.ad.id + FROM ad_group_ad + WHERE + ad_group_ad.ad.id IN (${ids.join(',')}) + `; + + const payload = { + query, + }; + + const path = `customers/${customerId}/googleAds:search`; + const res = this.fetchUrl_(path, 'POST', payload, true) as Record< + string, + Array> + >; + + return res.results.map((result: any) => result.adGroupAd.resourceName); + } + + /** + * Get AdGroups status by ID(s). + * + * @param {string} customerId + * @param {Array} ids + * @returns {Array} + */ + private getAdGroupsById_( + customerId: string, + ids: Array + ): Array { + const query = ` + SELECT + ad_group.id + FROM ad_group + WHERE + ad_group.id IN (${ids.join(',')}) + `; + + const payload = { + query, + }; + + const path = `customers/${customerId}/googleAds:search`; + const res = this.fetchUrl_(path, 'POST', payload, true) as any; + + return res.results.map((result: any) => result.adGroup.resourceName); + } + + /** + * Get Ads resource names by labels. + * + * @param {string} customerId + * @param {Array} ids + * @returns {Array} + */ + private getAdsByLabel_(customerId: any, label: string): Array { + const labelResource = this.getAdLabelByName_(customerId, label); + + const query = ` + SELECT + ad_group_ad.ad.id + FROM ad_group_ad + WHERE + ad_group_ad.labels CONTAINS ANY ('${labelResource}') + `; + + const payload = { + query, + }; + + const path = `customers/${customerId}/googleAds:search`; + const res = this.fetchUrl_(path, 'POST', payload, true) as any; + + return res.results.map((result: any) => result.adGroupAd.resourceName); + } + + /** + * Get Ad label by name. + * + * @param {string} customerId + * @param {string} labelName + * @returns {string} + */ + private getAdLabelByName_(customerId: string, labelName: string) { + const query = ` + SELECT + label.resource_name + FROM ad_group_ad_label + WHERE + label.name = '${labelName}' + `; + + const payload = { + query, + }; + + const path = `customers/${customerId}/googleAds:search`; + const res = this.fetchUrl_(path, 'POST', payload, true) as any; + + return res.results[0].label.resourceName; + } + + /** + * Get AdGroups resource names by labels. + * + * @param {string} customerId + * @param {Array} ids + * @returns {Array} + */ + private getAdGroupsByLabel_(customerId: any, label: string): Array { + const labelResource = this.getAdGroupLabelByName_(customerId, label); + + const query = ` + SELECT + ad_group.id + FROM ad_group + WHERE + ad_group.labels CONTAINS ANY ('${labelResource}') + `; + + const payload = { + query, + }; + + const path = `customers/${customerId}/googleAds:search`; + const res = this.fetchUrl_(path, 'POST', payload, true) as any; + + return res.results.map((result: any) => result.adGroup.resourceName); + } + + /** + * Get AdGroup label by name. + * + * @param {string} customerId + * @param {string} labelName + * @returns {string} + */ + private getAdGroupLabelByName_(customerId: string, labelName: string) { + const query = ` + SELECT + label.resource_name + FROM ad_group_label + WHERE + label.name = '${labelName}' + `; + + const payload = { + query, + }; + + const path = `customers/${customerId}/googleAds:search`; + const res = this.fetchUrl_(path, 'POST', payload, true) as any; + + return res.results[0].label.resourceName; + } +} diff --git a/src/target-agents/index.ts b/src/target-agents/index.ts new file mode 100644 index 0000000..cb49b4e --- /dev/null +++ b/src/target-agents/index.ts @@ -0,0 +1,21 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { DV360 } from './dv360'; +import { GoogleAds } from './google-ads'; + +export const AVAILABLE_AGENTS = [DV360, GoogleAds]; diff --git a/src/test/api.test.ts b/src/test/api.test.ts new file mode 100644 index 0000000..bfd3d13 --- /dev/null +++ b/src/test/api.test.ts @@ -0,0 +1,32 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ApiHelper } from '../helpers/api'; + +test('Convert object into correct URL query string', () => { + const params = { + one: 1, + two: 2, + three: [4, 5], + }; + + const helper = new ApiHelper(); + + const query = helper.objectToUrlQuery('', params); + + expect(query).toEqual('?one=1&two=2&three=4&three=5'); +}); diff --git a/src/test/dynamic-column-headers.test.ts b/src/test/dynamic-column-headers.test.ts new file mode 100644 index 0000000..26dacd9 --- /dev/null +++ b/src/test/dynamic-column-headers.test.ts @@ -0,0 +1,148 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { DynamicColumnHeaders } from '../helpers/dynamic-column-headers'; + +const headers = [ + 'One', + 'Two', + 'source:headers.x-api-key', + 'source:headers.x-debug', + 'source:params.lat', + 'source:params.lng', + 'custom:variable', + 'result:data.test', +]; + +const headersMultipleGroups = [ + 'One', + 'Two', + 'source.1:headers.x-api-key', + 'source.2:headers.x-debug', + 'source.1:params.lat', + 'source.2:params.lng', + 'custom:variable', + 'result:data.test', +]; + +const row = ['1', '2', 'abc123', 'hello', '12.34', '45.67']; + +test('Get mapped values for namespace', () => { + const columnHeaderHelper = new DynamicColumnHeaders(headers); + const mappedValues = columnHeaderHelper.getMappedValues(row, 'source'); + + const expected = { + '0': { + headers: { + 'x-api-key': 'abc123', + 'x-debug': 'hello', + }, + params: { + lat: '12.34', + lng: '45.67', + }, + }, + }; + + expect(mappedValues).toStrictEqual(expected); +}); + +test('Get mapped values for namespace without groups included', () => { + const columnHeaderHelper = new DynamicColumnHeaders(headers); + const mappedValues = columnHeaderHelper.getMappedValues(row, 'source', false); + + const expected = { + headers: { + 'x-api-key': 'abc123', + 'x-debug': 'hello', + }, + params: { + lat: '12.34', + lng: '45.67', + }, + }; + + expect(mappedValues).toStrictEqual(expected); +}); + +test('Get mapped values for namespace with multiple groups', () => { + const columnHeaderHelper = new DynamicColumnHeaders(headersMultipleGroups); + const mappedValues = columnHeaderHelper.getMappedValues(row, 'source'); + + const expected = { + '1': { + headers: { + 'x-api-key': 'abc123', + }, + params: { + lat: '12.34', + }, + }, + '2': { + headers: { + 'x-debug': 'hello', + }, + params: { + lng: '45.67', + }, + }, + }; + + expect(mappedValues).toStrictEqual(expected); +}); + +test('Get mapped values for all namespaces and multiple groups', () => { + const columnHeaderHelper = new DynamicColumnHeaders(headersMultipleGroups); + const mappedValues = columnHeaderHelper.getMappedValues(row); + + const expected = { + source: { + '1': { + headers: { + 'x-api-key': 'abc123', + }, + params: { + lat: '12.34', + }, + }, + '2': { + headers: { + 'x-debug': 'hello', + }, + params: { + lng: '45.67', + }, + }, + }, + }; + + expect(mappedValues).toStrictEqual(expected); +}); + +test('Return -1 for first column with namespace for none existing namespace', () => { + const columnHeaderHelper = new DynamicColumnHeaders(headers); + const index = columnHeaderHelper.getFirstColWithNamespace('res'); + + expect(index).toBe(-1); +}); + +test('Find first column with namespace', () => { + const columnHeaderHelper = new DynamicColumnHeaders(headers); + const index = columnHeaderHelper.getFirstColWithNamespace('result'); + + expect(index).toBe(7); +}); diff --git a/src/test/jpath.test.ts b/src/test/jpath.test.ts new file mode 100644 index 0000000..f38622d --- /dev/null +++ b/src/test/jpath.test.ts @@ -0,0 +1,84 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { JPath } from '../helpers/jpath'; + +test('Set value in correct location in empty object', () => { + const path = 'header.api-key'; + const value = 'abc123'; + const obj = {}; + const expected = { + header: { + 'api-key': 'abc123', + }, + }; + + const res = JPath.setValue(obj, path, value); + + expect(res).toEqual(expected); +}); + +test('Set value in correct location with existing properties', () => { + const path = 'header.api-key'; + const value = 'abc123'; + const obj = { + test: 1, + header: { + token: 'secret', + }, + }; + const expected = { + test: 1, + header: { + token: 'secret', + 'api-key': 'abc123', + }, + }; + + const res = JPath.setValue(obj, path, value); + + expect(res).toEqual(expected); +}); + +test('Extract value from JSON', () => { + const data = { + one: { + two: 2, + }, + }; + const res = JPath.getValue('one.two', data); + + expect(res).toBe(2); +}); + +test('Extract aggregated value from JSON (min)', () => { + const data = { + one: [1, 2, 3], + }; + const res = JPath.getValue('one.!MIN', data); + + expect(res).toBe(1); +}); + +test('Extract aggregated value from JSON (max)', () => { + const data = { + one: [1, 2, 3], + }; + const res = JPath.getValue('one.!MAX', data); + + expect(res).toBe(3); +}); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..08ea316 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,103 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2020", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + "lib": ["es2020"], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "es2020", /* Specify what module code is generated. */ + "rootDir": "src/", /* Specify the root folder within your source files. */ + // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + "outDir": "./build", /* Specify an output folder for all emitted files. */ + "removeComments": false, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +} From e87537f73921cead02eb3015ddcce9982c43b402 Mon Sep 17 00:00:00 2001 From: paranerd Date: Mon, 6 Mar 2023 20:00:53 +0100 Subject: [PATCH 15/84] Improved validation log output --- src/index.ts | 30 ++++++--- src/target-agents/agent.sample.ts | 6 +- src/target-agents/base.ts | 4 +- src/target-agents/dv360.ts | 9 +-- src/target-agents/google-ads.ts | 107 ++++++++++++++++++++++++------ 5 files changed, 120 insertions(+), 36 deletions(-) diff --git a/src/index.ts b/src/index.ts index 4be4466..6e9b36d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -121,7 +121,7 @@ function main(mode: MODE) { // Handle every row rows.forEach((row: Array, index: number) => { - console.log(`Processing row ${index + 1}`); + console.log(`Processing row ${index + 1}/${rows.length}`); // Check if update is due let lastUpdate = Number(row[CONFIG.rules.cols.lastUpdate]); @@ -234,7 +234,7 @@ function main(mode: MODE) { * Validate that the Sheet and target entities are in sync. */ function validate() { - const errors: Array = []; + let errors: Array = []; // Get all rows from the sheet const rows = getSheetsService().getRangeData(CONFIG.rules.sheetName, 1, 1); @@ -245,6 +245,7 @@ function validate() { // Handle every row rows.forEach((row: Array, index: number) => { + console.log(`Validating row ${index + 1}/${rows.length}`); try { const evaluation = getSheetsService().getCellValue( CONFIG.rules.sheetName, @@ -256,22 +257,33 @@ function validate() { const params = columnHeaderHelper.getMappedValues( row, - CONFIG.targetNamespace + CONFIG.targetNamespace, + false ); - getTargetAgent(row[CONFIG.rules.cols.targetAgent]).validate( - row[CONFIG.rules.cols.targetId], - row[CONFIG.rules.cols.targetIdType], - evaluation, - params + errors = errors.concat( + getTargetAgent(row[CONFIG.rules.cols.targetAgent]).validate( + row[CONFIG.rules.cols.targetId], + row[CONFIG.rules.cols.targetIdType], + evaluation, + params + ) ); } catch (err) { errors.push(JSON.stringify((err as Error).message)); } }); + // Log results + console.log(); + console.log('### Validation Results ###'); + console.log(`Valid rows: ${rows.length - errors.length}/${rows.length}`); + if (errors.length) { - throw errors.join('\n'); + console.log(); + console.log('Result details:'); + + errors.forEach((error) => console.log(error)); } } diff --git a/src/target-agents/agent.sample.ts b/src/target-agents/agent.sample.ts index 807cae7..f3d755c 100644 --- a/src/target-agents/agent.sample.ts +++ b/src/target-agents/agent.sample.ts @@ -51,12 +51,14 @@ export class Sample extends TargetAgent { * @param {string} type * @param {boolean} evaluation * @param {Parameters} params Additional parameters - * @throws {Error} + * @returns {Array}‚ */ validate( identifier: string, type: string, evaluation: boolean, params: Parameters - ) {} + ) { + return []; + } } diff --git a/src/target-agents/base.ts b/src/target-agents/base.ts index 2726c5b..84c8f08 100644 --- a/src/target-agents/base.ts +++ b/src/target-agents/base.ts @@ -38,7 +38,9 @@ export class TargetAgent extends ApiHelper { type: string, evaluation: boolean, params: Object - ) {} + ): Array { + throw new Error('Method not implemented.'); + } /** * Find missing required parameters exist in object. diff --git a/src/target-agents/dv360.ts b/src/target-agents/dv360.ts index 9706b90..f8f4c2f 100644 --- a/src/target-agents/dv360.ts +++ b/src/target-agents/dv360.ts @@ -79,8 +79,6 @@ export class DV360 extends TargetAgent { const auth = new Auth(params.serviceAccount ?? undefined); this.authToken = auth.getAuthToken(); - console.log('Switching', identifier, type, evaluation); - if (type === DV360_ENTITY_TYPE.LINE_ITEM) { this.switchLIStatus(params.advertiserId, identifier, evaluation); } else if (type === DV360_ENTITY_TYPE.INSERTION_ORDER) { @@ -95,7 +93,7 @@ export class DV360 extends TargetAgent { * @param {DV360_ENTITY_TYPE} type * @param {boolean} evaluation * @param {Parameters} params Additional parameters - * @throws {Error} + * @returns {Array} */ validate( identifier: string, @@ -110,6 +108,7 @@ export class DV360 extends TargetAgent { this.authToken = auth.getAuthToken(); let status; + const errors = []; if (type === DV360_ENTITY_TYPE.LINE_ITEM) { status = this.isLIActive(params.advertiserId, identifier); @@ -118,10 +117,12 @@ export class DV360 extends TargetAgent { } if (evaluation !== status) { - throw Error( + errors.push( `Status for ${identifier} (${type}) should be ${evaluation} but is ${status}` ); } + + return errors; } /** diff --git a/src/target-agents/google-ads.ts b/src/target-agents/google-ads.ts index 1c94362..9704d84 100644 --- a/src/target-agents/google-ads.ts +++ b/src/target-agents/google-ads.ts @@ -36,6 +36,11 @@ interface Parameters { serviceAccount?: ServiceAccount; } +interface Entity { + resourceName: string; + status: GOOGLE_ADS_ENTITY_STATUS; +} + export class GoogleAds extends TargetAgent { static friendlyName = 'Google Ads'; authToken?: string; @@ -101,6 +106,8 @@ export class GoogleAds extends TargetAgent { } } + areAdsEnabled() {} + /** * Check if supposed entity status matches its actual live status. * @@ -108,7 +115,7 @@ export class GoogleAds extends TargetAgent { * @param {GOOGLE_ADS_SELECTOR_TYPE} type * @param {boolean} evaluation * @param {Parameters} params Additional parameters - * @throws {Error} + * @returns {Array} */ validate( identifier: string, @@ -120,26 +127,62 @@ export class GoogleAds extends TargetAgent { this.authToken = auth.getAuthToken(); this.developerToken = params.developerToken; + + const expectedStatus = evaluation + ? GOOGLE_ADS_ENTITY_STATUS.ENABLED + : GOOGLE_ADS_ENTITY_STATUS.PAUSED; + let entitiesToBeChecked: Array = []; + const errors: Array = []; + + if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_ID) { + entitiesToBeChecked = entitiesToBeChecked.concat( + this.getAdsById_( + params.customerId, + identifier.split(',').map((id) => Number(id)) + ) + ); + } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_LABEL) { + entitiesToBeChecked = entitiesToBeChecked.concat( + this.getAdsByLabel_(params.customerId, identifier) + ); + } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_GROUP_ID) { + entitiesToBeChecked = entitiesToBeChecked.concat( + this.getAdGroupsById_( + params.customerId, + identifier.split(',').map((id) => Number(id)) + ) + ); + } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_GROUP_LABEL) { + entitiesToBeChecked = entitiesToBeChecked.concat( + this.getAdGroupsByLabel_(params.customerId, identifier) + ); + } + + for (const entity of entitiesToBeChecked) { + if (entity.status !== expectedStatus) { + errors.push( + `Status for ${identifier} (${type}) should be ${expectedStatus} but is ${entity.status}` + ); + } + } + + return errors; } /** * Update entity status. * * @param {string} path - * @param {string} resourceName + * @param {Entity} entity * @param {string} status */ - private updateEntityStatus_( - path: string, - resourceName: string, - status: string - ) { + private updateEntityStatus_(path: string, entity: Entity, status: string) { const payload = { operations: [ { updateMask: 'status', update: { - resourceName: resourceName, + resourceName: entity.resourceName, status: status, }, }, @@ -270,10 +313,11 @@ export class GoogleAds extends TargetAgent { * @param {Array} ids * @returns {Array} */ - getAdsById_(customerId: any, ids: Array): Array { + getAdsById_(customerId: any, ids: Array): Array { const query = ` SELECT - ad_group_ad.ad.id + ad_group_ad.ad.id, + ad_group_ad.status FROM ad_group_ad WHERE ad_group_ad.ad.id IN (${ids.join(',')}) @@ -289,7 +333,12 @@ export class GoogleAds extends TargetAgent { Array> >; - return res.results.map((result: any) => result.adGroupAd.resourceName); + return res.results.map((result: any) => { + return { + resourceName: result.adGroupAd.resourceName, + status: result.adGroupAd.status, + }; + }); } /** @@ -302,10 +351,11 @@ export class GoogleAds extends TargetAgent { private getAdGroupsById_( customerId: string, ids: Array - ): Array { + ): Array { const query = ` SELECT - ad_group.id + ad_group.id, + ad_group.status FROM ad_group WHERE ad_group.id IN (${ids.join(',')}) @@ -318,7 +368,12 @@ export class GoogleAds extends TargetAgent { const path = `customers/${customerId}/googleAds:search`; const res = this.fetchUrl_(path, 'POST', payload, true) as any; - return res.results.map((result: any) => result.adGroup.resourceName); + return res.results.map((result: any) => { + return { + resourceName: result.adGroup.resourceName, + status: result.adGroup.status, + }; + }); } /** @@ -328,12 +383,13 @@ export class GoogleAds extends TargetAgent { * @param {Array} ids * @returns {Array} */ - private getAdsByLabel_(customerId: any, label: string): Array { + private getAdsByLabel_(customerId: any, label: string): Array { const labelResource = this.getAdLabelByName_(customerId, label); const query = ` SELECT - ad_group_ad.ad.id + ad_group_ad.ad.id, + ad_group_ad.status FROM ad_group_ad WHERE ad_group_ad.labels CONTAINS ANY ('${labelResource}') @@ -346,7 +402,12 @@ export class GoogleAds extends TargetAgent { const path = `customers/${customerId}/googleAds:search`; const res = this.fetchUrl_(path, 'POST', payload, true) as any; - return res.results.map((result: any) => result.adGroupAd.resourceName); + return res.results.map((result: any) => { + return { + resourceName: result.adGroupAd.resourceName, + status: result.adGroupAd.status, + }; + }); } /** @@ -382,12 +443,13 @@ export class GoogleAds extends TargetAgent { * @param {Array} ids * @returns {Array} */ - private getAdGroupsByLabel_(customerId: any, label: string): Array { + private getAdGroupsByLabel_(customerId: any, label: string): Array { const labelResource = this.getAdGroupLabelByName_(customerId, label); const query = ` SELECT - ad_group.id + ad_group.id, + ad_group.status FROM ad_group WHERE ad_group.labels CONTAINS ANY ('${labelResource}') @@ -400,7 +462,12 @@ export class GoogleAds extends TargetAgent { const path = `customers/${customerId}/googleAds:search`; const res = this.fetchUrl_(path, 'POST', payload, true) as any; - return res.results.map((result: any) => result.adGroup.resourceName); + return res.results.map((result: any) => { + return { + resultName: result.adGroup.resourceName, + status: result.adGroup.status, + }; + }); } /** From 640069f917048e755c009c8a36ba8cda01553de9 Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 7 Mar 2023 10:43:41 +0100 Subject: [PATCH 16/84] Added tests and removed debug code --- src/index.ts | 29 ----- src/target-agents/dv360.ts | 101 +++++++-------- src/target-agents/google-ads.ts | 6 +- src/test/dv360.test.ts | 69 +++++++++++ src/test/google-ads.test.ts | 210 ++++++++++++++++++++++++++++++++ 5 files changed, 323 insertions(+), 92 deletions(-) create mode 100644 src/test/dv360.test.ts create mode 100644 src/test/google-ads.test.ts diff --git a/src/index.ts b/src/index.ts index 6e9b36d..24d84c1 100644 --- a/src/index.ts +++ b/src/index.ts @@ -24,35 +24,6 @@ import { Utils } from './helpers/utils'; import { TargetAgent } from './target-agents/base'; import { AVAILABLE_AGENTS } from './target-agents/index'; -// TODO: Remove me! -function teamHasWonInPastXDays(fixtures: any, params: any) { - return fixtures.response.some((item: any) => { - return ( - item.fixture.status.short === 'FT' && - ((item.teams.home.id == params.teamId && - item.teams.home.winner === true) || - (item.teams.away.id == params.teamId && - item.teams.away.winner === true)) && - item.fixture.timestamp * 1000 > params.lookAroundDays - ); - }); -} - -// TODO: Remove me! -function teamIsPlayingWithinNextXDays(fixtures: any, params: any) { - const now = new Date(); - const maxFuture = new Date(now.valueOf()).setDate( - now.getDate() + params.lookAroundDays - ); - - return fixtures.response.some((item: any) => { - return ( - item.fixture.timestamp * 1000 > now.getTime() && - item.fixture.timestamp * 1000 < maxFuture - ); - }); -} - enum MODE { FETCH = 0, SYNC = 1, diff --git a/src/target-agents/dv360.ts b/src/target-agents/dv360.ts index f8f4c2f..4d2ea6e 100644 --- a/src/target-agents/dv360.ts +++ b/src/target-agents/dv360.ts @@ -18,12 +18,12 @@ import { Auth } from '../helpers/auth'; import { TargetAgent } from './base'; -enum DV360_ENTITY_STATUS { +export enum DV360_ENTITY_STATUS { ACTIVE = 'ENTITY_STATUS_ACTIVE', PAUSED = 'ENTITY_STATUS_PAUSED', } -enum DV360_ENTITY_TYPE { +export enum DV360_ENTITY_TYPE { LINE_ITEM = 'LINE_ITEM', INSERTION_ORDER = 'INSERTION_ORDER', } @@ -44,7 +44,7 @@ export class DV360 extends TargetAgent { static friendlyName = 'DV360'; authToken?: string; baseUrl: string; - requiredParameters = ['id', 'type', 'advertiserId']; + requiredParameters = ['advertiserId']; /** * Set the DV360 wrapper configuration @@ -80,9 +80,9 @@ export class DV360 extends TargetAgent { this.authToken = auth.getAuthToken(); if (type === DV360_ENTITY_TYPE.LINE_ITEM) { - this.switchLIStatus(params.advertiserId, identifier, evaluation); + this.switchLIStatus_(params.advertiserId, identifier, evaluation); } else if (type === DV360_ENTITY_TYPE.INSERTION_ORDER) { - this.switchIOStatus(params.advertiserId, identifier, evaluation); + this.switchIOStatus_(params.advertiserId, identifier, evaluation); } } @@ -111,9 +111,9 @@ export class DV360 extends TargetAgent { const errors = []; if (type === DV360_ENTITY_TYPE.LINE_ITEM) { - status = this.isLIActive(params.advertiserId, identifier); + status = this.isLIActive_(params.advertiserId, identifier); } else if (type === DV360_ENTITY_TYPE.INSERTION_ORDER) { - status = this.isIOActive(params.advertiserId, identifier); + status = this.isIOActive_(params.advertiserId, identifier); } if (evaluation !== status) { @@ -133,7 +133,7 @@ export class DV360 extends TargetAgent { * @param {Object|undefined} payload - What should be updated * @returns {JSON} Result of the operation */ - private fetchUrl(url: string, method = 'get', payload?: Object | undefined) { + private fetchUrl_(url: string, method = 'get', payload?: Object | undefined) { const headers = { Authorization: `Bearer ${this.authToken}`, Accept: '*/*', @@ -152,7 +152,7 @@ export class DV360 extends TargetAgent { * @param {boolean} turnOn Activate on 'true', deactivate on 'false' * @param {string} entity */ - private switchEntityStatus( + private switchEntityStatus_( advertiserId: string, entityId: string, turnOn: boolean, @@ -167,50 +167,50 @@ export class DV360 extends TargetAgent { const url = `${this.baseUrl}/advertisers/${advertiserId}/${entity}/${entityId}?updateMask=entityStatus`; - this.fetchUrl(url, 'patch', updateMask); + this.fetchUrl_(url, 'patch', updateMask); - Logger.log( + console.log( `* [DV360:switch ${entity}]: DONE, ID: ${entityId} new status ${newStatus}` ); } /** - * Change Insertion Order status (Active/Paused) for the specified IO ID. + * Change Line Item status (Active/Paused) for the specified LI ID. * - * @param {string} advertiserId DV360 Advertiser ID - * @param {string} insertionOrderId DV360 Line Item ID - * @param {boolean} turnOn Activate IO on 'true', deactivate on 'false' + * @param {string} advertiserId - DV360 Advertiser ID + * @param {string} lineItemId - DV360 Line Item ID + * @param {boolean} turnOn - Activate LI on 'true', deactivate on 'false' */ - private switchIOStatus( + private switchLIStatus_( advertiserId: string, - insertionOrderId: string, + lineItemId: string, turnOn: boolean ) { - this.switchEntityStatus( + const newStatus = this.switchEntityStatus_( advertiserId, - insertionOrderId, + lineItemId, turnOn, - 'insertionOrders' + 'lineItems' ); } /** - * Change Line Item status (Active/Paused) for the specified LI ID. + * Change Insertion Order status (Active/Paused) for the specified IO ID. * - * @param {string} advertiserId - DV360 Advertiser ID - * @param {string} lineItemId - DV360 Line Item ID - * @param {boolean} turnOn - Activate LI on 'true', deactivate on 'false' + * @param {string} advertiserId DV360 Advertiser ID + * @param {string} insertionOrderId DV360 Line Item ID + * @param {boolean} turnOn Activate IO on 'true', deactivate on 'false' */ - private switchLIStatus( + private switchIOStatus_( advertiserId: string, - lineItemId: string, + insertionOrderId: string, turnOn: boolean ) { - const newStatus = this.switchEntityStatus( + this.switchEntityStatus_( advertiserId, - lineItemId, + insertionOrderId, turnOn, - 'lineItems' + 'insertionOrders' ); } @@ -224,33 +224,14 @@ export class DV360 extends TargetAgent { * @param {string} entity Entity (e.g. lineItems/insertionOrders), see API refernece * @returns {Entity} Entity object */ - private getEntity( + private getEntity_( advertiserId: string, entityId: string, entity: string ): Entity { const url = `${this.baseUrl}/advertisers/${advertiserId}/${entity}/${entityId}`; - return this.fetchUrl(url) as Entity; - } - - /** - * Get DV360 entity for the specified ID. - * See more: https://developers.google.com/display-video/api/reference/rest/v1/advertisers.lineItems - * See more: https://developers.google.com/display-video/api/reference/rest/v1/advertisers.insertionOrders - * - * @param {number} advertiserId DV360 Advertiser ID - * @param {number} entityId DV360 Line Item/Insertion Order ID - * @param {string} entity Entity (e.g. lineItems/insertionOrders), see API refernece - * @returns {DV360_ENTITY_STATUS} Entity status - */ - private getEntityStatus( - advertiserId: string, - entityId: string, - entity: string - ): DV360_ENTITY_STATUS { - const e = this.getEntity(advertiserId, entityId, entity); - return e.entityStatus; + return this.fetchUrl_(url) as Entity; } /** @@ -260,11 +241,10 @@ export class DV360 extends TargetAgent { * @param {string} lineItemId DV360 Line Item ID * @returns {boolean} */ - private isLIActive(advertiserId: string, lineItemId: string) { - return ( - DV360_ENTITY_STATUS.ACTIVE == - this.getEntityStatus(advertiserId, lineItemId, 'lineItems') - ); + private isLIActive_(advertiserId: string, lineItemId: string) { + const entity = this.getEntity_(advertiserId, lineItemId, 'lineItems'); + + return DV360_ENTITY_STATUS.ACTIVE == entity.entityStatus; } /** @@ -274,10 +254,13 @@ export class DV360 extends TargetAgent { * @param {string} insertionOrderId DV360 Insertion Order ID * @returns {boolean} */ - private isIOActive(advertiserId: string, insertionOrderId: string) { - return ( - DV360_ENTITY_STATUS.ACTIVE == - this.getEntityStatus(advertiserId, insertionOrderId, 'insertionOrders') + private isIOActive_(advertiserId: string, insertionOrderId: string) { + const entity = this.getEntity_( + advertiserId, + insertionOrderId, + 'insertionOrders' ); + + return DV360_ENTITY_STATUS.ACTIVE == entity.entityStatus; } } diff --git a/src/target-agents/google-ads.ts b/src/target-agents/google-ads.ts index 9704d84..2682f4a 100644 --- a/src/target-agents/google-ads.ts +++ b/src/target-agents/google-ads.ts @@ -25,7 +25,7 @@ export enum GOOGLE_ADS_SELECTOR_TYPE { AD_GROUP_LABEL = 'AD_GROUP_LABEL', } -enum GOOGLE_ADS_ENTITY_STATUS { +export enum GOOGLE_ADS_ENTITY_STATUS { ENABLED = 'ENABLED', PAUSED = 'PAUSED', } @@ -106,8 +106,6 @@ export class GoogleAds extends TargetAgent { } } - areAdsEnabled() {} - /** * Check if supposed entity status matches its actual live status. * @@ -313,7 +311,7 @@ export class GoogleAds extends TargetAgent { * @param {Array} ids * @returns {Array} */ - getAdsById_(customerId: any, ids: Array): Array { + private getAdsById_(customerId: any, ids: Array): Array { const query = ` SELECT ad_group_ad.ad.id, diff --git a/src/test/dv360.test.ts b/src/test/dv360.test.ts new file mode 100644 index 0000000..12c2818 --- /dev/null +++ b/src/test/dv360.test.ts @@ -0,0 +1,69 @@ +import { Auth } from '../helpers/auth'; +import { DV360, DV360_ENTITY_TYPE } from '../target-agents/dv360'; + +describe('DV360 Target Agent', () => { + const params = { + advertiserId: '1', + }; + + describe('process', () => { + beforeEach(() => { + jest.spyOn(Auth.prototype, 'getAuthToken').mockReturnValue(''); + }); + + it('Updates Line Item correctly', () => { + const dv360 = new DV360(); + + // Set up spies + jest.spyOn(DV360.prototype as any, 'fetchUrl_').mockReturnValue(null); + + const switchLIStatusSpy = jest.spyOn( + DV360.prototype as any, + 'switchLIStatus_' + ); + + const switchEntityStatusSpy = jest.spyOn( + DV360.prototype as any, + 'switchEntityStatus_' + ); + + // Call function + dv360.process('1234', DV360_ENTITY_TYPE.LINE_ITEM, true, params); + + // Evaluate + expect(switchLIStatusSpy).toHaveBeenCalledWith('1', '1234', true); + expect(switchEntityStatusSpy).toHaveBeenCalledWith( + '1', + '1234', + true, + 'lineItems' + ); + }); + }); + + describe('validate', () => { + it('Validates Line Items status match correctly', () => { + const dv360 = new DV360(); + + const lineItem = { + entityStatus: 'ENTITY_STATUS_ACTIVE', + }; + + // Set up spies + jest.spyOn(DV360.prototype as any, 'fetchUrl_').mockReturnValue(lineItem); + const isLIActiveSpy = jest.spyOn(DV360.prototype as any, 'isLIActive_'); + const getEntitySpy = jest.spyOn(DV360.prototype as any, 'getEntity_'); + const fetchUrlSpy = jest.spyOn(DV360.prototype as any, 'fetchUrl_'); + + // Call function + dv360.validate('1234', DV360_ENTITY_TYPE.LINE_ITEM, true, params); + + // Evaluate + expect(isLIActiveSpy).toHaveBeenCalledWith('1', '1234'); + expect(getEntitySpy).toHaveBeenCalledWith('1', '1234', 'lineItems'); + expect(fetchUrlSpy).toHaveBeenCalledWith( + 'https://displayvideo.googleapis.com/v1/advertisers/1/lineItems/1234' + ); + }); + }); +}); diff --git a/src/test/google-ads.test.ts b/src/test/google-ads.test.ts new file mode 100644 index 0000000..30a2f9d --- /dev/null +++ b/src/test/google-ads.test.ts @@ -0,0 +1,210 @@ +import { ApiHelper } from '../helpers/api'; +import { Auth } from '../helpers/auth'; +import { + GoogleAds, + GOOGLE_ADS_ENTITY_STATUS, + GOOGLE_ADS_SELECTOR_TYPE, +} from '../target-agents/google-ads'; + +describe('Google Ads Target Agent', () => { + const params = { + customerId: '1', + developerToken: 'token', + }; + + const singleAdByIdRaw = { + results: [ + { + adGroupAd: { + resourceName: 'customers/1/adGroupAds/1111~1234', + status: 'ENABLED', + ad: { + resourceName: 'customers/1/ads/1234', + id: '1234', + }, + }, + }, + ], + fieldMask: 'adGroupAd.ad.id,adGroupAd.status', + }; + + const singleAdById = { + resourceName: 'customers/1/adGroupAds/1111~1234', + status: 'ENABLED', + }; + + const multipleAdsByIdRaw = { + results: [ + { + adGroupAd: { + resourceName: 'customers/1/adGroupAds/1111~1234', + status: 'ENABLED', + ad: { + resourceName: 'customers/1/ads/1234', + id: '1234', + }, + }, + }, + ], + fieldMask: 'adGroupAd.ad.id,adGroupAd.status', + }; + + describe('process', () => { + beforeEach(() => { + jest.spyOn(Auth.prototype, 'getAuthToken').mockReturnValue(''); + }); + + it('Updates Ad correctly with single ID', () => { + const ads = new GoogleAds(); + + // Set up spies + const fetchUrlSpy = jest.spyOn(GoogleAds.prototype as any, 'fetchUrl_'); + + jest + .spyOn(GoogleAds.prototype as any, 'fetchUrl_') + .mockReturnValue(singleAdByIdRaw); + + const updateAdStatusByIdSpy = jest.spyOn( + GoogleAds.prototype as any, + 'updateAdStatusById_' + ); + + const updateEntityStatusSpy = jest.spyOn( + GoogleAds.prototype as any, + 'updateEntityStatus_' + ); + + const getAdsByIdSpy = jest.spyOn( + GoogleAds.prototype as any, + 'getAdsById_' + ); + + // Call function + ads.process('1234', GOOGLE_ADS_SELECTOR_TYPE.AD_ID, true, params); + + // Evaluate + expect(updateAdStatusByIdSpy).toHaveBeenCalledWith( + '1', + [1234], + GOOGLE_ADS_ENTITY_STATUS.ENABLED + ); + + expect(getAdsByIdSpy).toHaveBeenCalledWith('1', [1234]); + + expect(updateEntityStatusSpy).toHaveBeenCalledWith( + 'customers/1/adGroupAds:mutate', + singleAdById, + GOOGLE_ADS_ENTITY_STATUS.ENABLED + ); + + expect(fetchUrlSpy).toHaveBeenCalledTimes(2); + }); + + it('Updates Ads correctly with multiple IDs', () => { + const ads = new GoogleAds(); + + // Set up spies + const fetchUrlSpy = jest.spyOn(GoogleAds.prototype as any, 'fetchUrl_'); + + jest + .spyOn(GoogleAds.prototype as any, 'fetchUrl_') + .mockReturnValue(singleAdByIdRaw); + + const updateAdStatusByIdSpy = jest.spyOn( + GoogleAds.prototype as any, + 'updateAdStatusById_' + ); + + const updateEntityStatusSpy = jest.spyOn( + GoogleAds.prototype as any, + 'updateEntityStatus_' + ); + + const getAdsByIdSpy = jest.spyOn( + GoogleAds.prototype as any, + 'getAdsById_' + ); + + // Call function + ads.process('1234,2345', GOOGLE_ADS_SELECTOR_TYPE.AD_ID, true, params); + + // Evaluate + expect(updateAdStatusByIdSpy).toHaveBeenCalledWith( + '1', + [1234, 2345], + GOOGLE_ADS_ENTITY_STATUS.ENABLED + ); + + expect(getAdsByIdSpy).toHaveBeenCalledWith('1', [1234, 2345]); + + expect(updateEntityStatusSpy).toHaveBeenCalledWith( + 'customers/1/adGroupAds:mutate', + singleAdById, + GOOGLE_ADS_ENTITY_STATUS.ENABLED + ); + + expect(fetchUrlSpy).toHaveBeenCalledTimes(4); + }); + }); + + describe('validate', () => { + it('Validates Ad status match correctly', () => { + const ads = new GoogleAds(); + + // Set up spies + jest + .spyOn(ApiHelper.prototype, 'callApi') + .mockReturnValue(singleAdByIdRaw); + + jest.spyOn(Auth.prototype, 'getAuthToken').mockReturnValue(''); + + const getAdsByIdSpy = jest.spyOn( + GoogleAds.prototype as any, + 'getAdsById_' + ); + + // Call function + const res = ads.validate( + '1234', + GOOGLE_ADS_SELECTOR_TYPE.AD_ID, + true, + params + ); + + // Evaluate + expect(getAdsByIdSpy).toHaveBeenCalled(); + expect(res).toEqual([]); + }); + + it('Validates Ad status mismatch correctly', () => { + const ads = new GoogleAds(); + + // Set up spies + jest + .spyOn(ApiHelper.prototype, 'callApi') + .mockReturnValue(singleAdByIdRaw); + jest.spyOn(Auth.prototype, 'getAuthToken').mockReturnValue(''); + + const getAdsByIdSpy = jest.spyOn( + GoogleAds.prototype as any, + 'getAdsById_' + ); + + // Call function + const res = ads.validate( + '1234', + GOOGLE_ADS_SELECTOR_TYPE.AD_ID, + false, + params + ); + + // Evaluate + const expected = [ + `Status for 1234 (AD_ID) should be PAUSED but is ENABLED`, + ]; + + expect(getAdsByIdSpy).toHaveBeenCalled(); + expect(res).toEqual(expected); + }); + }); +}); From e743cb57a076bb9bebc84c2b41ba3266d7fb6829 Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 7 Mar 2023 11:10:00 +0100 Subject: [PATCH 17/84] Re-added licence header in README --- README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.md b/README.md index 0c2a8fa..07e22aa 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,16 @@ + + [![build](https://img.shields.io/badge/build-passing-brightgreen?style=flat&logo=github)](https://github.com/google/if-this-then-ad) [![GitHub tag (latest SemVer)](https://img.shields.io/github/v/tag/google/if-this-then-ad?label=release&logo=github)](https://github.com/google/if-this-then-ad) [![GitHub last commit](https://img.shields.io/github/last-commit/google/if-this-then-ad)](https://github.com/google/if-this-then-ad/commits) From 698d9608aa9403a9f19a4d770311d186db2ce6cf Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 7 Mar 2023 11:53:10 +0100 Subject: [PATCH 18/84] Updated rollup config to only include licence banner --- rollup.config.mjs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/rollup.config.mjs b/rollup.config.mjs index 01737df..a6a1ccb 100644 --- a/rollup.config.mjs +++ b/rollup.config.mjs @@ -22,11 +22,27 @@ export default { output: { dir: 'dist', format: 'esm', + banner: `/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */`, }, plugins: [ preventTreeShakingPlugin(), nodeResolve({ extensions }), - cleanup({ comments: 'all' }), + cleanup({ comments: 'none' }), ], context: 'this', }; From 3b12886acffb3d194559ae851f27d5a3cd927dc8 Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 7 Mar 2023 12:02:03 +0100 Subject: [PATCH 19/84] Introduced AUTH_MODE --- src/helpers/auth.ts | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/helpers/auth.ts b/src/helpers/auth.ts index 66de169..e1c7973 100644 --- a/src/helpers/auth.ts +++ b/src/helpers/auth.ts @@ -29,21 +29,28 @@ export interface ServiceAccount { user_email: string; } +export enum AUTH_MODE { + USER = 'USER', + SERVICE_ACCOUNT = 'SERVICE_ACCOUNT', +} + /** * This is a wrapper class for handling authentification to DV360 API. * This class can be used to auth also to other Google APIs. */ export class Auth { serviceAccount: ServiceAccount; + authMode: AUTH_MODE; + /** * Set the OAuth configuration. * In order to authorise your DV360 API calls you can: * 1. Use the same Google account as you open the spreadsheet. - * If you chose this approach, you don't need to do pass account. + * For this approach, you don't need to do pass a service account. * 2. Use a service account. - * This is a service account in JSON format from your GCP project. - * How to get a service account credentials from GCP: - * https://cloud.google.com/iam/docs/service-accounts + * This is a service account in JSON format from your GCP project. + * How to get a service account credentials from GCP: + * https://cloud.google.com/iam/docs/service-accounts * * Service account credentials should be specified in the following JSON format: * { @@ -62,20 +69,27 @@ export class Auth { * @param {?Object} account The service account or empty */ constructor(account?: Object) { + this.authMode = account ? AUTH_MODE.SERVICE_ACCOUNT : AUTH_MODE.USER; this.serviceAccount = account as ServiceAccount; } /** - * Get Auth Token for OAuth authorisation for your service account. - * You need this token in order to authorise your DV360 API requests. + * Get Auth Token for OAuth authorization for your service account. + * You need this token in order to authorize API requests. * See more: https://github.com/gsuitedevs/apps-script-oauth2/blob/master/README.md * See more: https://developers.google.com/apps-script/reference/script/script-app#getOAuthToken() * * @returns {string} OAuth Token + * @throws {Error} */ getAuthToken() { - if (!this.serviceAccount || !('private_key' in this.serviceAccount)) { + if (this.authMode === AUTH_MODE.USER) { return ScriptApp.getOAuthToken(); + } else if ( + !this.serviceAccount || + !('private_key' in this.serviceAccount) + ) { + throw new Error('No or invalid service account provided'); } const service = OAuth2.createService('Service Account') From c6e9eda649cd73f4dafa2a58c141c276d44bb292 Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 7 Mar 2023 13:26:08 +0100 Subject: [PATCH 20/84] Sample -> SampleAgent --- src/target-agents/agent.sample.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/target-agents/agent.sample.ts b/src/target-agents/agent.sample.ts index f3d755c..a3d23aa 100644 --- a/src/target-agents/agent.sample.ts +++ b/src/target-agents/agent.sample.ts @@ -22,7 +22,7 @@ interface Parameters { advertiserId?: string; // optional } -export class Sample extends TargetAgent { +export class SampleAgent extends TargetAgent { static friendlyName = 'Sample'; requiredParameters: Array = ['token']; From 314cd07a3a0d7c917105f0fffb4b33d91426cae2 Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 7 Mar 2023 14:17:02 +0100 Subject: [PATCH 21/84] Removed trailing underscore to indicate private properties --- src/helpers/sheets.ts | 6 +-- src/target-agents/dv360.ts | 41 ++++++++++-------- src/target-agents/google-ads.ts | 74 ++++++++++++++++----------------- src/test/dv360.test.ts | 17 ++++---- src/test/google-ads.test.ts | 24 +++++------ 5 files changed, 86 insertions(+), 76 deletions(-) diff --git a/src/helpers/sheets.ts b/src/helpers/sheets.ts index cd3fa6c..3c903b4 100644 --- a/src/helpers/sheets.ts +++ b/src/helpers/sheets.ts @@ -22,7 +22,7 @@ */ export class SheetsService { defaultMode: string; - spreadsheet_: GoogleAppsScript.Spreadsheet.Spreadsheet; + spreadsheet: GoogleAppsScript.Spreadsheet.Spreadsheet; /** * Constructor. @@ -46,7 +46,7 @@ export class SheetsService { } /** @private @const {?SpreadsheetApp.Spreadsheet} */ - this.spreadsheet_ = spreadsheet; + this.spreadsheet = spreadsheet; /** @type {string} */ this.defaultMode = 'FORMULA'; @@ -164,6 +164,6 @@ export class SheetsService { * @return {?SpreadsheetApp.Spreadsheet} The spreadsheet */ getSpreadsheet() { - return this.spreadsheet_; + return this.spreadsheet; } } diff --git a/src/target-agents/dv360.ts b/src/target-agents/dv360.ts index 4d2ea6e..f163d67 100644 --- a/src/target-agents/dv360.ts +++ b/src/target-agents/dv360.ts @@ -80,9 +80,13 @@ export class DV360 extends TargetAgent { this.authToken = auth.getAuthToken(); if (type === DV360_ENTITY_TYPE.LINE_ITEM) { - this.switchLIStatus_(params.advertiserId, identifier, evaluation); + this.switchLineItemStatus(params.advertiserId, identifier, evaluation); } else if (type === DV360_ENTITY_TYPE.INSERTION_ORDER) { - this.switchIOStatus_(params.advertiserId, identifier, evaluation); + this.switchInsertionOrderStatus( + params.advertiserId, + identifier, + evaluation + ); } } @@ -111,9 +115,9 @@ export class DV360 extends TargetAgent { const errors = []; if (type === DV360_ENTITY_TYPE.LINE_ITEM) { - status = this.isLIActive_(params.advertiserId, identifier); + status = this.isLineItemActive(params.advertiserId, identifier); } else if (type === DV360_ENTITY_TYPE.INSERTION_ORDER) { - status = this.isIOActive_(params.advertiserId, identifier); + status = this.isInsertionOrderActive(params.advertiserId, identifier); } if (evaluation !== status) { @@ -133,7 +137,7 @@ export class DV360 extends TargetAgent { * @param {Object|undefined} payload - What should be updated * @returns {JSON} Result of the operation */ - private fetchUrl_(url: string, method = 'get', payload?: Object | undefined) { + private fetchUrl(url: string, method = 'get', payload?: Object | undefined) { const headers = { Authorization: `Bearer ${this.authToken}`, Accept: '*/*', @@ -152,7 +156,7 @@ export class DV360 extends TargetAgent { * @param {boolean} turnOn Activate on 'true', deactivate on 'false' * @param {string} entity */ - private switchEntityStatus_( + private switchEntityStatus( advertiserId: string, entityId: string, turnOn: boolean, @@ -167,7 +171,7 @@ export class DV360 extends TargetAgent { const url = `${this.baseUrl}/advertisers/${advertiserId}/${entity}/${entityId}?updateMask=entityStatus`; - this.fetchUrl_(url, 'patch', updateMask); + this.fetchUrl(url, 'patch', updateMask); console.log( `* [DV360:switch ${entity}]: DONE, ID: ${entityId} new status ${newStatus}` @@ -181,12 +185,12 @@ export class DV360 extends TargetAgent { * @param {string} lineItemId - DV360 Line Item ID * @param {boolean} turnOn - Activate LI on 'true', deactivate on 'false' */ - private switchLIStatus_( + private switchLineItemStatus( advertiserId: string, lineItemId: string, turnOn: boolean ) { - const newStatus = this.switchEntityStatus_( + const newStatus = this.switchEntityStatus( advertiserId, lineItemId, turnOn, @@ -201,12 +205,12 @@ export class DV360 extends TargetAgent { * @param {string} insertionOrderId DV360 Line Item ID * @param {boolean} turnOn Activate IO on 'true', deactivate on 'false' */ - private switchIOStatus_( + private switchInsertionOrderStatus( advertiserId: string, insertionOrderId: string, turnOn: boolean ) { - this.switchEntityStatus_( + this.switchEntityStatus( advertiserId, insertionOrderId, turnOn, @@ -224,14 +228,14 @@ export class DV360 extends TargetAgent { * @param {string} entity Entity (e.g. lineItems/insertionOrders), see API refernece * @returns {Entity} Entity object */ - private getEntity_( + private getEntity( advertiserId: string, entityId: string, entity: string ): Entity { const url = `${this.baseUrl}/advertisers/${advertiserId}/${entity}/${entityId}`; - return this.fetchUrl_(url) as Entity; + return this.fetchUrl(url) as Entity; } /** @@ -241,8 +245,8 @@ export class DV360 extends TargetAgent { * @param {string} lineItemId DV360 Line Item ID * @returns {boolean} */ - private isLIActive_(advertiserId: string, lineItemId: string) { - const entity = this.getEntity_(advertiserId, lineItemId, 'lineItems'); + private isLineItemActive(advertiserId: string, lineItemId: string) { + const entity = this.getEntity(advertiserId, lineItemId, 'lineItems'); return DV360_ENTITY_STATUS.ACTIVE == entity.entityStatus; } @@ -254,8 +258,11 @@ export class DV360 extends TargetAgent { * @param {string} insertionOrderId DV360 Insertion Order ID * @returns {boolean} */ - private isIOActive_(advertiserId: string, insertionOrderId: string) { - const entity = this.getEntity_( + private isInsertionOrderActive( + advertiserId: string, + insertionOrderId: string + ) { + const entity = this.getEntity( advertiserId, insertionOrderId, 'insertionOrders' diff --git a/src/target-agents/google-ads.ts b/src/target-agents/google-ads.ts index 2682f4a..1f1c34f 100644 --- a/src/target-agents/google-ads.ts +++ b/src/target-agents/google-ads.ts @@ -85,15 +85,15 @@ export class GoogleAds extends TargetAgent { if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_ID) { console.log(`Updating status of Ad ${identifier} to '${status}'`); - this.updateAdStatusById_( + this.updateAdStatusById( params.customerId, identifier.split(',').map((id) => Number(id)), status ); } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_LABEL) { - this.updateAdStatusByLabel_(params.customerId, identifier, status); + this.updateAdStatusByLabel(params.customerId, identifier, status); } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_GROUP_ID) { - this.updateAdGroupStatusById_( + this.updateAdGroupStatusById( params.customerId, identifier.split(',').map((id) => Number(id)), status @@ -102,7 +102,7 @@ export class GoogleAds extends TargetAgent { console.log( `Updating status of AdGroup by label '${identifier}' to '${status}'` ); - this.updateAdGroupStatusByLabel_(params.customerId, identifier, status); + this.updateAdGroupStatusByLabel(params.customerId, identifier, status); } } @@ -134,25 +134,25 @@ export class GoogleAds extends TargetAgent { if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_ID) { entitiesToBeChecked = entitiesToBeChecked.concat( - this.getAdsById_( + this.getAdsById( params.customerId, identifier.split(',').map((id) => Number(id)) ) ); } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_LABEL) { entitiesToBeChecked = entitiesToBeChecked.concat( - this.getAdsByLabel_(params.customerId, identifier) + this.getAdsByLabel(params.customerId, identifier) ); } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_GROUP_ID) { entitiesToBeChecked = entitiesToBeChecked.concat( - this.getAdGroupsById_( + this.getAdGroupsById( params.customerId, identifier.split(',').map((id) => Number(id)) ) ); } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_GROUP_LABEL) { entitiesToBeChecked = entitiesToBeChecked.concat( - this.getAdGroupsByLabel_(params.customerId, identifier) + this.getAdGroupsByLabel(params.customerId, identifier) ); } @@ -174,7 +174,7 @@ export class GoogleAds extends TargetAgent { * @param {Entity} entity * @param {string} status */ - private updateEntityStatus_(path: string, entity: Entity, status: string) { + private updateEntityStatus(path: string, entity: Entity, status: string) { const payload = { operations: [ { @@ -187,7 +187,7 @@ export class GoogleAds extends TargetAgent { ], }; - const res = this.fetchUrl_(path, 'POST', payload); + const res = this.fetchUrl(path, 'POST', payload); } /** @@ -199,7 +199,7 @@ export class GoogleAds extends TargetAgent { * @param {boolean} forceCache * @returns {JSON} Result of the operation */ - private fetchUrl_( + private fetchUrl( path: string, method = 'get', payload: Object, @@ -230,16 +230,16 @@ export class GoogleAds extends TargetAgent { * @param {Array} ids * @param {string} status */ - private updateAdStatusById_( + private updateAdStatusById( customerId: string, ids: Array, status: string ) { - const ads = this.getAdsById_(customerId, ids); + const ads = this.getAdsById(customerId, ids); const path = `customers/${customerId}/adGroupAds:mutate`; for (const ad of ads) { - this.updateEntityStatus_(path, ad, status); + this.updateEntityStatus(path, ad, status); } } @@ -250,16 +250,16 @@ export class GoogleAds extends TargetAgent { * @param {Array} ids * @param {string} status */ - private updateAdGroupStatusById_( + private updateAdGroupStatusById( customerId: string, ids: Array, status: string ) { - const adGroups = this.getAdGroupsById_(customerId, ids); + const adGroups = this.getAdGroupsById(customerId, ids); const path = `customers/${customerId}/adGroup:mutate`; for (const adGroup of adGroups) { - this.updateEntityStatus_(path, adGroup, status); + this.updateEntityStatus(path, adGroup, status); } } @@ -270,16 +270,16 @@ export class GoogleAds extends TargetAgent { * @param {string} label * @param {string} status */ - private updateAdStatusByLabel_( + private updateAdStatusByLabel( customerId: string, label: string, status: string ) { - const ads = this.getAdsByLabel_(customerId, label); + const ads = this.getAdsByLabel(customerId, label); const path = `customers/${customerId}/adGroupAds:mutate`; for (const ad of ads) { - this.updateEntityStatus_(path, ad, status); + this.updateEntityStatus(path, ad, status); } } @@ -290,17 +290,17 @@ export class GoogleAds extends TargetAgent { * @param {string} label * @param {string} status */ - private updateAdGroupStatusByLabel_( + private updateAdGroupStatusByLabel( customerId: string, label: string, status: string ) { - const adGroups = this.getAdGroupsByLabel_(customerId, label); + const adGroups = this.getAdGroupsByLabel(customerId, label); const path = `customers/${customerId}/adGroups:mutate`; for (const adGroup of adGroups) { - this.updateEntityStatus_(path, adGroup, status); + this.updateEntityStatus(path, adGroup, status); } } @@ -311,7 +311,7 @@ export class GoogleAds extends TargetAgent { * @param {Array} ids * @returns {Array} */ - private getAdsById_(customerId: any, ids: Array): Array { + private getAdsById(customerId: any, ids: Array): Array { const query = ` SELECT ad_group_ad.ad.id, @@ -326,7 +326,7 @@ export class GoogleAds extends TargetAgent { }; const path = `customers/${customerId}/googleAds:search`; - const res = this.fetchUrl_(path, 'POST', payload, true) as Record< + const res = this.fetchUrl(path, 'POST', payload, true) as Record< string, Array> >; @@ -346,7 +346,7 @@ export class GoogleAds extends TargetAgent { * @param {Array} ids * @returns {Array} */ - private getAdGroupsById_( + private getAdGroupsById( customerId: string, ids: Array ): Array { @@ -364,7 +364,7 @@ export class GoogleAds extends TargetAgent { }; const path = `customers/${customerId}/googleAds:search`; - const res = this.fetchUrl_(path, 'POST', payload, true) as any; + const res = this.fetchUrl(path, 'POST', payload, true) as any; return res.results.map((result: any) => { return { @@ -381,8 +381,8 @@ export class GoogleAds extends TargetAgent { * @param {Array} ids * @returns {Array} */ - private getAdsByLabel_(customerId: any, label: string): Array { - const labelResource = this.getAdLabelByName_(customerId, label); + private getAdsByLabel(customerId: any, label: string): Array { + const labelResource = this.getAdLabelByName(customerId, label); const query = ` SELECT @@ -398,7 +398,7 @@ export class GoogleAds extends TargetAgent { }; const path = `customers/${customerId}/googleAds:search`; - const res = this.fetchUrl_(path, 'POST', payload, true) as any; + const res = this.fetchUrl(path, 'POST', payload, true) as any; return res.results.map((result: any) => { return { @@ -415,7 +415,7 @@ export class GoogleAds extends TargetAgent { * @param {string} labelName * @returns {string} */ - private getAdLabelByName_(customerId: string, labelName: string) { + private getAdLabelByName(customerId: string, labelName: string) { const query = ` SELECT label.resource_name @@ -429,7 +429,7 @@ export class GoogleAds extends TargetAgent { }; const path = `customers/${customerId}/googleAds:search`; - const res = this.fetchUrl_(path, 'POST', payload, true) as any; + const res = this.fetchUrl(path, 'POST', payload, true) as any; return res.results[0].label.resourceName; } @@ -441,8 +441,8 @@ export class GoogleAds extends TargetAgent { * @param {Array} ids * @returns {Array} */ - private getAdGroupsByLabel_(customerId: any, label: string): Array { - const labelResource = this.getAdGroupLabelByName_(customerId, label); + private getAdGroupsByLabel(customerId: any, label: string): Array { + const labelResource = this.getAdGroupLabelByName(customerId, label); const query = ` SELECT @@ -458,7 +458,7 @@ export class GoogleAds extends TargetAgent { }; const path = `customers/${customerId}/googleAds:search`; - const res = this.fetchUrl_(path, 'POST', payload, true) as any; + const res = this.fetchUrl(path, 'POST', payload, true) as any; return res.results.map((result: any) => { return { @@ -475,7 +475,7 @@ export class GoogleAds extends TargetAgent { * @param {string} labelName * @returns {string} */ - private getAdGroupLabelByName_(customerId: string, labelName: string) { + private getAdGroupLabelByName(customerId: string, labelName: string) { const query = ` SELECT label.resource_name @@ -489,7 +489,7 @@ export class GoogleAds extends TargetAgent { }; const path = `customers/${customerId}/googleAds:search`; - const res = this.fetchUrl_(path, 'POST', payload, true) as any; + const res = this.fetchUrl(path, 'POST', payload, true) as any; return res.results[0].label.resourceName; } diff --git a/src/test/dv360.test.ts b/src/test/dv360.test.ts index 12c2818..09115ce 100644 --- a/src/test/dv360.test.ts +++ b/src/test/dv360.test.ts @@ -15,16 +15,16 @@ describe('DV360 Target Agent', () => { const dv360 = new DV360(); // Set up spies - jest.spyOn(DV360.prototype as any, 'fetchUrl_').mockReturnValue(null); + jest.spyOn(DV360.prototype as any, 'fetchUrl').mockReturnValue(null); const switchLIStatusSpy = jest.spyOn( DV360.prototype as any, - 'switchLIStatus_' + 'switchLineItemStatus' ); const switchEntityStatusSpy = jest.spyOn( DV360.prototype as any, - 'switchEntityStatus_' + 'switchEntityStatus' ); // Call function @@ -50,10 +50,13 @@ describe('DV360 Target Agent', () => { }; // Set up spies - jest.spyOn(DV360.prototype as any, 'fetchUrl_').mockReturnValue(lineItem); - const isLIActiveSpy = jest.spyOn(DV360.prototype as any, 'isLIActive_'); - const getEntitySpy = jest.spyOn(DV360.prototype as any, 'getEntity_'); - const fetchUrlSpy = jest.spyOn(DV360.prototype as any, 'fetchUrl_'); + jest.spyOn(DV360.prototype as any, 'fetchUrl').mockReturnValue(lineItem); + const isLIActiveSpy = jest.spyOn( + DV360.prototype as any, + 'isLineItemActive' + ); + const getEntitySpy = jest.spyOn(DV360.prototype as any, 'getEntity'); + const fetchUrlSpy = jest.spyOn(DV360.prototype as any, 'fetchUrl'); // Call function dv360.validate('1234', DV360_ENTITY_TYPE.LINE_ITEM, true, params); diff --git a/src/test/google-ads.test.ts b/src/test/google-ads.test.ts index 30a2f9d..72b6e89 100644 --- a/src/test/google-ads.test.ts +++ b/src/test/google-ads.test.ts @@ -58,25 +58,25 @@ describe('Google Ads Target Agent', () => { const ads = new GoogleAds(); // Set up spies - const fetchUrlSpy = jest.spyOn(GoogleAds.prototype as any, 'fetchUrl_'); + const fetchUrlSpy = jest.spyOn(GoogleAds.prototype as any, 'fetchUrl'); jest - .spyOn(GoogleAds.prototype as any, 'fetchUrl_') + .spyOn(GoogleAds.prototype as any, 'fetchUrl') .mockReturnValue(singleAdByIdRaw); const updateAdStatusByIdSpy = jest.spyOn( GoogleAds.prototype as any, - 'updateAdStatusById_' + 'updateAdStatusById' ); const updateEntityStatusSpy = jest.spyOn( GoogleAds.prototype as any, - 'updateEntityStatus_' + 'updateEntityStatus' ); const getAdsByIdSpy = jest.spyOn( GoogleAds.prototype as any, - 'getAdsById_' + 'getAdsById' ); // Call function @@ -104,25 +104,25 @@ describe('Google Ads Target Agent', () => { const ads = new GoogleAds(); // Set up spies - const fetchUrlSpy = jest.spyOn(GoogleAds.prototype as any, 'fetchUrl_'); + const fetchUrlSpy = jest.spyOn(GoogleAds.prototype as any, 'fetchUrl'); jest - .spyOn(GoogleAds.prototype as any, 'fetchUrl_') + .spyOn(GoogleAds.prototype as any, 'fetchUrl') .mockReturnValue(singleAdByIdRaw); const updateAdStatusByIdSpy = jest.spyOn( GoogleAds.prototype as any, - 'updateAdStatusById_' + 'updateAdStatusById' ); const updateEntityStatusSpy = jest.spyOn( GoogleAds.prototype as any, - 'updateEntityStatus_' + 'updateEntityStatus' ); const getAdsByIdSpy = jest.spyOn( GoogleAds.prototype as any, - 'getAdsById_' + 'getAdsById' ); // Call function @@ -160,7 +160,7 @@ describe('Google Ads Target Agent', () => { const getAdsByIdSpy = jest.spyOn( GoogleAds.prototype as any, - 'getAdsById_' + 'getAdsById' ); // Call function @@ -187,7 +187,7 @@ describe('Google Ads Target Agent', () => { const getAdsByIdSpy = jest.spyOn( GoogleAds.prototype as any, - 'getAdsById_' + 'getAdsById' ); // Call function From 318c592e6ecacd4ffe9d64d88da2028e5bc41365 Mon Sep 17 00:00:00 2001 From: paranerd Date: Wed, 8 Mar 2023 14:35:17 +0100 Subject: [PATCH 22/84] Addressing PR comments --- src/external/ads-script/agent.js | 72 ++++++++--------- src/external/ads-script/api.js | 111 -------------------------- src/external/ads-script/base.js | 65 --------------- src/external/ads-script/index.js | 14 +--- src/helpers/api.ts | 1 + src/helpers/dynamic-column-headers.ts | 10 +-- src/helpers/jpath.ts | 2 +- src/index.ts | 18 ++--- src/target-agents/agent.sample.ts | 2 +- src/target-agents/base.ts | 4 +- src/target-agents/dv360.ts | 26 +++--- src/target-agents/google-ads.ts | 49 ++++++------ src/test/google-ads.test.ts | 6 +- 13 files changed, 96 insertions(+), 284 deletions(-) delete mode 100644 src/external/ads-script/api.js delete mode 100644 src/external/ads-script/base.js diff --git a/src/external/ads-script/agent.js b/src/external/ads-script/agent.js index 239e93e..8c482b9 100644 --- a/src/external/ads-script/agent.js +++ b/src/external/ads-script/agent.js @@ -15,41 +15,42 @@ * limitations under the License. */ -class GoogleAds extends TargetAgent { - name = 'Google Ads'; - requiredParameters = ['id', 'type']; - - /** - * Constructor. - */ - constructor() { - super(); - } - +class GoogleAds { /** * Process entity based on evaluation. * - * @param {Object} params + * @param {string} identifier + * @param {string} type * @param {boolean} evaluation */ - process(params, evaluation) { - // Check for missing parameters - /*this.ensureRequiredParameters(params); - - const condition = `Name = '${params.identifier}'`; + process(identifier, type, evaluation) { + /*const condition = `Name = '${params.identifier}'`; this.switchAdGroupStatus(condition, evaluation);*/ + let ads = []; + let adGroups = []; + + if (type === 'AD_ID') { + const adIds = identifier + .split(';') + .map((pair) => pair.split(',').map((id) => parseInt(id, 10))); + ads = ads.concat(this.getAdsByIds(adIds)); + } else if (type === 'AD_LABEL') { + ads = ads.concat(getAdsByLabel(identifier)); + } else if (type === 'AD_GROUP_ID') { + const adGroupIds = identifier.split(',').map((id) => Number(id)); + adGroups = adGroups.concat(this.getAdGroupsByIds(adGroupIds)); + } else if (type === 'AD_GROUP_LABEL') { + adGroups = adGroups.concat(getAdGroupsByLabel(identifier)); + } + // Enable/pause the Ad Groups - const adGroupIds = row[CONFIG.feed.columns.adGroupIds] - ? row[CONFIG.feed.columns.adGroupIds] - .split(';') - .map((id) => parseInt(id, 10)) - : []; + /*const adGroupIds = identifier.split(';').map((id) => parseInt(id, 10)); const adGroupsByIds = getAdGroupsByIds(adGroupIds); const adGroupsByLabel = getAdGroupsByLabel( row[CONFIG.feed.columns.adGroupLabel] ); - const adGroups = [...adGroupsByIds, ...adGroupsByLabel]; + const adGroups = [...adGroupsByIds, ...adGroupsByLabel];*/ adGroups.forEach((adGroup) => { if (enable && !adGroup.isEnabled()) { Logger.log(`Enabling Ad Group ${adGroup.getId()}`); @@ -64,14 +65,14 @@ class GoogleAds extends TargetAgent { } }); // Enable/pause the Ads - const adIds = row[CONFIG.feed.columns.adIds] + /*const adIds = row[CONFIG.feed.columns.adIds] ? row[CONFIG.feed.columns.adIds] .split(';') .map((pair) => pair.split(',').map((id) => parseInt(id, 10))) : []; const adsByIds = getAdsByIds(adIds); const adsByLabel = getAdsByLabel(row[CONFIG.feed.columns.adLabel]); - const ads = [...adsByIds, ...adsByLabel]; + const ads = [...adsByIds, ...adsByLabel];*/ ads.forEach((ad) => { if (enable && !ad.isEnabled()) { Logger.log(`Enabling Ad ${ad.getId()}`); @@ -90,11 +91,12 @@ class GoogleAds extends TargetAgent { /** * Check if supposed entity status matches its actual live status. * - * @param {Object} params + * @param {string} identifier + * @param {string} type * @param {boolean} evaluation - * @throws {Error} + * @returns {string[]} */ - validate(params, evaluation) {} + validate(identifier, type, evaluation) {} /** * Enable or pause an AdGroup by its name @@ -120,8 +122,6 @@ class GoogleAds extends TargetAgent { } } - getAdGroupsByName(adGroupName) {} - switchEntityStatus(entity, enable) { if (enable && !entity.isEnabled()) { entity.enable(); @@ -134,8 +134,8 @@ class GoogleAds extends TargetAgent { * Get Ads based on their IDs. * An ID is a pair of [Ad Group ID, Ad ID] * - * @param {Array>} - * @returns {Array} + * @param {string[][]} + * @returns {Ad[]} */ getAdsByIds(ids) { const ads = []; @@ -151,8 +151,8 @@ class GoogleAds extends TargetAgent { /** * Get Ad Groups based on their IDs. * - * @param {Array} - * @returns {Array} + * @param {string[]} + * @returns {AdGroup[]} */ getAdGroupsByIds(ids) { const adGroups = []; @@ -169,7 +169,7 @@ class GoogleAds extends TargetAgent { * Get Ads by their label. * * @param {string} label - * @returns {Array} + * @returns {Ad[]} */ getAdsByLabel(label) { const ads = []; @@ -194,7 +194,7 @@ class GoogleAds extends TargetAgent { * Get Ad Groups based on their label. * * @param {string} label - * @returns {Array} + * @returns {AdGroup[]} */ getAdGroupsByLabel(label) { const adGroups = []; diff --git a/src/external/ads-script/api.js b/src/external/ads-script/api.js deleted file mode 100644 index a18897f..0000000 --- a/src/external/ads-script/api.js +++ /dev/null @@ -1,111 +0,0 @@ -/** - * @license - * Copyright 2023 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export class ApiHelper { - cache = {}; - - /** - * Constructor. - */ - constructor() { - this.cache = {}; - } - - /** - * Call API. - * - * @param {string} url - * @param {string} method - * @param {?GoogleAppsScript.URL_Fetch.HttpHeaders} headers - * @param {?Record} queryParams - * @param {?Object} body - * @returns {Object} - */ - callApi( - url, - headers, - queryParams, - body, - method = 'get', - contentType = 'application/json' - ) { - if (queryParams) { - url = `${url}${this.objectToUrlQuery(url, queryParams)}`; - } - - const params = { - headers: headers ?? {}, - method: method, - muteHttpExceptions: true, - contentType: contentType, - }; - - // Add body if any - if (body) { - // Stringify JSON if applicable - if (contentType === 'application/json') { - body = JSON.stringify(body); - } - - params.payload = body; - } - - const cacheKey = `${url}-${JSON.stringify(params)}`; - if (!(cacheKey in this.cache) || !this.cache[cacheKey]) { - const res = UrlFetchApp.fetch(url, params); - - if (200 != res.getResponseCode() && 204 != res.getResponseCode()) { - Logger.log('HTTP code: ' + res.getResponseCode()); - Logger.log('API error: ' + res.getContentText()); - Logger.log('URL: ' + url); - throw new Error(res.getContentText()); - } - - this.cache[cacheKey] = res.getContentText() - ? JSON.parse(res.getContentText()) - : {}; - } - - return this.cache[cacheKey]; - } - - /** - * Convert object into URL query string. - * - * @param {string} url - * @param {Object|null} obj - * @returns {string} - */ - objectToUrlQuery(url, obj) { - if (!obj || (obj && Object.keys(obj).length === 0)) return ''; - - const prefix = url.includes('?') ? '&' : '?'; - - return prefix.concat( - Object.keys(obj) - .map((key) => { - if (obj[key] instanceof Array) { - const joined = obj[key].join(`&${key}=`); - return joined.length ? `${key}=${joined}` : null; - } - return `${key}=${obj[key]}`; - }) - .filter((param) => param) - .join('&') - ); - } -} diff --git a/src/external/ads-script/base.js b/src/external/ads-script/base.js deleted file mode 100644 index 6bc04a5..0000000 --- a/src/external/ads-script/base.js +++ /dev/null @@ -1,65 +0,0 @@ -/** - * @license - * Copyright 2023 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -class TargetAgent extends ApiHelper { - name = ''; - requiredParameters = []; - static instance; - - constructor() { - super(); - } - - process(params, evaluation) {} - - validate(params, evaluation) {} - - /** - * Find missing required parameters exist in object. - * - * @param {!Object} params - * @returns {string} - */ - findMissingRequiredParameter(params) { - const keys = Object.keys(params); - - return this.requiredParameters.find((param) => !keys.includes(param)); - } - - /** - * Ensure all required parameters exist in object. - * - * @param {!Object} params - * @throws {Error} - */ - ensureRequiredParameters(params) { - // Check for missing parameters - const missingParameter = !this.findMissingRequiredParameter(params); - - if (missingParameter) { - throw new Error(`Missing parameter: '${missingParameter}'`); - } - } - - static getInstance() { - if (!this.instance) { - this.instance = new this(); - } - - return this.instance; - } -} diff --git a/src/external/ads-script/index.js b/src/external/ads-script/index.js index 60c76c2..410ec0d 100644 --- a/src/external/ads-script/index.js +++ b/src/external/ads-script/index.js @@ -15,9 +15,6 @@ * limitations under the License. */ -/** @type {?ApiSports} */ -let apiHelper; - /** @type {?SheetsService} */ let sheetsService; @@ -41,6 +38,7 @@ function main() { rows.forEach((row, index) => { console.log(`Processing row ${index + 1}`); + const ads = new GoogleAds(); let status = ''; try { @@ -55,15 +53,13 @@ function main() { if (evaluation === '') return; - const targetAgent = GoogleAds.getInstance(); - - targetAgent.process( + ads.process( row[CONFIG.rules.cols.targetId], row[CONFIG.rules.cols.targetIdType], evaluation ); - status = `Synchronized (${Utils.getCurrentDateString()})`; + status = `Synchronized`; // Update timestamp getSheetsService().setCellValue( @@ -73,9 +69,7 @@ function main() { CONFIG.rules.sheetName ); } catch (err) { - console.log( - `Error (${Utils.getCurrentDateString()}): ${JSON.stringify(err)}` - ); + console.log(`Error: ${JSON.stringify(err)}`); } }); } diff --git a/src/helpers/api.ts b/src/helpers/api.ts index bde9b84..2ccac8e 100644 --- a/src/helpers/api.ts +++ b/src/helpers/api.ts @@ -89,6 +89,7 @@ export class ApiHelper { Logger.log('HTTP code: ' + resRaw.getResponseCode()); Logger.log('API error: ' + resRaw.getContentText()); Logger.log('URL: ' + url); + Logger.log('Parameters: ' + JSON.stringify(params)); throw new Error(resRaw.getContentText()); } diff --git a/src/helpers/dynamic-column-headers.ts b/src/helpers/dynamic-column-headers.ts index 157f667..ed6abeb 100644 --- a/src/helpers/dynamic-column-headers.ts +++ b/src/helpers/dynamic-column-headers.ts @@ -18,15 +18,15 @@ import { JPath } from './jpath'; export class DynamicColumnHeaders { - headers: Array; + headers: string[]; static namespaceSeparator = ':'; /** * Constructor. * - * @param {Array} headers + * @param {string[]} headers */ - constructor(headers: Array) { + constructor(headers: string[]) { this.headers = headers; } @@ -38,14 +38,14 @@ export class DynamicColumnHeaders { * Per default it will nest results under the respective group, which is '0' * if none exists. * - * @param {Array} row + * @param {string[]} row * @param {string} namespace * @param {string} separator * @param {boolean} includeGroup * @returns {Record} */ getMappedValues( - row: Array, + row: string[], namespace: string | undefined = undefined, includeGroup: boolean = true ): Record { diff --git a/src/helpers/jpath.ts b/src/helpers/jpath.ts index 4f21e06..153764e 100644 --- a/src/helpers/jpath.ts +++ b/src/helpers/jpath.ts @@ -19,7 +19,7 @@ export class JPath { /** * Get Object entry value for the provided path. * - * @param {string} path Format "..." + * @param {string} path Format '...' * @param {Object} json JSON or JavaScript Object * @returns {string} Value from JSON or null if value does not exist */ diff --git a/src/index.ts b/src/index.ts index 24d84c1..23fc914 100644 --- a/src/index.ts +++ b/src/index.ts @@ -85,13 +85,13 @@ function main(mode: MODE) { } // Extract and parse column headers - const columnHeaders = rows.shift() as Array; + const columnHeaders = rows.shift() as string[]; const columnHeaderHelper = new DynamicColumnHeaders(columnHeaders); const apiHelper = new ApiHelper(); // Handle every row - rows.forEach((row: Array, index: number) => { + rows.forEach((row: string[], index: number) => { console.log(`Processing row ${index + 1}/${rows.length}`); // Check if update is due @@ -205,17 +205,17 @@ function main(mode: MODE) { * Validate that the Sheet and target entities are in sync. */ function validate() { - let errors: Array = []; + let errors: string[] = []; // Get all rows from the sheet const rows = getSheetsService().getRangeData(CONFIG.rules.sheetName, 1, 1); // Extract and parse column headers - const columnHeaders = rows.shift() as Array; + const columnHeaders = rows.shift() as string[]; const columnHeaderHelper = new DynamicColumnHeaders(columnHeaders); // Handle every row - rows.forEach((row: Array, index: number) => { + rows.forEach((row: string[], index: number) => { console.log(`Validating row ${index + 1}/${rows.length}`); try { const evaluation = getSheetsService().getCellValue( @@ -261,15 +261,15 @@ function validate() { /** * Update row with data from API according to path in header. * - * @param {Array} headers - * @param {Array} row + * @param {string[]} headers + * @param {string[]} row * @param {Object} data * @param {string} group * @returns {string} */ function updateRowWithResultData( - headers: Array, - row: Array, + headers: string[], + row: string[], data: Object, group: string ) { diff --git a/src/target-agents/agent.sample.ts b/src/target-agents/agent.sample.ts index a3d23aa..4d815c9 100644 --- a/src/target-agents/agent.sample.ts +++ b/src/target-agents/agent.sample.ts @@ -51,7 +51,7 @@ export class SampleAgent extends TargetAgent { * @param {string} type * @param {boolean} evaluation * @param {Parameters} params Additional parameters - * @returns {Array}‚ + * @returns {string[]}‚ */ validate( identifier: string, diff --git a/src/target-agents/base.ts b/src/target-agents/base.ts index 84c8f08..79ce4fe 100644 --- a/src/target-agents/base.ts +++ b/src/target-agents/base.ts @@ -19,7 +19,7 @@ import { ApiHelper } from '../helpers/api'; export class TargetAgent extends ApiHelper { public static friendlyName: string = ''; - protected requiredParameters: Array = []; + protected requiredParameters: string[] = []; static instance: TargetAgent; protected constructor() { @@ -38,7 +38,7 @@ export class TargetAgent extends ApiHelper { type: string, evaluation: boolean, params: Object - ): Array { + ): string[] { throw new Error('Method not implemented.'); } diff --git a/src/target-agents/dv360.ts b/src/target-agents/dv360.ts index f163d67..a7161f2 100644 --- a/src/target-agents/dv360.ts +++ b/src/target-agents/dv360.ts @@ -80,13 +80,9 @@ export class DV360 extends TargetAgent { this.authToken = auth.getAuthToken(); if (type === DV360_ENTITY_TYPE.LINE_ITEM) { - this.switchLineItemStatus(params.advertiserId, identifier, evaluation); + this.setLineItemStatus(params.advertiserId, identifier, evaluation); } else if (type === DV360_ENTITY_TYPE.INSERTION_ORDER) { - this.switchInsertionOrderStatus( - params.advertiserId, - identifier, - evaluation - ); + this.setInsertionOrderStatus(params.advertiserId, identifier, evaluation); } } @@ -97,7 +93,7 @@ export class DV360 extends TargetAgent { * @param {DV360_ENTITY_TYPE} type * @param {boolean} evaluation * @param {Parameters} params Additional parameters - * @returns {Array} + * @returns {string[]} */ validate( identifier: string, @@ -153,16 +149,16 @@ export class DV360 extends TargetAgent { * * @param {string} advertiserId DV360 Advertiser ID * @param {string} entityId DV360 Line Item/Insertion Order ID - * @param {boolean} turnOn Activate on 'true', deactivate on 'false' + * @param {boolean} status Activate on 'true', deactivate on 'false' * @param {string} entity */ - private switchEntityStatus( + private setEntityStatus( advertiserId: string, entityId: string, - turnOn: boolean, + status: boolean, entity: string ) { - const newStatus = turnOn + const newStatus = status ? DV360_ENTITY_STATUS.ACTIVE : DV360_ENTITY_STATUS.PAUSED; const updateMask = { @@ -185,12 +181,12 @@ export class DV360 extends TargetAgent { * @param {string} lineItemId - DV360 Line Item ID * @param {boolean} turnOn - Activate LI on 'true', deactivate on 'false' */ - private switchLineItemStatus( + private setLineItemStatus( advertiserId: string, lineItemId: string, turnOn: boolean ) { - const newStatus = this.switchEntityStatus( + const newStatus = this.setEntityStatus( advertiserId, lineItemId, turnOn, @@ -205,12 +201,12 @@ export class DV360 extends TargetAgent { * @param {string} insertionOrderId DV360 Line Item ID * @param {boolean} turnOn Activate IO on 'true', deactivate on 'false' */ - private switchInsertionOrderStatus( + private setInsertionOrderStatus( advertiserId: string, insertionOrderId: string, turnOn: boolean ) { - this.switchEntityStatus( + this.setEntityStatus( advertiserId, insertionOrderId, turnOn, diff --git a/src/target-agents/google-ads.ts b/src/target-agents/google-ads.ts index 1f1c34f..3bad74e 100644 --- a/src/target-agents/google-ads.ts +++ b/src/target-agents/google-ads.ts @@ -87,7 +87,7 @@ export class GoogleAds extends TargetAgent { console.log(`Updating status of Ad ${identifier} to '${status}'`); this.updateAdStatusById( params.customerId, - identifier.split(',').map((id) => Number(id)), + identifier.split(';').map((id) => String(id)), status ); } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_LABEL) { @@ -95,7 +95,7 @@ export class GoogleAds extends TargetAgent { } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_GROUP_ID) { this.updateAdGroupStatusById( params.customerId, - identifier.split(',').map((id) => Number(id)), + identifier.split(';').map((id) => String(id)), status ); } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_GROUP_LABEL) { @@ -113,7 +113,7 @@ export class GoogleAds extends TargetAgent { * @param {GOOGLE_ADS_SELECTOR_TYPE} type * @param {boolean} evaluation * @param {Parameters} params Additional parameters - * @returns {Array} + * @returns {string[]} */ validate( identifier: string, @@ -129,14 +129,14 @@ export class GoogleAds extends TargetAgent { const expectedStatus = evaluation ? GOOGLE_ADS_ENTITY_STATUS.ENABLED : GOOGLE_ADS_ENTITY_STATUS.PAUSED; - let entitiesToBeChecked: Array = []; - const errors: Array = []; + let entitiesToBeChecked: Entity[] = []; + const errors: string[] = []; if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_ID) { entitiesToBeChecked = entitiesToBeChecked.concat( this.getAdsById( params.customerId, - identifier.split(',').map((id) => Number(id)) + identifier.split(',').map((id) => String(id)) ) ); } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_LABEL) { @@ -147,7 +147,7 @@ export class GoogleAds extends TargetAgent { entitiesToBeChecked = entitiesToBeChecked.concat( this.getAdGroupsById( params.customerId, - identifier.split(',').map((id) => Number(id)) + identifier.split(',').map((id) => String(id)) ) ); } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_GROUP_LABEL) { @@ -227,12 +227,12 @@ export class GoogleAds extends TargetAgent { * Update Ad status by ID(s). * * @param {string} customerId - * @param {Array} ids + * @param {string[]} ids * @param {string} status */ private updateAdStatusById( customerId: string, - ids: Array, + ids: string[], status: string ) { const ads = this.getAdsById(customerId, ids); @@ -247,12 +247,12 @@ export class GoogleAds extends TargetAgent { * Update AdGroup status by ID(s). * * @param {string} customerId - * @param {Array} ids + * @param {string[]} ids * @param {string} status */ private updateAdGroupStatusById( customerId: string, - ids: Array, + ids: string[], status: string ) { const adGroups = this.getAdGroupsById(customerId, ids); @@ -308,10 +308,10 @@ export class GoogleAds extends TargetAgent { * Get Ads status by ID(s). * * @param {string} customerId - * @param {Array} ids - * @returns {Array} + * @param {string[]} ids + * @returns {string[]} */ - private getAdsById(customerId: any, ids: Array): Array { + private getAdsById(customerId: any, ids: string[]): Entity[] { const query = ` SELECT ad_group_ad.ad.id, @@ -343,13 +343,10 @@ export class GoogleAds extends TargetAgent { * Get AdGroups status by ID(s). * * @param {string} customerId - * @param {Array} ids - * @returns {Array} + * @param {string[]} ids + * @returns {Entity[]} */ - private getAdGroupsById( - customerId: string, - ids: Array - ): Array { + private getAdGroupsById(customerId: string, ids: string[]): Entity[] { const query = ` SELECT ad_group.id, @@ -378,10 +375,10 @@ export class GoogleAds extends TargetAgent { * Get Ads resource names by labels. * * @param {string} customerId - * @param {Array} ids - * @returns {Array} + * @param {string} label + * @returns {Entity[]} */ - private getAdsByLabel(customerId: any, label: string): Array { + private getAdsByLabel(customerId: any, label: string): Entity[] { const labelResource = this.getAdLabelByName(customerId, label); const query = ` @@ -438,10 +435,10 @@ export class GoogleAds extends TargetAgent { * Get AdGroups resource names by labels. * * @param {string} customerId - * @param {Array} ids - * @returns {Array} + * @param {string} label + * @returns {Entity[]} */ - private getAdGroupsByLabel(customerId: any, label: string): Array { + private getAdGroupsByLabel(customerId: any, label: string): Entity[] { const labelResource = this.getAdGroupLabelByName(customerId, label); const query = ` diff --git a/src/test/google-ads.test.ts b/src/test/google-ads.test.ts index 72b6e89..96ffdcd 100644 --- a/src/test/google-ads.test.ts +++ b/src/test/google-ads.test.ts @@ -85,7 +85,7 @@ describe('Google Ads Target Agent', () => { // Evaluate expect(updateAdStatusByIdSpy).toHaveBeenCalledWith( '1', - [1234], + ['1234'], GOOGLE_ADS_ENTITY_STATUS.ENABLED ); @@ -126,12 +126,12 @@ describe('Google Ads Target Agent', () => { ); // Call function - ads.process('1234,2345', GOOGLE_ADS_SELECTOR_TYPE.AD_ID, true, params); + ads.process('1234;2345', GOOGLE_ADS_SELECTOR_TYPE.AD_ID, true, params); // Evaluate expect(updateAdStatusByIdSpy).toHaveBeenCalledWith( '1', - [1234, 2345], + ['1234', '2345'], GOOGLE_ADS_ENTITY_STATUS.ENABLED ); From f536fbab2fa7ba5244bb55c97c880c2554ae9099 Mon Sep 17 00:00:00 2001 From: paranerd Date: Thu, 9 Mar 2023 10:15:21 +0100 Subject: [PATCH 23/84] Fixed Google Ads Scripts Extension to set the correct status --- README.md | 2 + img/dynamic-column-notation-result-agg.png | Bin 22352 -> 10065 bytes src/external/ads-script/README.md | 20 ++++ src/external/ads-script/agent.js | 114 +++++---------------- src/external/ads-script/index.js | 10 +- src/external/ads-script/sheets.js | 11 -- 6 files changed, 54 insertions(+), 103 deletions(-) create mode 100644 src/external/ads-script/README.md diff --git a/README.md b/README.md index 07e22aa..58b38fa 100644 --- a/README.md +++ b/README.md @@ -329,3 +329,5 @@ Here's what you need to include a new Target Agent: ### I don't have a Google Ads Developer Token (yet). Can I still use IFTTA? While we recommend applying for a Developer Token for the integration to work "natively", it is also possible to separate the fetching and activation part so that you only query the API with IFTTA to then read and process the results using an Ads Script in your Ads account. + +For more information please refer to the [Google Ads Scripts Extension Documentation](src/external/ads-script/README.md) diff --git a/img/dynamic-column-notation-result-agg.png b/img/dynamic-column-notation-result-agg.png index df71baa863da53cfed338496b7049419ba023d77..89f754d778be45c6c26fee2d14ebeb4ef97bd535 100644 GIT binary patch delta 9693 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 literal 22352 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 E0Ub59P5=M^ diff --git a/src/external/ads-script/README.md b/src/external/ads-script/README.md new file mode 100644 index 0000000..31bdcfe --- /dev/null +++ b/src/external/ads-script/README.md @@ -0,0 +1,20 @@ +# If This Then Ad - Ads Scripts Extension + +This extension is meant to be used if you don't have a Google Ads Developer Token (yet). + +## Setup + +1. Make a copy of the [Google Sheets Template](https://docs.google.com/spreadsheets/d/1EKcPGQ1Vr6LyyQYeYE0-T2gPzNhemVTxsvpSNC5arhE) and fill it out as you normally would with one important difference: + + - Ad IDs parsed by Ads Script need to be in the format: `,` instead of only the Ad ID + +1. Create a new Script in the Google Ads account that you want to control + +1. Create new script files for each of the `*.js` files inside of `external/ads-script/` (when naming the files, omit the `.js` since Ads Scripts files are automatically extended with `*.gs`) + +1. Copy and paste the content of each respective file + +1. In `config.gs` set the ID of your Rules Sheet + +1. You may run the Ads Script manually or via schedule + diff --git a/src/external/ads-script/agent.js b/src/external/ads-script/agent.js index 8c482b9..b31a04f 100644 --- a/src/external/ads-script/agent.js +++ b/src/external/ads-script/agent.js @@ -24,109 +24,42 @@ class GoogleAds { * @param {boolean} evaluation */ process(identifier, type, evaluation) { - /*const condition = `Name = '${params.identifier}'`; - this.switchAdGroupStatus(condition, evaluation);*/ - - let ads = []; - let adGroups = []; + let entities = []; if (type === 'AD_ID') { const adIds = identifier .split(';') .map((pair) => pair.split(',').map((id) => parseInt(id, 10))); - ads = ads.concat(this.getAdsByIds(adIds)); + entities = entities.concat(this.getAdsByIds(adIds)); } else if (type === 'AD_LABEL') { - ads = ads.concat(getAdsByLabel(identifier)); + entities = entities.concat(getAdsByLabel(identifier)); } else if (type === 'AD_GROUP_ID') { const adGroupIds = identifier.split(',').map((id) => Number(id)); - adGroups = adGroups.concat(this.getAdGroupsByIds(adGroupIds)); + entities = entities.concat(this.getAdGroupsByIds(adGroupIds)); } else if (type === 'AD_GROUP_LABEL') { - adGroups = adGroups.concat(getAdGroupsByLabel(identifier)); + entities = entities.concat(getAdGroupsByLabel(identifier)); } - // Enable/pause the Ad Groups - /*const adGroupIds = identifier.split(';').map((id) => parseInt(id, 10)); - const adGroupsByIds = getAdGroupsByIds(adGroupIds); - const adGroupsByLabel = getAdGroupsByLabel( - row[CONFIG.feed.columns.adGroupLabel] - ); - const adGroups = [...adGroupsByIds, ...adGroupsByLabel];*/ - adGroups.forEach((adGroup) => { - if (enable && !adGroup.isEnabled()) { - Logger.log(`Enabling Ad Group ${adGroup.getId()}`); - adGroup.enable(); - } else if (enable && adGroup.isEnabled()) { - Logger.log(`Ad Group ${adGroup.getId()} already enabled`); - } else if (!enable && adGroup.isEnabled()) { - Logger.log(`Pausing Ad Group ${adGroup.getId()}`); - adGroup.pause(); - } else { - Logger.log(`Ad Group ${adGroup.getId()} already paused`); - } - }); - // Enable/pause the Ads - /*const adIds = row[CONFIG.feed.columns.adIds] - ? row[CONFIG.feed.columns.adIds] - .split(';') - .map((pair) => pair.split(',').map((id) => parseInt(id, 10))) - : []; - const adsByIds = getAdsByIds(adIds); - const adsByLabel = getAdsByLabel(row[CONFIG.feed.columns.adLabel]); - const ads = [...adsByIds, ...adsByLabel];*/ - ads.forEach((ad) => { - if (enable && !ad.isEnabled()) { - Logger.log(`Enabling Ad ${ad.getId()}`); - ad.enable(); - } else if (enable && ad.isEnabled()) { - Logger.log(`Ad ${ad.getId()} already enabled`); - } else if (!enable && ad.isEnabled()) { - Logger.log(`Pausing Ad ${ad.getId()}`); - ad.pause(); - } else { - Logger.log(`Ad ${ad.getId()} already paused`); - } + entities.forEach((entity) => { + this.setEntityStatus(entity, evaluation); }); } /** - * Check if supposed entity status matches its actual live status. - * - * @param {string} identifier - * @param {string} type - * @param {boolean} evaluation - * @returns {string[]} - */ - validate(identifier, type, evaluation) {} - - /** - * Enable or pause an AdGroup by its name + * Set status of Ad or AdGroup. * - * @param {string} condition AdGroup name - * @param {boolean} enable If true, then enable, else pause + * @param {Ad|AdGroup} entity + * @param {boolean} enable */ - switchAdGroupStatus(condition, enable) { - const selectors = [ - AdsApp.adGroups(), - AdsApp.videoAdGroups(), - AdsApp.shoppingAdGroups(), - ]; - - for (var i = 0; i < selectors.length; i++) { - const adGroupIter = selectors[i].withCondition(condition).get(); - - if (adGroupIter.hasNext()) { - const adGroup = adGroupIter.next(); - - this.switchEntityStatus(adGroup, enable); - } - } - } - - switchEntityStatus(entity, enable) { + setEntityStatus(entity, enable) { if (enable && !entity.isEnabled()) { + Logger.log(`Enabling ${entity.getId()}...`); entity.enable(); - } else if (enable && !entity.isEnabled()) { + } else if (!enable && entity.isEnabled()) { + Logger.log(`Pausing ${entity.getId()}...`); entity.pause(); + } else { + Logger.log(`Status for ${entity.getId()} unchanged`); } } @@ -155,11 +88,20 @@ class GoogleAds { * @returns {AdGroup[]} */ getAdGroupsByIds(ids) { + const selectors = [ + AdsApp.adGroups(), + AdsApp.videoAdGroups(), + AdsApp.shoppingAdGroups(), + ]; + const adGroups = []; - const adGroupsIterator = AdsApp.adGroups().withIds(ids).get(); - while (adGroupsIterator.hasNext()) { - adGroups.push(adGroupsIterator.next()); + for (var i = 0; i < selectors.length; i++) { + const adGroupsIterator = selectors[i].adGroups().withIds(ids).get(); + + while (adGroupsIterator.hasNext()) { + adGroups.push(adGroupsIterator.next()); + } } return adGroups; diff --git a/src/external/ads-script/index.js b/src/external/ads-script/index.js index 410ec0d..e16b5b5 100644 --- a/src/external/ads-script/index.js +++ b/src/external/ads-script/index.js @@ -24,16 +24,12 @@ let sheetsService; */ function main() { // Get all rows from the sheet - const rows = getSheetsService().getRangeData(CONFIG.rules.sheetName, 1, 1); + const rows = getSheetsService().getRangeData(CONFIG.rules.sheetName, 2, 1); if (rows.length === 0) { return; } - // Extract and parse column headers - const columnHeaders = rows.shift(); - const columnHeaderHelper = new DynamicColumnHeaders(columnHeaders); - // Handle every row rows.forEach((row, index) => { console.log(`Processing row ${index + 1}`); @@ -69,9 +65,11 @@ function main() { CONFIG.rules.sheetName ); } catch (err) { - console.log(`Error: ${JSON.stringify(err)}`); + console.log('Error:', err); } }); + + console.log('Done.'); } /** diff --git a/src/external/ads-script/sheets.js b/src/external/ads-script/sheets.js index b26e202..4cb7b45 100644 --- a/src/external/ads-script/sheets.js +++ b/src/external/ads-script/sheets.js @@ -38,20 +38,9 @@ class SheetsService { // Return empty result if no rows if (numRows + sheet.getLastRow() - startRow + 1 === 0) { - console.log('nope'); return [[]]; } - console.log( - sheetName, - startRow, - startCol, - numRows, - numCols, - sheet.getLastRow() - startRow + 1, - sheet.getLastColumn() - startCol + 1 - ); - return sheet .getRange( startRow, From 7fad835a350ea4ae3fd9a6ab1873f241f9e74fcb Mon Sep 17 00:00:00 2001 From: paranerd Date: Mon, 6 Mar 2023 11:18:45 +0100 Subject: [PATCH 24/84] Built IFTTA v2 --- README.md | 3 + src/helpers/api.ts | 3 + src/helpers/auth.ts | 29 ++++++ src/helpers/dynamic-column-headers.ts | 18 ++++ src/helpers/jpath.ts | 4 + src/helpers/sheets.ts | 12 +++ src/target-agents/dv360.ts | 129 ++++++++++++++++++++++++++ 7 files changed, 198 insertions(+) diff --git a/README.md b/README.md index 58b38fa..ed2ae32 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ +<<<<<<< HEAD +======= +>>>>>>> 1a33360 (Built IFTTA v2) [![build](https://img.shields.io/badge/build-passing-brightgreen?style=flat&logo=github)](https://github.com/google/if-this-then-ad) [![GitHub tag (latest SemVer)](https://img.shields.io/github/v/tag/google/if-this-then-ad?label=release&logo=github)](https://github.com/google/if-this-then-ad) [![GitHub last commit](https://img.shields.io/github/last-commit/google/if-this-then-ad)](https://github.com/google/if-this-then-ad/commits) diff --git a/src/helpers/api.ts b/src/helpers/api.ts index 2ccac8e..c2fd768 100644 --- a/src/helpers/api.ts +++ b/src/helpers/api.ts @@ -89,7 +89,10 @@ export class ApiHelper { Logger.log('HTTP code: ' + resRaw.getResponseCode()); Logger.log('API error: ' + resRaw.getContentText()); Logger.log('URL: ' + url); +<<<<<<< HEAD Logger.log('Parameters: ' + JSON.stringify(params)); +======= +>>>>>>> 1a33360 (Built IFTTA v2) throw new Error(resRaw.getContentText()); } diff --git a/src/helpers/auth.ts b/src/helpers/auth.ts index e1c7973..8357b92 100644 --- a/src/helpers/auth.ts +++ b/src/helpers/auth.ts @@ -29,28 +29,42 @@ export interface ServiceAccount { user_email: string; } +<<<<<<< HEAD export enum AUTH_MODE { USER = 'USER', SERVICE_ACCOUNT = 'SERVICE_ACCOUNT', } +======= +>>>>>>> 1a33360 (Built IFTTA v2) /** * This is a wrapper class for handling authentification to DV360 API. * This class can be used to auth also to other Google APIs. */ export class Auth { serviceAccount: ServiceAccount; +<<<<<<< HEAD authMode: AUTH_MODE; +======= +>>>>>>> 1a33360 (Built IFTTA v2) /** * Set the OAuth configuration. * In order to authorise your DV360 API calls you can: * 1. Use the same Google account as you open the spreadsheet. +<<<<<<< HEAD * For this approach, you don't need to do pass a service account. * 2. Use a service account. * This is a service account in JSON format from your GCP project. * How to get a service account credentials from GCP: * https://cloud.google.com/iam/docs/service-accounts +======= + * If you chose this approach, you don't need to do pass account. + * 2. Use a service account. + * This is a service account in JSON format from your GCP project. + * How to get a service account credentials from GCP: + * https://cloud.google.com/iam/docs/service-accounts +>>>>>>> 1a33360 (Built IFTTA v2) * * Service account credentials should be specified in the following JSON format: * { @@ -69,17 +83,26 @@ export class Auth { * @param {?Object} account The service account or empty */ constructor(account?: Object) { +<<<<<<< HEAD this.authMode = account ? AUTH_MODE.SERVICE_ACCOUNT : AUTH_MODE.USER; +======= +>>>>>>> 1a33360 (Built IFTTA v2) this.serviceAccount = account as ServiceAccount; } /** +<<<<<<< HEAD * Get Auth Token for OAuth authorization for your service account. * You need this token in order to authorize API requests. +======= + * Get Auth Token for OAuth authorisation for your service account. + * You need this token in order to authorise your DV360 API requests. +>>>>>>> 1a33360 (Built IFTTA v2) * See more: https://github.com/gsuitedevs/apps-script-oauth2/blob/master/README.md * See more: https://developers.google.com/apps-script/reference/script/script-app#getOAuthToken() * * @returns {string} OAuth Token +<<<<<<< HEAD * @throws {Error} */ getAuthToken() { @@ -90,6 +113,12 @@ export class Auth { !('private_key' in this.serviceAccount) ) { throw new Error('No or invalid service account provided'); +======= + */ + getAuthToken() { + if (!this.serviceAccount || !('private_key' in this.serviceAccount)) { + return ScriptApp.getOAuthToken(); +>>>>>>> 1a33360 (Built IFTTA v2) } const service = OAuth2.createService('Service Account') diff --git a/src/helpers/dynamic-column-headers.ts b/src/helpers/dynamic-column-headers.ts index ed6abeb..8a2a5b4 100644 --- a/src/helpers/dynamic-column-headers.ts +++ b/src/helpers/dynamic-column-headers.ts @@ -18,15 +18,25 @@ import { JPath } from './jpath'; export class DynamicColumnHeaders { +<<<<<<< HEAD headers: string[]; +======= + headers: Array; +>>>>>>> 1a33360 (Built IFTTA v2) static namespaceSeparator = ':'; /** * Constructor. * +<<<<<<< HEAD * @param {string[]} headers */ constructor(headers: string[]) { +======= + * @param {Array} headers + */ + constructor(headers: Array) { +>>>>>>> 1a33360 (Built IFTTA v2) this.headers = headers; } @@ -38,14 +48,22 @@ export class DynamicColumnHeaders { * Per default it will nest results under the respective group, which is '0' * if none exists. * +<<<<<<< HEAD * @param {string[]} row +======= + * @param {Array} row +>>>>>>> 1a33360 (Built IFTTA v2) * @param {string} namespace * @param {string} separator * @param {boolean} includeGroup * @returns {Record} */ getMappedValues( +<<<<<<< HEAD row: string[], +======= + row: Array, +>>>>>>> 1a33360 (Built IFTTA v2) namespace: string | undefined = undefined, includeGroup: boolean = true ): Record { diff --git a/src/helpers/jpath.ts b/src/helpers/jpath.ts index 153764e..48811bf 100644 --- a/src/helpers/jpath.ts +++ b/src/helpers/jpath.ts @@ -19,7 +19,11 @@ export class JPath { /** * Get Object entry value for the provided path. * +<<<<<<< HEAD * @param {string} path Format '...' +======= + * @param {string} path Format "..." +>>>>>>> 1a33360 (Built IFTTA v2) * @param {Object} json JSON or JavaScript Object * @returns {string} Value from JSON or null if value does not exist */ diff --git a/src/helpers/sheets.ts b/src/helpers/sheets.ts index 3c903b4..b4f1dc7 100644 --- a/src/helpers/sheets.ts +++ b/src/helpers/sheets.ts @@ -22,7 +22,11 @@ */ export class SheetsService { defaultMode: string; +<<<<<<< HEAD spreadsheet: GoogleAppsScript.Spreadsheet.Spreadsheet; +======= + spreadsheet_: GoogleAppsScript.Spreadsheet.Spreadsheet; +>>>>>>> 1a33360 (Built IFTTA v2) /** * Constructor. @@ -46,7 +50,11 @@ export class SheetsService { } /** @private @const {?SpreadsheetApp.Spreadsheet} */ +<<<<<<< HEAD this.spreadsheet = spreadsheet; +======= + this.spreadsheet_ = spreadsheet; +>>>>>>> 1a33360 (Built IFTTA v2) /** @type {string} */ this.defaultMode = 'FORMULA'; @@ -164,6 +172,10 @@ export class SheetsService { * @return {?SpreadsheetApp.Spreadsheet} The spreadsheet */ getSpreadsheet() { +<<<<<<< HEAD return this.spreadsheet; +======= + return this.spreadsheet_; +>>>>>>> 1a33360 (Built IFTTA v2) } } diff --git a/src/target-agents/dv360.ts b/src/target-agents/dv360.ts index a7161f2..a552e30 100644 --- a/src/target-agents/dv360.ts +++ b/src/target-agents/dv360.ts @@ -18,12 +18,20 @@ import { Auth } from '../helpers/auth'; import { TargetAgent } from './base'; +<<<<<<< HEAD export enum DV360_ENTITY_STATUS { +======= +enum DV360_ENTITY_STATUS { +>>>>>>> 1a33360 (Built IFTTA v2) ACTIVE = 'ENTITY_STATUS_ACTIVE', PAUSED = 'ENTITY_STATUS_PAUSED', } +<<<<<<< HEAD export enum DV360_ENTITY_TYPE { +======= +enum DV360_ENTITY_TYPE { +>>>>>>> 1a33360 (Built IFTTA v2) LINE_ITEM = 'LINE_ITEM', INSERTION_ORDER = 'INSERTION_ORDER', } @@ -44,7 +52,11 @@ export class DV360 extends TargetAgent { static friendlyName = 'DV360'; authToken?: string; baseUrl: string; +<<<<<<< HEAD requiredParameters = ['advertiserId']; +======= + requiredParameters = ['id', 'type', 'advertiserId']; +>>>>>>> 1a33360 (Built IFTTA v2) /** * Set the DV360 wrapper configuration @@ -79,10 +91,19 @@ export class DV360 extends TargetAgent { const auth = new Auth(params.serviceAccount ?? undefined); this.authToken = auth.getAuthToken(); +<<<<<<< HEAD if (type === DV360_ENTITY_TYPE.LINE_ITEM) { this.setLineItemStatus(params.advertiserId, identifier, evaluation); } else if (type === DV360_ENTITY_TYPE.INSERTION_ORDER) { this.setInsertionOrderStatus(params.advertiserId, identifier, evaluation); +======= + console.log('Switching', identifier, type, evaluation); + + if (type === DV360_ENTITY_TYPE.LINE_ITEM) { + this.switchLIStatus(params.advertiserId, identifier, evaluation); + } else if (type === DV360_ENTITY_TYPE.INSERTION_ORDER) { + this.switchIOStatus(params.advertiserId, identifier, evaluation); +>>>>>>> 1a33360 (Built IFTTA v2) } } @@ -93,7 +114,11 @@ export class DV360 extends TargetAgent { * @param {DV360_ENTITY_TYPE} type * @param {boolean} evaluation * @param {Parameters} params Additional parameters +<<<<<<< HEAD * @returns {string[]} +======= + * @throws {Error} +>>>>>>> 1a33360 (Built IFTTA v2) */ validate( identifier: string, @@ -108,6 +133,7 @@ export class DV360 extends TargetAgent { this.authToken = auth.getAuthToken(); let status; +<<<<<<< HEAD const errors = []; if (type === DV360_ENTITY_TYPE.LINE_ITEM) { @@ -123,6 +149,20 @@ export class DV360 extends TargetAgent { } return errors; +======= + + if (type === DV360_ENTITY_TYPE.LINE_ITEM) { + status = this.isLIActive(params.advertiserId, identifier); + } else if (type === DV360_ENTITY_TYPE.INSERTION_ORDER) { + status = this.isIOActive(params.advertiserId, identifier); + } + + if (evaluation !== status) { + throw Error( + `Status for ${identifier} (${type}) should be ${evaluation} but is ${status}` + ); + } +>>>>>>> 1a33360 (Built IFTTA v2) } /** @@ -149,6 +189,7 @@ export class DV360 extends TargetAgent { * * @param {string} advertiserId DV360 Advertiser ID * @param {string} entityId DV360 Line Item/Insertion Order ID +<<<<<<< HEAD * @param {boolean} status Activate on 'true', deactivate on 'false' * @param {string} entity */ @@ -159,6 +200,18 @@ export class DV360 extends TargetAgent { entity: string ) { const newStatus = status +======= + * @param {boolean} turnOn Activate on 'true', deactivate on 'false' + * @param {string} entity + */ + private switchEntityStatus( + advertiserId: string, + entityId: string, + turnOn: boolean, + entity: string + ) { + const newStatus = turnOn +>>>>>>> 1a33360 (Built IFTTA v2) ? DV360_ENTITY_STATUS.ACTIVE : DV360_ENTITY_STATUS.PAUSED; const updateMask = { @@ -169,12 +222,17 @@ export class DV360 extends TargetAgent { this.fetchUrl(url, 'patch', updateMask); +<<<<<<< HEAD console.log( +======= + Logger.log( +>>>>>>> 1a33360 (Built IFTTA v2) `* [DV360:switch ${entity}]: DONE, ID: ${entityId} new status ${newStatus}` ); } /** +<<<<<<< HEAD * Change Line Item status (Active/Paused) for the specified LI ID. * * @param {string} advertiserId - DV360 Advertiser ID @@ -195,18 +253,28 @@ export class DV360 extends TargetAgent { } /** +======= +>>>>>>> 1a33360 (Built IFTTA v2) * Change Insertion Order status (Active/Paused) for the specified IO ID. * * @param {string} advertiserId DV360 Advertiser ID * @param {string} insertionOrderId DV360 Line Item ID * @param {boolean} turnOn Activate IO on 'true', deactivate on 'false' */ +<<<<<<< HEAD private setInsertionOrderStatus( +======= + private switchIOStatus( +>>>>>>> 1a33360 (Built IFTTA v2) advertiserId: string, insertionOrderId: string, turnOn: boolean ) { +<<<<<<< HEAD this.setEntityStatus( +======= + this.switchEntityStatus( +>>>>>>> 1a33360 (Built IFTTA v2) advertiserId, insertionOrderId, turnOn, @@ -215,6 +283,29 @@ export class DV360 extends TargetAgent { } /** +<<<<<<< HEAD +======= + * Change Line Item status (Active/Paused) for the specified LI ID. + * + * @param {string} advertiserId - DV360 Advertiser ID + * @param {string} lineItemId - DV360 Line Item ID + * @param {boolean} turnOn - Activate LI on 'true', deactivate on 'false' + */ + private switchLIStatus( + advertiserId: string, + lineItemId: string, + turnOn: boolean + ) { + const newStatus = this.switchEntityStatus( + advertiserId, + lineItemId, + turnOn, + 'lineItems' + ); + } + + /** +>>>>>>> 1a33360 (Built IFTTA v2) * Get DV360 entity for the specified ID. * See more: https://developers.google.com/display-video/api/reference/rest/v1/advertisers.lineItems * See more: https://developers.google.com/display-video/api/reference/rest/v1/advertisers.insertionOrders @@ -235,16 +326,46 @@ export class DV360 extends TargetAgent { } /** +<<<<<<< HEAD +======= + * Get DV360 entity for the specified ID. + * See more: https://developers.google.com/display-video/api/reference/rest/v1/advertisers.lineItems + * See more: https://developers.google.com/display-video/api/reference/rest/v1/advertisers.insertionOrders + * + * @param {number} advertiserId DV360 Advertiser ID + * @param {number} entityId DV360 Line Item/Insertion Order ID + * @param {string} entity Entity (e.g. lineItems/insertionOrders), see API refernece + * @returns {DV360_ENTITY_STATUS} Entity status + */ + private getEntityStatus( + advertiserId: string, + entityId: string, + entity: string + ): DV360_ENTITY_STATUS { + const e = this.getEntity(advertiserId, entityId, entity); + return e.entityStatus; + } + + /** +>>>>>>> 1a33360 (Built IFTTA v2) * Return true if the entity is active else false. * * @param {string} advertiserId DV360 Advertiser ID * @param {string} lineItemId DV360 Line Item ID * @returns {boolean} */ +<<<<<<< HEAD private isLineItemActive(advertiserId: string, lineItemId: string) { const entity = this.getEntity(advertiserId, lineItemId, 'lineItems'); return DV360_ENTITY_STATUS.ACTIVE == entity.entityStatus; +======= + private isLIActive(advertiserId: string, lineItemId: string) { + return ( + DV360_ENTITY_STATUS.ACTIVE == + this.getEntityStatus(advertiserId, lineItemId, 'lineItems') + ); +>>>>>>> 1a33360 (Built IFTTA v2) } /** @@ -254,6 +375,7 @@ export class DV360 extends TargetAgent { * @param {string} insertionOrderId DV360 Insertion Order ID * @returns {boolean} */ +<<<<<<< HEAD private isInsertionOrderActive( advertiserId: string, insertionOrderId: string @@ -265,5 +387,12 @@ export class DV360 extends TargetAgent { ); return DV360_ENTITY_STATUS.ACTIVE == entity.entityStatus; +======= + private isIOActive(advertiserId: string, insertionOrderId: string) { + return ( + DV360_ENTITY_STATUS.ACTIVE == + this.getEntityStatus(advertiserId, insertionOrderId, 'insertionOrders') + ); +>>>>>>> 1a33360 (Built IFTTA v2) } } From f6d279283098f1b0b8420b833d875ab8f8d17c52 Mon Sep 17 00:00:00 2001 From: paranerd Date: Mon, 6 Mar 2023 20:00:53 +0100 Subject: [PATCH 25/84] Improved validation log output --- src/target-agents/base.ts | 4 ++++ src/target-agents/dv360.ts | 18 +++++++++++++++++- src/target-agents/google-ads.ts | 2 ++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/target-agents/base.ts b/src/target-agents/base.ts index 79ce4fe..6d1921e 100644 --- a/src/target-agents/base.ts +++ b/src/target-agents/base.ts @@ -38,7 +38,11 @@ export class TargetAgent extends ApiHelper { type: string, evaluation: boolean, params: Object +<<<<<<< HEAD ): string[] { +======= + ): Array { +>>>>>>> 0183214 (Improved validation log output) throw new Error('Method not implemented.'); } diff --git a/src/target-agents/dv360.ts b/src/target-agents/dv360.ts index a552e30..fb0d233 100644 --- a/src/target-agents/dv360.ts +++ b/src/target-agents/dv360.ts @@ -91,6 +91,7 @@ export class DV360 extends TargetAgent { const auth = new Auth(params.serviceAccount ?? undefined); this.authToken = auth.getAuthToken(); +<<<<<<< HEAD <<<<<<< HEAD if (type === DV360_ENTITY_TYPE.LINE_ITEM) { this.setLineItemStatus(params.advertiserId, identifier, evaluation); @@ -99,6 +100,8 @@ export class DV360 extends TargetAgent { ======= console.log('Switching', identifier, type, evaluation); +======= +>>>>>>> 0183214 (Improved validation log output) if (type === DV360_ENTITY_TYPE.LINE_ITEM) { this.switchLIStatus(params.advertiserId, identifier, evaluation); } else if (type === DV360_ENTITY_TYPE.INSERTION_ORDER) { @@ -114,11 +117,15 @@ export class DV360 extends TargetAgent { * @param {DV360_ENTITY_TYPE} type * @param {boolean} evaluation * @param {Parameters} params Additional parameters +<<<<<<< HEAD <<<<<<< HEAD * @returns {string[]} ======= * @throws {Error} >>>>>>> 1a33360 (Built IFTTA v2) +======= + * @returns {Array} +>>>>>>> 0183214 (Improved validation log output) */ validate( identifier: string, @@ -133,6 +140,7 @@ export class DV360 extends TargetAgent { this.authToken = auth.getAuthToken(); let status; +<<<<<<< HEAD <<<<<<< HEAD const errors = []; @@ -150,6 +158,9 @@ export class DV360 extends TargetAgent { return errors; ======= +======= + const errors = []; +>>>>>>> 0183214 (Improved validation log output) if (type === DV360_ENTITY_TYPE.LINE_ITEM) { status = this.isLIActive(params.advertiserId, identifier); @@ -158,11 +169,16 @@ export class DV360 extends TargetAgent { } if (evaluation !== status) { - throw Error( + errors.push( `Status for ${identifier} (${type}) should be ${evaluation} but is ${status}` ); } +<<<<<<< HEAD >>>>>>> 1a33360 (Built IFTTA v2) +======= + + return errors; +>>>>>>> 0183214 (Improved validation log output) } /** diff --git a/src/target-agents/google-ads.ts b/src/target-agents/google-ads.ts index 3bad74e..bc9b1bd 100644 --- a/src/target-agents/google-ads.ts +++ b/src/target-agents/google-ads.ts @@ -106,6 +106,8 @@ export class GoogleAds extends TargetAgent { } } + areAdsEnabled() {} + /** * Check if supposed entity status matches its actual live status. * From 6be35baa47d814977322e22ab4edb1878c33e8f0 Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 7 Mar 2023 10:43:41 +0100 Subject: [PATCH 26/84] Added tests and removed debug code --- src/target-agents/dv360.ts | 88 ++++++++++++++++++++++++++++++--- src/target-agents/google-ads.ts | 2 - 2 files changed, 80 insertions(+), 10 deletions(-) diff --git a/src/target-agents/dv360.ts b/src/target-agents/dv360.ts index fb0d233..79fbb4a 100644 --- a/src/target-agents/dv360.ts +++ b/src/target-agents/dv360.ts @@ -18,20 +18,28 @@ import { Auth } from '../helpers/auth'; import { TargetAgent } from './base'; +<<<<<<< HEAD <<<<<<< HEAD export enum DV360_ENTITY_STATUS { ======= enum DV360_ENTITY_STATUS { >>>>>>> 1a33360 (Built IFTTA v2) +======= +export enum DV360_ENTITY_STATUS { +>>>>>>> 4fbdb4b (Added tests and removed debug code) ACTIVE = 'ENTITY_STATUS_ACTIVE', PAUSED = 'ENTITY_STATUS_PAUSED', } +<<<<<<< HEAD <<<<<<< HEAD export enum DV360_ENTITY_TYPE { ======= enum DV360_ENTITY_TYPE { >>>>>>> 1a33360 (Built IFTTA v2) +======= +export enum DV360_ENTITY_TYPE { +>>>>>>> 4fbdb4b (Added tests and removed debug code) LINE_ITEM = 'LINE_ITEM', INSERTION_ORDER = 'INSERTION_ORDER', } @@ -52,11 +60,15 @@ export class DV360 extends TargetAgent { static friendlyName = 'DV360'; authToken?: string; baseUrl: string; +<<<<<<< HEAD <<<<<<< HEAD requiredParameters = ['advertiserId']; ======= requiredParameters = ['id', 'type', 'advertiserId']; >>>>>>> 1a33360 (Built IFTTA v2) +======= + requiredParameters = ['advertiserId']; +>>>>>>> 4fbdb4b (Added tests and removed debug code) /** * Set the DV360 wrapper configuration @@ -103,10 +115,14 @@ export class DV360 extends TargetAgent { ======= >>>>>>> 0183214 (Improved validation log output) if (type === DV360_ENTITY_TYPE.LINE_ITEM) { - this.switchLIStatus(params.advertiserId, identifier, evaluation); + this.switchLIStatus_(params.advertiserId, identifier, evaluation); } else if (type === DV360_ENTITY_TYPE.INSERTION_ORDER) { +<<<<<<< HEAD this.switchIOStatus(params.advertiserId, identifier, evaluation); >>>>>>> 1a33360 (Built IFTTA v2) +======= + this.switchIOStatus_(params.advertiserId, identifier, evaluation); +>>>>>>> 4fbdb4b (Added tests and removed debug code) } } @@ -145,6 +161,7 @@ export class DV360 extends TargetAgent { const errors = []; if (type === DV360_ENTITY_TYPE.LINE_ITEM) { +<<<<<<< HEAD status = this.isLineItemActive(params.advertiserId, identifier); } else if (type === DV360_ENTITY_TYPE.INSERTION_ORDER) { status = this.isInsertionOrderActive(params.advertiserId, identifier); @@ -164,8 +181,11 @@ export class DV360 extends TargetAgent { if (type === DV360_ENTITY_TYPE.LINE_ITEM) { status = this.isLIActive(params.advertiserId, identifier); +======= + status = this.isLIActive_(params.advertiserId, identifier); +>>>>>>> 4fbdb4b (Added tests and removed debug code) } else if (type === DV360_ENTITY_TYPE.INSERTION_ORDER) { - status = this.isIOActive(params.advertiserId, identifier); + status = this.isIOActive_(params.advertiserId, identifier); } if (evaluation !== status) { @@ -189,7 +209,7 @@ export class DV360 extends TargetAgent { * @param {Object|undefined} payload - What should be updated * @returns {JSON} Result of the operation */ - private fetchUrl(url: string, method = 'get', payload?: Object | undefined) { + private fetchUrl_(url: string, method = 'get', payload?: Object | undefined) { const headers = { Authorization: `Bearer ${this.authToken}`, Accept: '*/*', @@ -220,7 +240,7 @@ export class DV360 extends TargetAgent { * @param {boolean} turnOn Activate on 'true', deactivate on 'false' * @param {string} entity */ - private switchEntityStatus( + private switchEntityStatus_( advertiserId: string, entityId: string, turnOn: boolean, @@ -236,18 +256,23 @@ export class DV360 extends TargetAgent { const url = `${this.baseUrl}/advertisers/${advertiserId}/${entity}/${entityId}?updateMask=entityStatus`; - this.fetchUrl(url, 'patch', updateMask); + this.fetchUrl_(url, 'patch', updateMask); +<<<<<<< HEAD <<<<<<< HEAD console.log( ======= Logger.log( >>>>>>> 1a33360 (Built IFTTA v2) +======= + console.log( +>>>>>>> 4fbdb4b (Added tests and removed debug code) `* [DV360:switch ${entity}]: DONE, ID: ${entityId} new status ${newStatus}` ); } /** +<<<<<<< HEAD <<<<<<< HEAD * Change Line Item status (Active/Paused) for the specified LI ID. * @@ -301,18 +326,20 @@ export class DV360 extends TargetAgent { /** <<<<<<< HEAD ======= +======= +>>>>>>> 4fbdb4b (Added tests and removed debug code) * Change Line Item status (Active/Paused) for the specified LI ID. * * @param {string} advertiserId - DV360 Advertiser ID * @param {string} lineItemId - DV360 Line Item ID * @param {boolean} turnOn - Activate LI on 'true', deactivate on 'false' */ - private switchLIStatus( + private switchLIStatus_( advertiserId: string, lineItemId: string, turnOn: boolean ) { - const newStatus = this.switchEntityStatus( + const newStatus = this.switchEntityStatus_( advertiserId, lineItemId, turnOn, @@ -321,7 +348,30 @@ export class DV360 extends TargetAgent { } /** +<<<<<<< HEAD >>>>>>> 1a33360 (Built IFTTA v2) +======= + * Change Insertion Order status (Active/Paused) for the specified IO ID. + * + * @param {string} advertiserId DV360 Advertiser ID + * @param {string} insertionOrderId DV360 Line Item ID + * @param {boolean} turnOn Activate IO on 'true', deactivate on 'false' + */ + private switchIOStatus_( + advertiserId: string, + insertionOrderId: string, + turnOn: boolean + ) { + this.switchEntityStatus_( + advertiserId, + insertionOrderId, + turnOn, + 'insertionOrders' + ); + } + + /** +>>>>>>> 4fbdb4b (Added tests and removed debug code) * Get DV360 entity for the specified ID. * See more: https://developers.google.com/display-video/api/reference/rest/v1/advertisers.lineItems * See more: https://developers.google.com/display-video/api/reference/rest/v1/advertisers.insertionOrders @@ -331,13 +381,14 @@ export class DV360 extends TargetAgent { * @param {string} entity Entity (e.g. lineItems/insertionOrders), see API refernece * @returns {Entity} Entity object */ - private getEntity( + private getEntity_( advertiserId: string, entityId: string, entity: string ): Entity { const url = `${this.baseUrl}/advertisers/${advertiserId}/${entity}/${entityId}`; +<<<<<<< HEAD return this.fetchUrl(url) as Entity; } @@ -360,6 +411,9 @@ export class DV360 extends TargetAgent { ): DV360_ENTITY_STATUS { const e = this.getEntity(advertiserId, entityId, entity); return e.entityStatus; +======= + return this.fetchUrl_(url) as Entity; +>>>>>>> 4fbdb4b (Added tests and removed debug code) } /** @@ -370,6 +424,7 @@ export class DV360 extends TargetAgent { * @param {string} lineItemId DV360 Line Item ID * @returns {boolean} */ +<<<<<<< HEAD <<<<<<< HEAD private isLineItemActive(advertiserId: string, lineItemId: string) { const entity = this.getEntity(advertiserId, lineItemId, 'lineItems'); @@ -382,6 +437,12 @@ export class DV360 extends TargetAgent { this.getEntityStatus(advertiserId, lineItemId, 'lineItems') ); >>>>>>> 1a33360 (Built IFTTA v2) +======= + private isLIActive_(advertiserId: string, lineItemId: string) { + const entity = this.getEntity_(advertiserId, lineItemId, 'lineItems'); + + return DV360_ENTITY_STATUS.ACTIVE == entity.entityStatus; +>>>>>>> 4fbdb4b (Added tests and removed debug code) } /** @@ -391,6 +452,7 @@ export class DV360 extends TargetAgent { * @param {string} insertionOrderId DV360 Insertion Order ID * @returns {boolean} */ +<<<<<<< HEAD <<<<<<< HEAD private isInsertionOrderActive( advertiserId: string, @@ -410,5 +472,15 @@ export class DV360 extends TargetAgent { this.getEntityStatus(advertiserId, insertionOrderId, 'insertionOrders') ); >>>>>>> 1a33360 (Built IFTTA v2) +======= + private isIOActive_(advertiserId: string, insertionOrderId: string) { + const entity = this.getEntity_( + advertiserId, + insertionOrderId, + 'insertionOrders' + ); + + return DV360_ENTITY_STATUS.ACTIVE == entity.entityStatus; +>>>>>>> 4fbdb4b (Added tests and removed debug code) } } diff --git a/src/target-agents/google-ads.ts b/src/target-agents/google-ads.ts index bc9b1bd..3bad74e 100644 --- a/src/target-agents/google-ads.ts +++ b/src/target-agents/google-ads.ts @@ -106,8 +106,6 @@ export class GoogleAds extends TargetAgent { } } - areAdsEnabled() {} - /** * Check if supposed entity status matches its actual live status. * From a0a9a70c9490f9617770b95fa2e043be8b434c59 Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 7 Mar 2023 11:10:00 +0100 Subject: [PATCH 27/84] Re-added licence header in README --- README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/README.md b/README.md index ed2ae32..58b38fa 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,3 @@ -<<<<<<< HEAD -======= ->>>>>>> 1a33360 (Built IFTTA v2) [![build](https://img.shields.io/badge/build-passing-brightgreen?style=flat&logo=github)](https://github.com/google/if-this-then-ad) [![GitHub tag (latest SemVer)](https://img.shields.io/github/v/tag/google/if-this-then-ad?label=release&logo=github)](https://github.com/google/if-this-then-ad) [![GitHub last commit](https://img.shields.io/github/last-commit/google/if-this-then-ad)](https://github.com/google/if-this-then-ad/commits) From 4e32196f851db0281a56cea0a50eecb0db1a667e Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 7 Mar 2023 12:02:03 +0100 Subject: [PATCH 28/84] Introduced AUTH_MODE --- src/helpers/auth.ts | 29 ----------------------------- 1 file changed, 29 deletions(-) diff --git a/src/helpers/auth.ts b/src/helpers/auth.ts index 8357b92..e1c7973 100644 --- a/src/helpers/auth.ts +++ b/src/helpers/auth.ts @@ -29,42 +29,28 @@ export interface ServiceAccount { user_email: string; } -<<<<<<< HEAD export enum AUTH_MODE { USER = 'USER', SERVICE_ACCOUNT = 'SERVICE_ACCOUNT', } -======= ->>>>>>> 1a33360 (Built IFTTA v2) /** * This is a wrapper class for handling authentification to DV360 API. * This class can be used to auth also to other Google APIs. */ export class Auth { serviceAccount: ServiceAccount; -<<<<<<< HEAD authMode: AUTH_MODE; -======= ->>>>>>> 1a33360 (Built IFTTA v2) /** * Set the OAuth configuration. * In order to authorise your DV360 API calls you can: * 1. Use the same Google account as you open the spreadsheet. -<<<<<<< HEAD * For this approach, you don't need to do pass a service account. * 2. Use a service account. * This is a service account in JSON format from your GCP project. * How to get a service account credentials from GCP: * https://cloud.google.com/iam/docs/service-accounts -======= - * If you chose this approach, you don't need to do pass account. - * 2. Use a service account. - * This is a service account in JSON format from your GCP project. - * How to get a service account credentials from GCP: - * https://cloud.google.com/iam/docs/service-accounts ->>>>>>> 1a33360 (Built IFTTA v2) * * Service account credentials should be specified in the following JSON format: * { @@ -83,26 +69,17 @@ export class Auth { * @param {?Object} account The service account or empty */ constructor(account?: Object) { -<<<<<<< HEAD this.authMode = account ? AUTH_MODE.SERVICE_ACCOUNT : AUTH_MODE.USER; -======= ->>>>>>> 1a33360 (Built IFTTA v2) this.serviceAccount = account as ServiceAccount; } /** -<<<<<<< HEAD * Get Auth Token for OAuth authorization for your service account. * You need this token in order to authorize API requests. -======= - * Get Auth Token for OAuth authorisation for your service account. - * You need this token in order to authorise your DV360 API requests. ->>>>>>> 1a33360 (Built IFTTA v2) * See more: https://github.com/gsuitedevs/apps-script-oauth2/blob/master/README.md * See more: https://developers.google.com/apps-script/reference/script/script-app#getOAuthToken() * * @returns {string} OAuth Token -<<<<<<< HEAD * @throws {Error} */ getAuthToken() { @@ -113,12 +90,6 @@ export class Auth { !('private_key' in this.serviceAccount) ) { throw new Error('No or invalid service account provided'); -======= - */ - getAuthToken() { - if (!this.serviceAccount || !('private_key' in this.serviceAccount)) { - return ScriptApp.getOAuthToken(); ->>>>>>> 1a33360 (Built IFTTA v2) } const service = OAuth2.createService('Service Account') From 6d4e2ebb8ae2be384d3fcccc54a6f91794c116e4 Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 7 Mar 2023 14:17:02 +0100 Subject: [PATCH 29/84] Removed trailing underscore to indicate private properties --- src/helpers/sheets.ts | 12 -- src/target-agents/dv360.ts | 223 +------------------------------- src/target-agents/google-ads.ts | 19 +++ 3 files changed, 22 insertions(+), 232 deletions(-) diff --git a/src/helpers/sheets.ts b/src/helpers/sheets.ts index b4f1dc7..3c903b4 100644 --- a/src/helpers/sheets.ts +++ b/src/helpers/sheets.ts @@ -22,11 +22,7 @@ */ export class SheetsService { defaultMode: string; -<<<<<<< HEAD spreadsheet: GoogleAppsScript.Spreadsheet.Spreadsheet; -======= - spreadsheet_: GoogleAppsScript.Spreadsheet.Spreadsheet; ->>>>>>> 1a33360 (Built IFTTA v2) /** * Constructor. @@ -50,11 +46,7 @@ export class SheetsService { } /** @private @const {?SpreadsheetApp.Spreadsheet} */ -<<<<<<< HEAD this.spreadsheet = spreadsheet; -======= - this.spreadsheet_ = spreadsheet; ->>>>>>> 1a33360 (Built IFTTA v2) /** @type {string} */ this.defaultMode = 'FORMULA'; @@ -172,10 +164,6 @@ export class SheetsService { * @return {?SpreadsheetApp.Spreadsheet} The spreadsheet */ getSpreadsheet() { -<<<<<<< HEAD return this.spreadsheet; -======= - return this.spreadsheet_; ->>>>>>> 1a33360 (Built IFTTA v2) } } diff --git a/src/target-agents/dv360.ts b/src/target-agents/dv360.ts index 79fbb4a..a7161f2 100644 --- a/src/target-agents/dv360.ts +++ b/src/target-agents/dv360.ts @@ -18,28 +18,12 @@ import { Auth } from '../helpers/auth'; import { TargetAgent } from './base'; -<<<<<<< HEAD -<<<<<<< HEAD export enum DV360_ENTITY_STATUS { -======= -enum DV360_ENTITY_STATUS { ->>>>>>> 1a33360 (Built IFTTA v2) -======= -export enum DV360_ENTITY_STATUS { ->>>>>>> 4fbdb4b (Added tests and removed debug code) ACTIVE = 'ENTITY_STATUS_ACTIVE', PAUSED = 'ENTITY_STATUS_PAUSED', } -<<<<<<< HEAD -<<<<<<< HEAD -export enum DV360_ENTITY_TYPE { -======= -enum DV360_ENTITY_TYPE { ->>>>>>> 1a33360 (Built IFTTA v2) -======= export enum DV360_ENTITY_TYPE { ->>>>>>> 4fbdb4b (Added tests and removed debug code) LINE_ITEM = 'LINE_ITEM', INSERTION_ORDER = 'INSERTION_ORDER', } @@ -60,15 +44,7 @@ export class DV360 extends TargetAgent { static friendlyName = 'DV360'; authToken?: string; baseUrl: string; -<<<<<<< HEAD -<<<<<<< HEAD - requiredParameters = ['advertiserId']; -======= - requiredParameters = ['id', 'type', 'advertiserId']; ->>>>>>> 1a33360 (Built IFTTA v2) -======= requiredParameters = ['advertiserId']; ->>>>>>> 4fbdb4b (Added tests and removed debug code) /** * Set the DV360 wrapper configuration @@ -103,26 +79,10 @@ export class DV360 extends TargetAgent { const auth = new Auth(params.serviceAccount ?? undefined); this.authToken = auth.getAuthToken(); -<<<<<<< HEAD -<<<<<<< HEAD if (type === DV360_ENTITY_TYPE.LINE_ITEM) { this.setLineItemStatus(params.advertiserId, identifier, evaluation); } else if (type === DV360_ENTITY_TYPE.INSERTION_ORDER) { this.setInsertionOrderStatus(params.advertiserId, identifier, evaluation); -======= - console.log('Switching', identifier, type, evaluation); - -======= ->>>>>>> 0183214 (Improved validation log output) - if (type === DV360_ENTITY_TYPE.LINE_ITEM) { - this.switchLIStatus_(params.advertiserId, identifier, evaluation); - } else if (type === DV360_ENTITY_TYPE.INSERTION_ORDER) { -<<<<<<< HEAD - this.switchIOStatus(params.advertiserId, identifier, evaluation); ->>>>>>> 1a33360 (Built IFTTA v2) -======= - this.switchIOStatus_(params.advertiserId, identifier, evaluation); ->>>>>>> 4fbdb4b (Added tests and removed debug code) } } @@ -133,15 +93,7 @@ export class DV360 extends TargetAgent { * @param {DV360_ENTITY_TYPE} type * @param {boolean} evaluation * @param {Parameters} params Additional parameters -<<<<<<< HEAD -<<<<<<< HEAD * @returns {string[]} -======= - * @throws {Error} ->>>>>>> 1a33360 (Built IFTTA v2) -======= - * @returns {Array} ->>>>>>> 0183214 (Improved validation log output) */ validate( identifier: string, @@ -156,12 +108,9 @@ export class DV360 extends TargetAgent { this.authToken = auth.getAuthToken(); let status; -<<<<<<< HEAD -<<<<<<< HEAD const errors = []; if (type === DV360_ENTITY_TYPE.LINE_ITEM) { -<<<<<<< HEAD status = this.isLineItemActive(params.advertiserId, identifier); } else if (type === DV360_ENTITY_TYPE.INSERTION_ORDER) { status = this.isInsertionOrderActive(params.advertiserId, identifier); @@ -174,31 +123,6 @@ export class DV360 extends TargetAgent { } return errors; -======= -======= - const errors = []; ->>>>>>> 0183214 (Improved validation log output) - - if (type === DV360_ENTITY_TYPE.LINE_ITEM) { - status = this.isLIActive(params.advertiserId, identifier); -======= - status = this.isLIActive_(params.advertiserId, identifier); ->>>>>>> 4fbdb4b (Added tests and removed debug code) - } else if (type === DV360_ENTITY_TYPE.INSERTION_ORDER) { - status = this.isIOActive_(params.advertiserId, identifier); - } - - if (evaluation !== status) { - errors.push( - `Status for ${identifier} (${type}) should be ${evaluation} but is ${status}` - ); - } -<<<<<<< HEAD ->>>>>>> 1a33360 (Built IFTTA v2) -======= - - return errors; ->>>>>>> 0183214 (Improved validation log output) } /** @@ -209,7 +133,7 @@ export class DV360 extends TargetAgent { * @param {Object|undefined} payload - What should be updated * @returns {JSON} Result of the operation */ - private fetchUrl_(url: string, method = 'get', payload?: Object | undefined) { + private fetchUrl(url: string, method = 'get', payload?: Object | undefined) { const headers = { Authorization: `Bearer ${this.authToken}`, Accept: '*/*', @@ -225,7 +149,6 @@ export class DV360 extends TargetAgent { * * @param {string} advertiserId DV360 Advertiser ID * @param {string} entityId DV360 Line Item/Insertion Order ID -<<<<<<< HEAD * @param {boolean} status Activate on 'true', deactivate on 'false' * @param {string} entity */ @@ -236,18 +159,6 @@ export class DV360 extends TargetAgent { entity: string ) { const newStatus = status -======= - * @param {boolean} turnOn Activate on 'true', deactivate on 'false' - * @param {string} entity - */ - private switchEntityStatus_( - advertiserId: string, - entityId: string, - turnOn: boolean, - entity: string - ) { - const newStatus = turnOn ->>>>>>> 1a33360 (Built IFTTA v2) ? DV360_ENTITY_STATUS.ACTIVE : DV360_ENTITY_STATUS.PAUSED; const updateMask = { @@ -256,24 +167,14 @@ export class DV360 extends TargetAgent { const url = `${this.baseUrl}/advertisers/${advertiserId}/${entity}/${entityId}?updateMask=entityStatus`; - this.fetchUrl_(url, 'patch', updateMask); + this.fetchUrl(url, 'patch', updateMask); -<<<<<<< HEAD -<<<<<<< HEAD - console.log( -======= - Logger.log( ->>>>>>> 1a33360 (Built IFTTA v2) -======= console.log( ->>>>>>> 4fbdb4b (Added tests and removed debug code) `* [DV360:switch ${entity}]: DONE, ID: ${entityId} new status ${newStatus}` ); } /** -<<<<<<< HEAD -<<<<<<< HEAD * Change Line Item status (Active/Paused) for the specified LI ID. * * @param {string} advertiserId - DV360 Advertiser ID @@ -294,75 +195,18 @@ export class DV360 extends TargetAgent { } /** -======= ->>>>>>> 1a33360 (Built IFTTA v2) * Change Insertion Order status (Active/Paused) for the specified IO ID. * * @param {string} advertiserId DV360 Advertiser ID * @param {string} insertionOrderId DV360 Line Item ID * @param {boolean} turnOn Activate IO on 'true', deactivate on 'false' */ -<<<<<<< HEAD private setInsertionOrderStatus( -======= - private switchIOStatus( ->>>>>>> 1a33360 (Built IFTTA v2) advertiserId: string, insertionOrderId: string, turnOn: boolean ) { -<<<<<<< HEAD this.setEntityStatus( -======= - this.switchEntityStatus( ->>>>>>> 1a33360 (Built IFTTA v2) - advertiserId, - insertionOrderId, - turnOn, - 'insertionOrders' - ); - } - - /** -<<<<<<< HEAD -======= -======= ->>>>>>> 4fbdb4b (Added tests and removed debug code) - * Change Line Item status (Active/Paused) for the specified LI ID. - * - * @param {string} advertiserId - DV360 Advertiser ID - * @param {string} lineItemId - DV360 Line Item ID - * @param {boolean} turnOn - Activate LI on 'true', deactivate on 'false' - */ - private switchLIStatus_( - advertiserId: string, - lineItemId: string, - turnOn: boolean - ) { - const newStatus = this.switchEntityStatus_( - advertiserId, - lineItemId, - turnOn, - 'lineItems' - ); - } - - /** -<<<<<<< HEAD ->>>>>>> 1a33360 (Built IFTTA v2) -======= - * Change Insertion Order status (Active/Paused) for the specified IO ID. - * - * @param {string} advertiserId DV360 Advertiser ID - * @param {string} insertionOrderId DV360 Line Item ID - * @param {boolean} turnOn Activate IO on 'true', deactivate on 'false' - */ - private switchIOStatus_( - advertiserId: string, - insertionOrderId: string, - turnOn: boolean - ) { - this.switchEntityStatus_( advertiserId, insertionOrderId, turnOn, @@ -371,7 +215,6 @@ export class DV360 extends TargetAgent { } /** ->>>>>>> 4fbdb4b (Added tests and removed debug code) * Get DV360 entity for the specified ID. * See more: https://developers.google.com/display-video/api/reference/rest/v1/advertisers.lineItems * See more: https://developers.google.com/display-video/api/reference/rest/v1/advertisers.insertionOrders @@ -381,68 +224,27 @@ export class DV360 extends TargetAgent { * @param {string} entity Entity (e.g. lineItems/insertionOrders), see API refernece * @returns {Entity} Entity object */ - private getEntity_( + private getEntity( advertiserId: string, entityId: string, entity: string ): Entity { const url = `${this.baseUrl}/advertisers/${advertiserId}/${entity}/${entityId}`; -<<<<<<< HEAD return this.fetchUrl(url) as Entity; } /** -<<<<<<< HEAD -======= - * Get DV360 entity for the specified ID. - * See more: https://developers.google.com/display-video/api/reference/rest/v1/advertisers.lineItems - * See more: https://developers.google.com/display-video/api/reference/rest/v1/advertisers.insertionOrders - * - * @param {number} advertiserId DV360 Advertiser ID - * @param {number} entityId DV360 Line Item/Insertion Order ID - * @param {string} entity Entity (e.g. lineItems/insertionOrders), see API refernece - * @returns {DV360_ENTITY_STATUS} Entity status - */ - private getEntityStatus( - advertiserId: string, - entityId: string, - entity: string - ): DV360_ENTITY_STATUS { - const e = this.getEntity(advertiserId, entityId, entity); - return e.entityStatus; -======= - return this.fetchUrl_(url) as Entity; ->>>>>>> 4fbdb4b (Added tests and removed debug code) - } - - /** ->>>>>>> 1a33360 (Built IFTTA v2) * Return true if the entity is active else false. * * @param {string} advertiserId DV360 Advertiser ID * @param {string} lineItemId DV360 Line Item ID * @returns {boolean} */ -<<<<<<< HEAD -<<<<<<< HEAD private isLineItemActive(advertiserId: string, lineItemId: string) { const entity = this.getEntity(advertiserId, lineItemId, 'lineItems'); return DV360_ENTITY_STATUS.ACTIVE == entity.entityStatus; -======= - private isLIActive(advertiserId: string, lineItemId: string) { - return ( - DV360_ENTITY_STATUS.ACTIVE == - this.getEntityStatus(advertiserId, lineItemId, 'lineItems') - ); ->>>>>>> 1a33360 (Built IFTTA v2) -======= - private isLIActive_(advertiserId: string, lineItemId: string) { - const entity = this.getEntity_(advertiserId, lineItemId, 'lineItems'); - - return DV360_ENTITY_STATUS.ACTIVE == entity.entityStatus; ->>>>>>> 4fbdb4b (Added tests and removed debug code) } /** @@ -452,8 +254,6 @@ export class DV360 extends TargetAgent { * @param {string} insertionOrderId DV360 Insertion Order ID * @returns {boolean} */ -<<<<<<< HEAD -<<<<<<< HEAD private isInsertionOrderActive( advertiserId: string, insertionOrderId: string @@ -465,22 +265,5 @@ export class DV360 extends TargetAgent { ); return DV360_ENTITY_STATUS.ACTIVE == entity.entityStatus; -======= - private isIOActive(advertiserId: string, insertionOrderId: string) { - return ( - DV360_ENTITY_STATUS.ACTIVE == - this.getEntityStatus(advertiserId, insertionOrderId, 'insertionOrders') - ); ->>>>>>> 1a33360 (Built IFTTA v2) -======= - private isIOActive_(advertiserId: string, insertionOrderId: string) { - const entity = this.getEntity_( - advertiserId, - insertionOrderId, - 'insertionOrders' - ); - - return DV360_ENTITY_STATUS.ACTIVE == entity.entityStatus; ->>>>>>> 4fbdb4b (Added tests and removed debug code) } } diff --git a/src/target-agents/google-ads.ts b/src/target-agents/google-ads.ts index 3bad74e..00eec23 100644 --- a/src/target-agents/google-ads.ts +++ b/src/target-agents/google-ads.ts @@ -311,7 +311,11 @@ export class GoogleAds extends TargetAgent { * @param {string[]} ids * @returns {string[]} */ +<<<<<<< HEAD private getAdsById(customerId: any, ids: string[]): Entity[] { +======= + private getAdsById(customerId: any, ids: Array): Array { +>>>>>>> 5d3b159 (Removed trailing underscore to indicate private properties) const query = ` SELECT ad_group_ad.ad.id, @@ -346,7 +350,14 @@ export class GoogleAds extends TargetAgent { * @param {string[]} ids * @returns {Entity[]} */ +<<<<<<< HEAD private getAdGroupsById(customerId: string, ids: string[]): Entity[] { +======= + private getAdGroupsById( + customerId: string, + ids: Array + ): Array { +>>>>>>> 5d3b159 (Removed trailing underscore to indicate private properties) const query = ` SELECT ad_group.id, @@ -378,7 +389,11 @@ export class GoogleAds extends TargetAgent { * @param {string} label * @returns {Entity[]} */ +<<<<<<< HEAD private getAdsByLabel(customerId: any, label: string): Entity[] { +======= + private getAdsByLabel(customerId: any, label: string): Array { +>>>>>>> 5d3b159 (Removed trailing underscore to indicate private properties) const labelResource = this.getAdLabelByName(customerId, label); const query = ` @@ -438,7 +453,11 @@ export class GoogleAds extends TargetAgent { * @param {string} label * @returns {Entity[]} */ +<<<<<<< HEAD private getAdGroupsByLabel(customerId: any, label: string): Entity[] { +======= + private getAdGroupsByLabel(customerId: any, label: string): Array { +>>>>>>> 5d3b159 (Removed trailing underscore to indicate private properties) const labelResource = this.getAdGroupLabelByName(customerId, label); const query = ` From cf837e76e30053a04e522a39a740c0cec167ff31 Mon Sep 17 00:00:00 2001 From: paranerd Date: Wed, 8 Mar 2023 14:35:17 +0100 Subject: [PATCH 30/84] Addressing PR comments --- src/helpers/api.ts | 4 ++++ src/helpers/dynamic-column-headers.ts | 18 ------------------ src/helpers/jpath.ts | 4 ---- src/target-agents/base.ts | 4 ---- src/target-agents/google-ads.ts | 19 ------------------- 5 files changed, 4 insertions(+), 45 deletions(-) diff --git a/src/helpers/api.ts b/src/helpers/api.ts index c2fd768..c5a5b79 100644 --- a/src/helpers/api.ts +++ b/src/helpers/api.ts @@ -89,10 +89,14 @@ export class ApiHelper { Logger.log('HTTP code: ' + resRaw.getResponseCode()); Logger.log('API error: ' + resRaw.getContentText()); Logger.log('URL: ' + url); +<<<<<<< HEAD <<<<<<< HEAD Logger.log('Parameters: ' + JSON.stringify(params)); ======= >>>>>>> 1a33360 (Built IFTTA v2) +======= + Logger.log('Parameters: ' + JSON.stringify(params)); +>>>>>>> aa0c034 (Addressing PR comments) throw new Error(resRaw.getContentText()); } diff --git a/src/helpers/dynamic-column-headers.ts b/src/helpers/dynamic-column-headers.ts index 8a2a5b4..ed6abeb 100644 --- a/src/helpers/dynamic-column-headers.ts +++ b/src/helpers/dynamic-column-headers.ts @@ -18,25 +18,15 @@ import { JPath } from './jpath'; export class DynamicColumnHeaders { -<<<<<<< HEAD headers: string[]; -======= - headers: Array; ->>>>>>> 1a33360 (Built IFTTA v2) static namespaceSeparator = ':'; /** * Constructor. * -<<<<<<< HEAD * @param {string[]} headers */ constructor(headers: string[]) { -======= - * @param {Array} headers - */ - constructor(headers: Array) { ->>>>>>> 1a33360 (Built IFTTA v2) this.headers = headers; } @@ -48,22 +38,14 @@ export class DynamicColumnHeaders { * Per default it will nest results under the respective group, which is '0' * if none exists. * -<<<<<<< HEAD * @param {string[]} row -======= - * @param {Array} row ->>>>>>> 1a33360 (Built IFTTA v2) * @param {string} namespace * @param {string} separator * @param {boolean} includeGroup * @returns {Record} */ getMappedValues( -<<<<<<< HEAD row: string[], -======= - row: Array, ->>>>>>> 1a33360 (Built IFTTA v2) namespace: string | undefined = undefined, includeGroup: boolean = true ): Record { diff --git a/src/helpers/jpath.ts b/src/helpers/jpath.ts index 48811bf..153764e 100644 --- a/src/helpers/jpath.ts +++ b/src/helpers/jpath.ts @@ -19,11 +19,7 @@ export class JPath { /** * Get Object entry value for the provided path. * -<<<<<<< HEAD * @param {string} path Format '...' -======= - * @param {string} path Format "..." ->>>>>>> 1a33360 (Built IFTTA v2) * @param {Object} json JSON or JavaScript Object * @returns {string} Value from JSON or null if value does not exist */ diff --git a/src/target-agents/base.ts b/src/target-agents/base.ts index 6d1921e..79ce4fe 100644 --- a/src/target-agents/base.ts +++ b/src/target-agents/base.ts @@ -38,11 +38,7 @@ export class TargetAgent extends ApiHelper { type: string, evaluation: boolean, params: Object -<<<<<<< HEAD ): string[] { -======= - ): Array { ->>>>>>> 0183214 (Improved validation log output) throw new Error('Method not implemented.'); } diff --git a/src/target-agents/google-ads.ts b/src/target-agents/google-ads.ts index 00eec23..3bad74e 100644 --- a/src/target-agents/google-ads.ts +++ b/src/target-agents/google-ads.ts @@ -311,11 +311,7 @@ export class GoogleAds extends TargetAgent { * @param {string[]} ids * @returns {string[]} */ -<<<<<<< HEAD private getAdsById(customerId: any, ids: string[]): Entity[] { -======= - private getAdsById(customerId: any, ids: Array): Array { ->>>>>>> 5d3b159 (Removed trailing underscore to indicate private properties) const query = ` SELECT ad_group_ad.ad.id, @@ -350,14 +346,7 @@ export class GoogleAds extends TargetAgent { * @param {string[]} ids * @returns {Entity[]} */ -<<<<<<< HEAD private getAdGroupsById(customerId: string, ids: string[]): Entity[] { -======= - private getAdGroupsById( - customerId: string, - ids: Array - ): Array { ->>>>>>> 5d3b159 (Removed trailing underscore to indicate private properties) const query = ` SELECT ad_group.id, @@ -389,11 +378,7 @@ export class GoogleAds extends TargetAgent { * @param {string} label * @returns {Entity[]} */ -<<<<<<< HEAD private getAdsByLabel(customerId: any, label: string): Entity[] { -======= - private getAdsByLabel(customerId: any, label: string): Array { ->>>>>>> 5d3b159 (Removed trailing underscore to indicate private properties) const labelResource = this.getAdLabelByName(customerId, label); const query = ` @@ -453,11 +438,7 @@ export class GoogleAds extends TargetAgent { * @param {string} label * @returns {Entity[]} */ -<<<<<<< HEAD private getAdGroupsByLabel(customerId: any, label: string): Entity[] { -======= - private getAdGroupsByLabel(customerId: any, label: string): Array { ->>>>>>> 5d3b159 (Removed trailing underscore to indicate private properties) const labelResource = this.getAdGroupLabelByName(customerId, label); const query = ` From db3c6be89f10e4c3607289369a7aa9036528e615 Mon Sep 17 00:00:00 2001 From: paranerd Date: Thu, 9 Mar 2023 11:27:29 +0100 Subject: [PATCH 31/84] Removed merge artifacts --- src/helpers/api.ts | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/helpers/api.ts b/src/helpers/api.ts index c5a5b79..2ccac8e 100644 --- a/src/helpers/api.ts +++ b/src/helpers/api.ts @@ -89,14 +89,7 @@ export class ApiHelper { Logger.log('HTTP code: ' + resRaw.getResponseCode()); Logger.log('API error: ' + resRaw.getContentText()); Logger.log('URL: ' + url); -<<<<<<< HEAD -<<<<<<< HEAD Logger.log('Parameters: ' + JSON.stringify(params)); -======= ->>>>>>> 1a33360 (Built IFTTA v2) -======= - Logger.log('Parameters: ' + JSON.stringify(params)); ->>>>>>> aa0c034 (Addressing PR comments) throw new Error(resRaw.getContentText()); } From c5d83ff7c2b6bc0671b79224e6b044dda02c8aa1 Mon Sep 17 00:00:00 2001 From: paranerd Date: Thu, 9 Mar 2023 11:39:34 +0100 Subject: [PATCH 32/84] Fixed DV360 and Google Ads tests --- src/test/dv360.test.ts | 12 ++++++------ src/test/google-ads.test.ts | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/test/dv360.test.ts b/src/test/dv360.test.ts index 09115ce..6e731d2 100644 --- a/src/test/dv360.test.ts +++ b/src/test/dv360.test.ts @@ -17,22 +17,22 @@ describe('DV360 Target Agent', () => { // Set up spies jest.spyOn(DV360.prototype as any, 'fetchUrl').mockReturnValue(null); - const switchLIStatusSpy = jest.spyOn( + const setLineItemStatusSpy = jest.spyOn( DV360.prototype as any, - 'switchLineItemStatus' + 'setLineItemStatus' ); - const switchEntityStatusSpy = jest.spyOn( + const setEntityStatusSpy = jest.spyOn( DV360.prototype as any, - 'switchEntityStatus' + 'setEntityStatus' ); // Call function dv360.process('1234', DV360_ENTITY_TYPE.LINE_ITEM, true, params); // Evaluate - expect(switchLIStatusSpy).toHaveBeenCalledWith('1', '1234', true); - expect(switchEntityStatusSpy).toHaveBeenCalledWith( + expect(setLineItemStatusSpy).toHaveBeenCalledWith('1', '1234', true); + expect(setEntityStatusSpy).toHaveBeenCalledWith( '1', '1234', true, diff --git a/src/test/google-ads.test.ts b/src/test/google-ads.test.ts index 96ffdcd..f5c5ec5 100644 --- a/src/test/google-ads.test.ts +++ b/src/test/google-ads.test.ts @@ -89,7 +89,7 @@ describe('Google Ads Target Agent', () => { GOOGLE_ADS_ENTITY_STATUS.ENABLED ); - expect(getAdsByIdSpy).toHaveBeenCalledWith('1', [1234]); + expect(getAdsByIdSpy).toHaveBeenCalledWith('1', ['1234']); expect(updateEntityStatusSpy).toHaveBeenCalledWith( 'customers/1/adGroupAds:mutate', @@ -135,7 +135,7 @@ describe('Google Ads Target Agent', () => { GOOGLE_ADS_ENTITY_STATUS.ENABLED ); - expect(getAdsByIdSpy).toHaveBeenCalledWith('1', [1234, 2345]); + expect(getAdsByIdSpy).toHaveBeenCalledWith('1', ['1234', '2345']); expect(updateEntityStatusSpy).toHaveBeenCalledWith( 'customers/1/adGroupAds:mutate', From b2cafad9acbf97d1f38f37e8f376b12f6ebc715f Mon Sep 17 00:00:00 2001 From: paranerd Date: Thu, 9 Mar 2023 11:52:14 +0100 Subject: [PATCH 33/84] Removed debug code --- src/index.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/index.ts b/src/index.ts index 23fc914..3ce30cb 100644 --- a/src/index.ts +++ b/src/index.ts @@ -120,11 +120,6 @@ function main(mode: MODE) { for (const group in sourceParams) { const source = sourceParams[group]; - console.log('calling api'); - console.log('url', source.url); - console.log('headers', JSON.stringify(source.headers)); - console.log('params', JSON.stringify(source.params)); - const res = apiHelper.callApi( source.url, source.headers, From ebe203c4fc62b9f930343c9a0240140f80fb42db Mon Sep 17 00:00:00 2001 From: paranerd Date: Thu, 9 Mar 2023 12:05:46 +0100 Subject: [PATCH 34/84] Fixed error output --- src/index.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/index.ts b/src/index.ts index 3ce30cb..0b23ac4 100644 --- a/src/index.ts +++ b/src/index.ts @@ -181,9 +181,7 @@ function main(mode: MODE) { ); } } catch (err) { - status = `Error (${Utils.getCurrentDateString()}): ${JSON.stringify( - err - )}`; + status = `Error (${Utils.getCurrentDateString()}): ${err}`; } finally { // Update status getSheetsService().setCellValue( From 1c2511f6b5c00acbeb43a3faa87d8ef0cbb1b9ca Mon Sep 17 00:00:00 2001 From: paranerd Date: Thu, 9 Mar 2023 12:06:23 +0100 Subject: [PATCH 35/84] Fixed variable naming and logging --- src/target-agents/dv360.ts | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/target-agents/dv360.ts b/src/target-agents/dv360.ts index a7161f2..b99b21f 100644 --- a/src/target-agents/dv360.ts +++ b/src/target-agents/dv360.ts @@ -165,13 +165,11 @@ export class DV360 extends TargetAgent { entityStatus: newStatus, }; + console.log(`Setting status of ${entityId} to ${newStatus}`); + const url = `${this.baseUrl}/advertisers/${advertiserId}/${entity}/${entityId}?updateMask=entityStatus`; this.fetchUrl(url, 'patch', updateMask); - - console.log( - `* [DV360:switch ${entity}]: DONE, ID: ${entityId} new status ${newStatus}` - ); } /** @@ -179,17 +177,17 @@ export class DV360 extends TargetAgent { * * @param {string} advertiserId - DV360 Advertiser ID * @param {string} lineItemId - DV360 Line Item ID - * @param {boolean} turnOn - Activate LI on 'true', deactivate on 'false' + * @param {boolean} status - Activate LI on 'true', deactivate on 'false' */ private setLineItemStatus( advertiserId: string, lineItemId: string, - turnOn: boolean + status: boolean ) { const newStatus = this.setEntityStatus( advertiserId, lineItemId, - turnOn, + status, 'lineItems' ); } @@ -199,17 +197,17 @@ export class DV360 extends TargetAgent { * * @param {string} advertiserId DV360 Advertiser ID * @param {string} insertionOrderId DV360 Line Item ID - * @param {boolean} turnOn Activate IO on 'true', deactivate on 'false' + * @param {boolean} status Activate IO on 'true', deactivate on 'false' */ private setInsertionOrderStatus( advertiserId: string, insertionOrderId: string, - turnOn: boolean + status: boolean ) { this.setEntityStatus( advertiserId, insertionOrderId, - turnOn, + status, 'insertionOrders' ); } From 40745ae0b69e5c6e0d4b8ad60bb4c9bc72b2ddae Mon Sep 17 00:00:00 2001 From: paranerd Date: Thu, 9 Mar 2023 17:19:04 +0100 Subject: [PATCH 36/84] Added required assets --- .eslintrc.js | 17 +++++ CONTRIBUTING | 32 ++++++++ LICENSE | 202 +++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 2 +- jest.config.js | 17 +++++ 5 files changed, 269 insertions(+), 1 deletion(-) create mode 100644 CONTRIBUTING create mode 100644 LICENSE diff --git a/.eslintrc.js b/.eslintrc.js index 7265f31..b9ea679 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,3 +1,20 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + module.exports = { env: { browser: true, diff --git a/CONTRIBUTING b/CONTRIBUTING new file mode 100644 index 0000000..e635be7 --- /dev/null +++ b/CONTRIBUTING @@ -0,0 +1,32 @@ +# How to Contribute + +We would love to accept your patches and contributions to this project. + +## Before you begin + +### Sign our Contributor License Agreement + +Contributions to this project must be accompanied by a +[Contributor License Agreement](https://cla.developers.google.com/about) (CLA). +You (or your employer) retain the copyright to your contribution; this simply +gives us permission to use and redistribute your contributions as part of the +project. + +If you or your current employer have already signed the Google CLA (even if it +was for a different project), you probably don't need to do it again. + +Visit to see your current agreements or to +sign a new one. + +### Review our Community Guidelines + +This project follows [Google's Open Source Community +Guidelines](https://opensource.google/conduct/). + +## Contribution process + +### Code Reviews + +All submissions, including submissions by project members, require review. We +use [GitHub pull requests](https://docs.github.com/articles/about-pull-requests) +for this purpose. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md index 58b38fa..f7d85f6 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ Why would you want to do this? ## Prerequisites - A copy of the [Google Sheets Template](https://docs.google.com/spreadsheets/d/1EKcPGQ1Vr6LyyQYeYE0-T2gPzNhemVTxsvpSNC5arhE) -- Google Cloud Project with DV360 API enabled +- Google Cloud Project with DV360 API and Ads API enabled - Any JSON API to be used as data source - An account for activation (see [Supported Target Agents](#supported-target-agents) below) diff --git a/jest.config.js b/jest.config.js index e3bce81..05aa662 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,3 +1,20 @@ +/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + module.exports = { preset: 'ts-jest', testEnvironment: 'node', From cd73ab3f49ea790ea2a315f5bb868585e392ae37 Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 14 Mar 2023 15:40:35 +0100 Subject: [PATCH 37/84] Extended documentation on how to start developing --- README.md | 49 ++++++++++++++++++++++++++++++++++++++++++++++ src/helpers/api.ts | 7 ------- 2 files changed, 49 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index f7d85f6..2457834 100644 --- a/README.md +++ b/README.md @@ -255,6 +255,55 @@ If you need any parameters passed to the Custom Parser, you can add those using ## Developer Guide +### How to work with the code + +1. Make sure Node and npm are installed + +1. Clone this repository + + ``` + git clone https://github.com/google/if-this-then-ad.git + ``` + +1. Move into the repo folder + + ``` + cd if-this-then-ad/ + ``` + +1. Install dependencies + + ``` + npm i + ``` + +1. Authenticate clasp (if not already done before) + + ``` + clasp login + ``` + +1. Build Apps Script target code + + This will transpile TypeScript to JavaScript and finally bundle everything into `dist/index.js` + ``` + npm run build + ``` + +1. Create Google Sheet to deploy to + + ``` + clasp create --type sheets --title IFTTA-dev --rootDir ./dist && mv ./dist/.clasp.json . + ``` + +1. Deploy + + This will run all tests, transpile TypeScript to JavaScript, bundle everything into `dist/index.js` and finally deploy it with clasp + + ``` + npm run deploy + ``` + ### Application Flow Here's a high level overview of what's happening under the hood: diff --git a/src/helpers/api.ts b/src/helpers/api.ts index 2ccac8e..3da5a0d 100644 --- a/src/helpers/api.ts +++ b/src/helpers/api.ts @@ -18,13 +18,6 @@ export class ApiHelper { private cache: Record = {}; - /** - * Constructor. - */ - constructor() { - this.cache = {}; - } - /** * Call API. * From ba77bee645548da1ccdc0a4a736b09d36df7285f Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 14 Mar 2023 16:10:26 +0100 Subject: [PATCH 38/84] Fixed Developer documentation --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2457834..17ae00a 100644 --- a/README.md +++ b/README.md @@ -293,7 +293,7 @@ If you need any parameters passed to the Custom Parser, you can add those using 1. Create Google Sheet to deploy to ``` - clasp create --type sheets --title IFTTA-dev --rootDir ./dist && mv ./dist/.clasp.json . + clasp create --type sheets --title IFTTA-dev --rootDir ./dist && mv ./dist/.clasp.json .clasp-dev.json ``` 1. Deploy From 80868be474ec141cd718b0519c8dd3a0d9924fa8 Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 21 Mar 2023 09:12:54 +0100 Subject: [PATCH 39/84] Updated configurations and scripts --- .editorconfig | 7 + .eslintignore | 1 + .eslintrc.js | 54 - .eslintrc.json | 19 + .gitignore | 1 - .prettierrc | 4 - .prettierrc.json | 5 + LICENSE | 403 +- jest.config.js | 22 - jest.config.json | 6 + license-config.json | 29 + license-header.txt | 13 + package-lock.json | 10402 ++++++++++++++++++++++++++---------------- package.json | 37 +- rollup.config.mjs | 42 +- tsconfig.json | 116 +- 16 files changed, 6888 insertions(+), 4273 deletions(-) create mode 100644 .editorconfig delete mode 100644 .eslintrc.js create mode 100644 .eslintrc.json delete mode 100644 .prettierrc create mode 100644 .prettierrc.json delete mode 100644 jest.config.js create mode 100644 jest.config.json create mode 100644 license-config.json create mode 100644 license-header.txt diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..4ba6ec8 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,7 @@ +root = true +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +insert_final_newline = true diff --git a/.eslintignore b/.eslintignore index 3675648..bcec960 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,2 +1,3 @@ node_modules/* build/* +testing diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index b9ea679..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1,54 +0,0 @@ -/** - * @license - * Copyright 2023 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -module.exports = { - env: { - browser: true, - es2020: true, - }, - extends: ['standard-with-typescript', 'google', 'prettier'], - overrides: [], - parserOptions: { - ecmaVersion: 'latest', - sourceType: 'module', - }, - plugins: ['prettier'], - rules: { - 'valid-jsdoc': [ - 2, - { - prefer: { - return: 'returns', - }, - requireReturnDescription: false, - requireParamDescription: false, - requireReturn: false, - }, - ], - 'new-cap': 'off', - 'prettier/prettier': [ - 'warn', - { - singleQuote: true, - semi: true, - trailingComma: 'es5', - }, - ], - 'no-unused-vars': 'off', - '@typescript-eslint/no-unused-vars': 'error', - }, -}; diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..c4ce2d1 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,19 @@ +{ + "env": { + "browser": true, + "node": true, + "es2020": true + }, + "extends": ["./node_modules/gts", "prettier"], + "overrides": [], + "parserOptions": { + "ecmaVersion": "latest", + "sourceType": "module", + "project": "./tsconfig.json" + }, + "plugins": ["prettier"], + "rules": { + "prettier/prettier": "error" + }, + "ignorePatterns": ["src/external/**/*"] +} diff --git a/.gitignore b/.gitignore index 37b761e..3ab1411 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,3 @@ dist/ build/ .DS_Store .clasp*.json -setup.log diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index 937375d..0000000 --- a/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "semi": true, - "singleQuote": true -} diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..c8c9721 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,5 @@ +{ + "singleQuote": true, + "trailingComma": "es5", + "arrowParens": "avoid" +} diff --git a/LICENSE b/LICENSE index d645695..cd482d8 100644 --- a/LICENSE +++ b/LICENSE @@ -1,202 +1,201 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, +and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by +the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all +other entities that control, are controlled by, or are under common +control with that entity. For the purposes of this definition, +"control" means (i) the power, direct or indirect, to cause the +direction or management of such entity, whether by contract or +otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity +exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, +including but not limited to software source code, documentation +source, and configuration files. + +"Object" form shall mean any form resulting from mechanical +transformation or translation of a Source form, including but +not limited to compiled object code, generated documentation, +and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or +Object form, made available under the License, as indicated by a +copyright notice that is included in or attached to the work +(an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object +form, that is based on (or derived from) the Work and for which the +editorial revisions, annotations, elaborations, or other modifications +represent, as a whole, an original work of authorship. For the purposes +of this License, Derivative Works shall not include works that remain +separable from, or merely link (or bind by name) to the interfaces of, +the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including +the original version of the Work and any modifications or additions +to that Work or Derivative Works thereof, that is intentionally +submitted to Licensor for inclusion in the Work by the copyright owner +or by an individual or Legal Entity authorized to submit on behalf of +the copyright owner. For the purposes of this definition, "submitted" +means any form of electronic, verbal, or written communication sent +to the Licensor or its representatives, including but not limited to +communication on electronic mailing lists, source code control systems, +and issue tracking systems that are managed by, or on behalf of, the +Licensor for the purpose of discussing and improving the Work, but +excluding communication that is conspicuously marked or otherwise +designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity +on behalf of whom a Contribution has been received by Licensor and +subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable +copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the +Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable +(except as stated in this section) patent license to make, have made, +use, offer to sell, sell, import, and otherwise transfer the Work, +where such license applies only to those patent claims licensable +by such Contributor that are necessarily infringed by their +Contribution(s) alone or by combination of their Contribution(s) +with the Work to which such Contribution(s) was submitted. If You +institute patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the Work +or a Contribution incorporated within the Work constitutes direct +or contributory patent infringement, then any patent licenses +granted to You under this License for that Work shall terminate +as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the +Work or Derivative Works thereof in any medium, with or without +modifications, and in Source or Object form, provided that You +meet the following conditions: + +(a) You must give any other recipients of the Work or +Derivative Works a copy of this License; and + +(b) You must cause any modified files to carry prominent notices +stating that You changed the files; and + +(c) You must retain, in the Source form of any Derivative Works +that You distribute, all copyright, patent, trademark, and +attribution notices from the Source form of the Work, +excluding those notices that do not pertain to any part of +the Derivative Works; and + +(d) If the Work includes a "NOTICE" text file as part of its +distribution, then any Derivative Works that You distribute must +include a readable copy of the attribution notices contained +within such NOTICE file, excluding those notices that do not +pertain to any part of the Derivative Works, in at least one +of the following places: within a NOTICE text file distributed +as part of the Derivative Works; within the Source form or +documentation, if provided along with the Derivative Works; or, +within a display generated by the Derivative Works, if and +wherever such third-party notices normally appear. The contents +of the NOTICE file are for informational purposes only and +do not modify the License. You may add Your own attribution +notices within Derivative Works that You distribute, alongside +or as an addendum to the NOTICE text from the Work, provided +that such additional attribution notices cannot be construed +as modifying the License. + +You may add Your own copyright statement to Your modifications and +may provide additional or different license terms and conditions +for use, reproduction, or distribution of Your modifications, or +for any such Derivative Works as a whole, provided Your use, +reproduction, and distribution of the Work otherwise complies with +the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, +any Contribution intentionally submitted for inclusion in the Work +by You to the Licensor shall be under the terms and conditions of +this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify +the terms of any separate license agreement you may have executed +with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade +names, trademarks, service marks, or product names of the Licensor, +except as required for reasonable and customary use in describing the +origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or +agreed to in writing, Licensor provides the Work (and each +Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +implied, including, without limitation, any warranties or conditions +of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A +PARTICULAR PURPOSE. You are solely responsible for determining the +appropriateness of using or redistributing the Work and assume any +risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, +whether in tort (including negligence), contract, or otherwise, +unless required by applicable law (such as deliberate and grossly +negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, +incidental, or consequential damages of any character arising as a +result of this License or out of the use or inability to use the +Work (including but not limited to damages for loss of goodwill, +work stoppage, computer failure or malfunction, or any and all +other commercial damages or losses), even if such Contributor +has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing +the Work or Derivative Works thereof, You may choose to offer, +and charge a fee for, acceptance of support, warranty, indemnity, +or other liability obligations and/or rights consistent with this +License. However, in accepting such obligations, You may act only +on Your own behalf and on Your sole responsibility, not on behalf +of any other Contributor, and only if You agree to indemnify, +defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason +of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + +To apply the Apache License to your work, attach the following +boilerplate notice, with the fields enclosed by brackets "[]" +replaced with your own identifying information. (Don't include +the brackets!) The text should be enclosed in the appropriate +comment syntax for the file format. We also recommend that a +file or class name and description of purpose be included on the +same "printed page" as the copyright notice for easier +identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index 05aa662..0000000 --- a/jest.config.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * @license - * Copyright 2023 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -module.exports = { - preset: 'ts-jest', - testEnvironment: 'node', - modulePathIgnorePatterns: ['/dist'], -}; diff --git a/jest.config.json b/jest.config.json new file mode 100644 index 0000000..8470c8f --- /dev/null +++ b/jest.config.json @@ -0,0 +1,6 @@ +{ + "preset": "ts-jest", + "testEnvironment": "node", + "modulePathIgnorePatterns": ["/dist/", "/build/"], + "testPathIgnorePatterns": ["/dist/", "/build/"] +} diff --git a/license-config.json b/license-config.json new file mode 100644 index 0000000..2fcc868 --- /dev/null +++ b/license-config.json @@ -0,0 +1,29 @@ +{ + "ignore": [ + ".claspignore", + ".editorconfig", + ".eslintignore", + ".gitignore", + ".prettierignore", + "*.txt", + "CONTRIBUTING", + "build", + "dist", + "test" + ], + "license": "license-header.txt", + "licenseFormats": { + "js|ts|mjs": { + "prepend": "/**", + "append": " */", + "eachLine": { + "prepend": " * " + } + }, + "html|md": { + "prepend": "" + } + }, + "trailingWhitespace": "TRIM" +} diff --git a/license-header.txt b/license-header.txt new file mode 100644 index 0000000..46dfc05 --- /dev/null +++ b/license-header.txt @@ -0,0 +1,13 @@ +Copyright 2023 Google LLC + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/package-lock.json b/package-lock.json index 57e12ef..6c60df3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,20 +7,26 @@ "": { "name": "event-based-marketing", "version": "0.0.1", - "devDependencies": { + "dependencies": { "@google/clasp": "^2.4.2", "@rollup/plugin-node-resolve": "^15.0.1", - "@types/google-apps-script": "^1.0.57", + "@types/google-apps-script": "^1.0.59", "@types/google-apps-script-oauth2": "^38.0.0", - "@types/jest": "^29.4.0", - "eslint": "^8.34.0", + "@types/jest": "^29.5.0", + "@typescript-eslint/eslint-plugin": "^5.56.0", + "eslint": "^8.36.0", "eslint-config-google": "^0.14.0", - "eslint-config-prettier": "^8.6.0", + "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^4.2.1", - "jest": "^29.4.3", - "prettier": "^2.8.4", - "rollup": "^3.17.2", + "gts": "^3.1.1", + "jest": "^29.5.0", + "license-check-and-add": "^4.0.5", + "ncp": "^2.0.0", + "prettier": "^2.8.5", + "rimraf": "^4.4.0", + "rollup": "^3.20.0", "rollup-plugin-cleanup": "^3.2.1", + "rollup-plugin-license": "^3.0.1", "ts-jest": "^29.0.5", "typescript": "^4.9.5" } @@ -29,7 +35,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.1.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -42,7 +47,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, "dependencies": { "@babel/highlight": "^7.18.6" }, @@ -54,27 +58,25 @@ "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz", "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==", - "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.0.tgz", - "integrity": "sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA==", - "dev": true, + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.3.tgz", + "integrity": "sha512-qIJONzoa/qiHghnm0l1n4i/6IIziDpzqc36FBs4pzMhDUraHqponwJLiAKm1hGLP3OSB/TVNz6rMwVGpwxxySw==", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.21.0", + "@babel/generator": "^7.21.3", "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.21.0", + "@babel/helper-module-transforms": "^7.21.2", "@babel/helpers": "^7.21.0", - "@babel/parser": "^7.21.0", + "@babel/parser": "^7.21.3", "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.0", - "@babel/types": "^7.21.0", + "@babel/traverse": "^7.21.3", + "@babel/types": "^7.21.3", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -92,16 +94,14 @@ "node_modules/@babel/core/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 + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "node_modules/@babel/generator": { - "version": "7.21.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz", - "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==", - "dev": true, + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.3.tgz", + "integrity": "sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==", "dependencies": { - "@babel/types": "^7.21.0", + "@babel/types": "^7.21.3", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -114,7 +114,6 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -128,7 +127,6 @@ "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", - "dev": true, "dependencies": { "@babel/compat-data": "^7.20.5", "@babel/helper-validator-option": "^7.18.6", @@ -143,11 +141,23 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-compilation-targets/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==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, "node_modules/@babel/helper-environment-visitor": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -156,7 +166,6 @@ "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", - "dev": true, "dependencies": { "@babel/template": "^7.20.7", "@babel/types": "^7.21.0" @@ -169,7 +178,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, "dependencies": { "@babel/types": "^7.18.6" }, @@ -181,7 +189,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, "dependencies": { "@babel/types": "^7.18.6" }, @@ -190,10 +197,9 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.0.tgz", - "integrity": "sha512-eD/JQ21IG2i1FraJnTMbUarAUkA7G988ofehG5MDCRXaUU91rEBJuCeSoou2Sk1y4RbLYXzqEg1QLwEmRU4qcQ==", - "dev": true, + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", + "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", @@ -201,8 +207,8 @@ "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.0", - "@babel/types": "^7.21.0" + "@babel/traverse": "^7.21.2", + "@babel/types": "^7.21.2" }, "engines": { "node": ">=6.9.0" @@ -212,7 +218,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -221,7 +226,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "dev": true, "dependencies": { "@babel/types": "^7.20.2" }, @@ -233,7 +237,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, "dependencies": { "@babel/types": "^7.18.6" }, @@ -245,7 +248,6 @@ "version": "7.19.4", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -254,7 +256,6 @@ "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -263,7 +264,6 @@ "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -272,7 +272,6 @@ "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", - "dev": true, "dependencies": { "@babel/template": "^7.20.7", "@babel/traverse": "^7.21.0", @@ -286,7 +285,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", @@ -300,7 +298,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -312,7 +309,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -326,7 +322,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "dependencies": { "color-name": "1.1.3" } @@ -334,14 +329,12 @@ "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, "engines": { "node": ">=0.8.0" } @@ -350,7 +343,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, "engines": { "node": ">=4" } @@ -359,7 +351,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -368,10 +359,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.21.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.1.tgz", - "integrity": "sha512-JzhBFpkuhBNYUY7qs+wTzNmyCWUHEaAFpQQD2YfU1rPL38/L43Wvid0fFkiOCnHvsGncRZgEPyGnltABLcVDTg==", - "dev": true, + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.3.tgz", + "integrity": "sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==", "bin": { "parser": "bin/babel-parser.js" }, @@ -383,7 +373,6 @@ "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -395,7 +384,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -407,7 +395,6 @@ "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -419,7 +406,6 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -431,7 +417,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -443,7 +428,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -458,7 +442,6 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -470,7 +453,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -482,7 +464,6 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -494,7 +475,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -506,7 +486,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -518,7 +497,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -530,7 +508,6 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -545,7 +522,6 @@ "version": "7.20.0", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.19.0" }, @@ -560,7 +536,6 @@ "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", "@babel/parser": "^7.20.7", @@ -571,19 +546,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.0.tgz", - "integrity": "sha512-Xdt2P1H4LKTO8ApPfnO1KmzYMFpp7D/EinoXzLYN/cHcBNrVCAkAtGUcXnHXrl/VGktureU6fkQrHSBE2URfoA==", - "dev": true, + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.3.tgz", + "integrity": "sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==", "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.21.0", + "@babel/generator": "^7.21.3", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.0", - "@babel/types": "^7.21.0", + "@babel/parser": "^7.21.3", + "@babel/types": "^7.21.3", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -591,11 +565,18 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/traverse/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==", + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/types": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.0.tgz", - "integrity": "sha512-uR7NWq2VNFnDi7EYqiRz2Jv/VQIu38tu64Zy8TX2nQFQ6etJ9V/Rr2msW8BS132mum2rL645qpDrLtAJtVpuow==", - "dev": true, + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.3.tgz", + "integrity": "sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==", "dependencies": { "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", @@ -608,18 +589,38 @@ "node_modules/@bcoe/v8-coverage": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.3.0.tgz", + "integrity": "sha512-v3oplH6FYCULtFuCeqyuTd9D2WKO937Dxdq+GmHOLL72TTRriLxz2VLlNfkZRsvj6PKnOPAtuT6dwrs/pA5DvA==", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.0.tgz", + "integrity": "sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } }, "node_modules/@eslint/eslintrc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", - "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", - "dev": true, + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.1.tgz", + "integrity": "sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.4.0", + "espree": "^9.5.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -634,56 +635,18 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint/eslintrc/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==", - "dev": true - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/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, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "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, + "node_modules/@eslint/js": { + "version": "8.36.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.36.0.tgz", + "integrity": "sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@google/clasp": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/@google/clasp/-/clasp-2.4.2.tgz", "integrity": "sha512-SrHzWSotR8c7mNBVwH81sFCc4HhoDrCevicJehQlvrvgdTvLIiU0Pfb5EYCzWUPBSC4Ez/nvW6wxsgaK7RrPjQ==", - "dev": true, "dependencies": { "@sindresorhus/is": "^4.0.1", "chalk": "^4.1.2", @@ -723,105 +686,10 @@ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/@google/clasp/node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dev": true, - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@google/clasp/node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@google/clasp/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@google/clasp/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@google/clasp/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/@google/clasp/node_modules/strip-bom": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-5.0.0.tgz", - "integrity": "sha512-p+byADHF7SzEcVnLvc/r3uognM1hUhObuHXxJcgLCfD194XAkaLbjq3Wzb0N5G2tgIjH0dgT708Z51QxMeu60A==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@google/clasp/node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.8", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", - "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", @@ -835,7 +703,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, "engines": { "node": ">=12.22" }, @@ -847,14 +714,12 @@ "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" }, "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, "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -866,26 +731,108 @@ "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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/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==", + "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, "engines": { "node": ">=8" } }, "node_modules/@jest/console": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.4.3.tgz", - "integrity": "sha512-W/o/34+wQuXlgqlPYTansOSiBnuxrTv61dEVkA6HNmpcgHLUjfaUbdqt6oVvOzaawwo9IdW9QOtMgQ1ScSZC4A==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz", + "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==", "dependencies": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^29.4.3", - "jest-util": "^29.4.3", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0", "slash": "^3.0.0" }, "engines": { @@ -893,37 +840,36 @@ } }, "node_modules/@jest/core": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.4.3.tgz", - "integrity": "sha512-56QvBq60fS4SPZCuM7T+7scNrkGIe7Mr6PVIXUpu48ouvRaWOFqRPV91eifvFM0ay2HmfswXiGf97NGUN5KofQ==", - "dev": true, - "dependencies": { - "@jest/console": "^29.4.3", - "@jest/reporters": "^29.4.3", - "@jest/test-result": "^29.4.3", - "@jest/transform": "^29.4.3", - "@jest/types": "^29.4.3", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.5.0.tgz", + "integrity": "sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==", + "dependencies": { + "@jest/console": "^29.5.0", + "@jest/reporters": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.4.3", - "jest-config": "^29.4.3", - "jest-haste-map": "^29.4.3", - "jest-message-util": "^29.4.3", + "jest-changed-files": "^29.5.0", + "jest-config": "^29.5.0", + "jest-haste-map": "^29.5.0", + "jest-message-util": "^29.5.0", "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.4.3", - "jest-resolve-dependencies": "^29.4.3", - "jest-runner": "^29.4.3", - "jest-runtime": "^29.4.3", - "jest-snapshot": "^29.4.3", - "jest-util": "^29.4.3", - "jest-validate": "^29.4.3", - "jest-watcher": "^29.4.3", + "jest-resolve": "^29.5.0", + "jest-resolve-dependencies": "^29.5.0", + "jest-runner": "^29.5.0", + "jest-runtime": "^29.5.0", + "jest-snapshot": "^29.5.0", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", + "jest-watcher": "^29.5.0", "micromatch": "^4.0.4", - "pretty-format": "^29.4.3", + "pretty-format": "^29.5.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, @@ -940,38 +886,35 @@ } }, "node_modules/@jest/environment": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.4.3.tgz", - "integrity": "sha512-dq5S6408IxIa+lr54zeqce+QgI+CJT4nmmA+1yzFgtcsGK8c/EyiUb9XQOgz3BMKrRDfKseeOaxj2eO8LlD3lA==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.5.0.tgz", + "integrity": "sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==", "dependencies": { - "@jest/fake-timers": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/fake-timers": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", - "jest-mock": "^29.4.3" + "jest-mock": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.4.3.tgz", - "integrity": "sha512-iktRU/YsxEtumI9zsPctYUk7ptpC+AVLLk1Ax3AsA4g1C+8OOnKDkIQBDHtD5hA/+VtgMd5AWI5gNlcAlt2vxQ==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.5.0.tgz", + "integrity": "sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==", "dependencies": { - "expect": "^29.4.3", - "jest-snapshot": "^29.4.3" + "expect": "^29.5.0", + "jest-snapshot": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect-utils": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.4.3.tgz", - "integrity": "sha512-/6JWbkxHOP8EoS8jeeTd9dTfc9Uawi+43oLKHfp6zzux3U2hqOOVnV3ai4RpDYHOccL6g+5nrxpoc8DmJxtXVQ==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz", + "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==", "dependencies": { "jest-get-type": "^29.4.3" }, @@ -980,48 +923,45 @@ } }, "node_modules/@jest/fake-timers": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.4.3.tgz", - "integrity": "sha512-4Hote2MGcCTWSD2gwl0dwbCpBRHhE6olYEuTj8FMowdg3oQWNKr2YuxenPQYZ7+PfqPY1k98wKDU4Z+Hvd4Tiw==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.5.0.tgz", + "integrity": "sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==", "dependencies": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^29.4.3", - "jest-mock": "^29.4.3", - "jest-util": "^29.4.3" + "jest-message-util": "^29.5.0", + "jest-mock": "^29.5.0", + "jest-util": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/globals": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.4.3.tgz", - "integrity": "sha512-8BQ/5EzfOLG7AaMcDh7yFCbfRLtsc+09E1RQmRBI4D6QQk4m6NSK/MXo+3bJrBN0yU8A2/VIcqhvsOLFmziioA==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.5.0.tgz", + "integrity": "sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==", "dependencies": { - "@jest/environment": "^29.4.3", - "@jest/expect": "^29.4.3", - "@jest/types": "^29.4.3", - "jest-mock": "^29.4.3" + "@jest/environment": "^29.5.0", + "@jest/expect": "^29.5.0", + "@jest/types": "^29.5.0", + "jest-mock": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/reporters": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.4.3.tgz", - "integrity": "sha512-sr2I7BmOjJhyqj9ANC6CTLsL4emMoka7HkQpcoMRlhCbQJjz2zsRzw0BDPiPyEFDXAbxKgGFYuQZiSJ1Y6YoTg==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.5.0.tgz", + "integrity": "sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.4.3", - "@jest/test-result": "^29.4.3", - "@jest/transform": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/console": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", "@jridgewell/trace-mapping": "^0.3.15", "@types/node": "*", "chalk": "^4.0.0", @@ -1034,9 +974,9 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.4.3", - "jest-util": "^29.4.3", - "jest-worker": "^29.4.3", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0", + "jest-worker": "^29.5.0", "slash": "^3.0.0", "string-length": "^4.0.1", "strip-ansi": "^6.0.0", @@ -1058,7 +998,6 @@ "version": "29.4.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", - "dev": true, "dependencies": { "@sinclair/typebox": "^0.25.16" }, @@ -1070,7 +1009,6 @@ "version": "29.4.3", "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz", "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==", - "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.15", "callsites": "^3.0.0", @@ -1081,13 +1019,12 @@ } }, "node_modules/@jest/test-result": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.4.3.tgz", - "integrity": "sha512-Oi4u9NfBolMq9MASPwuWTlC5WvmNRwI4S8YrQg5R5Gi47DYlBe3sh7ILTqi/LGrK1XUE4XY9KZcQJTH1WJCLLA==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.5.0.tgz", + "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==", "dependencies": { - "@jest/console": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/console": "^29.5.0", + "@jest/types": "^29.5.0", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, @@ -1096,14 +1033,13 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.4.3.tgz", - "integrity": "sha512-yi/t2nES4GB4G0mjLc0RInCq/cNr9dNwJxcGg8sslajua5Kb4kmozAc+qPLzplhBgfw1vLItbjyHzUN92UXicw==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz", + "integrity": "sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==", "dependencies": { - "@jest/test-result": "^29.4.3", + "@jest/test-result": "^29.5.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.4.3", + "jest-haste-map": "^29.5.0", "slash": "^3.0.0" }, "engines": { @@ -1111,22 +1047,21 @@ } }, "node_modules/@jest/transform": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.4.3.tgz", - "integrity": "sha512-8u0+fBGWolDshsFgPQJESkDa72da/EVwvL+II0trN2DR66wMwiQ9/CihaGfHdlLGFzbBZwMykFtxuwFdZqlKwg==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.5.0.tgz", + "integrity": "sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==", "dependencies": { "@babel/core": "^7.11.6", - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "@jridgewell/trace-mapping": "^0.3.15", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.4.3", + "jest-haste-map": "^29.5.0", "jest-regex-util": "^29.4.3", - "jest-util": "^29.4.3", + "jest-util": "^29.5.0", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", @@ -1136,11 +1071,22 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/@jest/transform/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/@jest/types": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.4.3.tgz", - "integrity": "sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", + "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", "dependencies": { "@jest/schemas": "^29.4.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -1157,7 +1103,6 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.0", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -1170,7 +1115,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, "engines": { "node": ">=6.0.0" } @@ -1179,7 +1123,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, "engines": { "node": ">=6.0.0" } @@ -1187,14 +1130,12 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.17", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "dev": true, "dependencies": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" @@ -1204,7 +1145,6 @@ "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, "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -1217,7 +1157,6 @@ "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, "engines": { "node": ">= 8" } @@ -1226,7 +1165,6 @@ "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, "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -1239,7 +1177,6 @@ "version": "15.0.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.1.tgz", "integrity": "sha512-ReY88T7JhJjeRVbfCyNj+NXAG3IIsVMsX9b5/9jC98dRP8/yxlZdz7mHZbHk5zHr24wZZICS5AcXsFZAXYUQEg==", - "dev": true, "dependencies": { "@rollup/pluginutils": "^5.0.1", "@types/resolve": "1.20.2", @@ -1264,7 +1201,6 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", - "dev": true, "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", @@ -1283,16 +1219,14 @@ } }, "node_modules/@sinclair/typebox": { - "version": "0.25.23", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.23.tgz", - "integrity": "sha512-VEB8ygeP42CFLWyAJhN5OklpxUliqdNEUcXb4xZ/CINqtYGTjL5ukluKdKzQ0iWdUxyQ7B0539PAUhHKrCNWSQ==", - "dev": true + "version": "0.25.24", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", + "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==" }, "node_modules/@sindresorhus/is": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "dev": true, "engines": { "node": ">=10" }, @@ -1304,7 +1238,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", - "dev": true, "dependencies": { "type-detect": "4.0.8" } @@ -1313,7 +1246,6 @@ "version": "10.0.2", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz", "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==", - "dev": true, "dependencies": { "@sinonjs/commons": "^2.0.0" } @@ -1322,7 +1254,6 @@ "version": "4.0.6", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dev": true, "dependencies": { "defer-to-connect": "^2.0.0" }, @@ -1334,7 +1265,6 @@ "version": "7.20.0", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", - "dev": true, "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", @@ -1347,7 +1277,6 @@ "version": "7.6.4", "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, "dependencies": { "@babel/types": "^7.0.0" } @@ -1356,7 +1285,6 @@ "version": "7.4.1", "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" @@ -1366,7 +1294,6 @@ "version": "7.18.3", "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", - "dev": true, "dependencies": { "@babel/types": "^7.3.0" } @@ -1375,7 +1302,6 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", - "dev": true, "dependencies": { "@types/http-cache-semantics": "*", "@types/keyv": "^3.1.4", @@ -1386,20 +1312,26 @@ "node_modules/@types/estree": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", - "dev": true - }, - "node_modules/@types/google-apps-script": { - "version": "1.0.57", - "resolved": "https://registry.npmjs.org/@types/google-apps-script/-/google-apps-script-1.0.57.tgz", - "integrity": "sha512-w06Yoh+SamGpS2kGVlGy/5JkmFkLrW6u3tbglyHEu9uC9lrzqr6FyLcgVsL95Tmq9L0q//D8seqd4GZGRPPKUw==", - "dev": true + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" }, - "node_modules/@types/google-apps-script-oauth2": { + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/google-apps-script": { + "version": "1.0.59", + "resolved": "https://registry.npmjs.org/@types/google-apps-script/-/google-apps-script-1.0.59.tgz", + "integrity": "sha512-vOtsegVU/BrgofBsx6Ckzz4jDNp2zEwGHHc20AAouyP6YzytCF5vIBCSETBjsIHZya+nA8A/f7YaSkCe29jbvQ==" + }, + "node_modules/@types/google-apps-script-oauth2": { "version": "38.0.0", "resolved": "https://registry.npmjs.org/@types/google-apps-script-oauth2/-/google-apps-script-oauth2-38.0.0.tgz", "integrity": "sha512-TxaCxXmAb3/Qm/kSweW+PPIckNwLvZo6maGI0oKx/MBdl/WrZkPAY7Mi56qg2xPGBObqG80rmYU691SAHiUdJg==", - "dev": true, "dependencies": { "@types/google-apps-script": "*" } @@ -1408,7 +1340,6 @@ "version": "4.1.6", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", - "dev": true, "dependencies": { "@types/node": "*" } @@ -1416,20 +1347,17 @@ "node_modules/@types/http-cache-semantics": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", - "dev": true + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "*" } @@ -1438,80 +1366,84 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/jest": { - "version": "29.4.0", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.4.0.tgz", - "integrity": "sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.0.tgz", + "integrity": "sha512-3Emr5VOl/aoBwnWcH/EFQvlSAmjV+XtV9GGu5mwdYew5vhQh0IUZx/60x0TzHDu09Bi7HMx10t/namdJw5QIcg==", "dependencies": { "expect": "^29.0.0", "pretty-format": "^29.0.0" } }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" + }, "node_modules/@types/keyv": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" }, "node_modules/@types/node": { - "version": "18.14.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.0.tgz", - "integrity": "sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==", - "dev": true + "version": "18.15.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.5.tgz", + "integrity": "sha512-Ark2WDjjZO7GmvsyFFf81MXuGTA/d6oP38anyxWOL6EREyBKAxKoFHwBhaZxCfLRLpO8JgVXwqOwSwa7jRcjew==" }, "node_modules/@types/normalize-package-data": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" }, "node_modules/@types/prettier": { "version": "2.7.2", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", - "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", - "dev": true + "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==" }, "node_modules/@types/resolve": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==" }, "node_modules/@types/responselike": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dev": true, "dependencies": { "@types/node": "*" } }, + "node_modules/@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==" + }, "node_modules/@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" }, "node_modules/@types/yargs": { - "version": "17.0.22", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz", - "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==", - "dev": true, + "version": "17.0.23", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.23.tgz", + "integrity": "sha512-yuogunc04OnzGQCrfHx+Kk883Q4X0aSwmYZhKjI21m+SVYzjIbrWl8dOOwSv5hf2Um2pdCOXWo9isteZTNXUZQ==", "dependencies": { "@types/yargs-parser": "*" } @@ -1519,285 +1451,953 @@ "node_modules/@types/yargs-parser": { "version": "21.0.0", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, - "dependencies": { - "event-target-shim": "^5.0.0" + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.56.0.tgz", + "integrity": "sha512-ZNW37Ccl3oMZkzxrYDUX4o7cnuPgU+YrcaYXzsRtLB16I1FR5SHMqga3zGsaSliZADCWo2v8qHWqAYIj8nWCCg==", + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.56.0", + "@typescript-eslint/type-utils": "5.56.0", + "@typescript-eslint/utils": "5.56.0", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" }, "engines": { - "node": ">=6.5" - } - }, - "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, - "engines": { - "node": ">=0.4.0" - } - }, - "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, "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.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==", - "dev": true, - "dependencies": { - "debug": "4" + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" }, - "engines": { - "node": ">= 6.0.0" + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/aggregate-error": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", - "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", - "dev": true, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.56.0.tgz", + "integrity": "sha512-jGYKyt+iBakD0SA5Ww8vFqGpoV2asSjwt60Gl6YcO8ksQ8s2HlUEyHBMSa38bdLopYqGf7EYQMUIGdT/Luw+sw==", "dependencies": { - "clean-stack": "^4.0.0", - "indent-string": "^5.0.0" + "@typescript-eslint/types": "5.56.0", + "@typescript-eslint/visitor-keys": "5.56.0" }, "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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" + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.56.0.tgz", + "integrity": "sha512-JyAzbTJcIyhuUhogmiu+t79AkdnqgPUEsxMTMc/dCZczGMJQh1MK2wgrju++yMN6AWroVAy2jxyPcPr3SWCq5w==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.56.0.tgz", + "integrity": "sha512-1mFdED7u5bZpX6Xxf5N9U2c18sb+8EvU3tyOIj6LQZ5OOvnmj8BVeNNP603OFPm5KkS1a7IvCIcwrdHXaEMG/Q==", "dependencies": { - "type-fest": "^0.21.3" + "@typescript-eslint/types": "5.56.0", + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/typescript-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, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "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, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", + "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", "dependencies": { - "color-convert": "^2.0.1" + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" }, "engines": { - "node": ">=8" + "node": "^10.12.0 || >=12.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" } }, - "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, + "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" }, "engines": { - "node": ">= 8" - } - }, - "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, - "dependencies": { - "sprintf-js": "~1.0.2" + "node": ">=8.0.0" } }, - "node_modules/array-differ": { + "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-utils": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", - "dev": true, + "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" + }, "engines": { - "node": ">=0.10.0" + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" } }, - "node_modules/array-union": { + "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-visitor-keys": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true, + "node_modules/@typescript-eslint/experimental-utils/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "engines": { - "node": ">=8" + "node": ">=4.0" } }, - "node_modules/babel-jest": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.4.3.tgz", - "integrity": "sha512-o45Wyn32svZE+LnMVWv/Z4x0SwtLbh4FyGcYtR20kIWd+rdrDZ9Fzq8Ml3MYLD+mZvEdzCjZsCnYZ2jpJyQ+Nw==", - "dev": true, + "node_modules/@typescript-eslint/parser": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.56.0.tgz", + "integrity": "sha512-sn1OZmBxUsgxMmR8a8U5QM/Wl+tyqlH//jTqCg8daTAmhAk26L2PFhcqPLlYBhYUJMZJK276qLXlHN3a83o2cg==", + "peer": true, "dependencies": { - "@jest/transform": "^29.4.3", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.4.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" + "@typescript-eslint/scope-manager": "5.56.0", + "@typescript-eslint/types": "5.56.0", + "@typescript-eslint/typescript-estree": "5.56.0", + "debug": "^4.3.4" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@babel/core": "^7.8.0" + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.56.0.tgz", + "integrity": "sha512-jGYKyt+iBakD0SA5Ww8vFqGpoV2asSjwt60Gl6YcO8ksQ8s2HlUEyHBMSa38bdLopYqGf7EYQMUIGdT/Luw+sw==", + "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" + "@typescript-eslint/types": "5.56.0", + "@typescript-eslint/visitor-keys": "5.56.0" }, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.4.3.tgz", - "integrity": "sha512-mB6q2q3oahKphy5V7CpnNqZOCkxxZ9aokf1eh82Dy3jQmg4xvM1tGrh5y6BQUJh4a3Pj9+eLfwvAZ7VNKg7H8Q==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.56.0.tgz", + "integrity": "sha512-JyAzbTJcIyhuUhogmiu+t79AkdnqgPUEsxMTMc/dCZczGMJQh1MK2wgrju++yMN6AWroVAy2jxyPcPr3SWCq5w==", + "peer": true, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.56.0.tgz", + "integrity": "sha512-41CH/GncsLXOJi0jb74SnC7jVPWeVJ0pxQj8bOjH1h2O26jXN3YHKDT1ejkVz5YeTEQPeLCCRY0U2r68tfNOcg==", + "peer": true, "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" + "@typescript-eslint/types": "5.56.0", + "@typescript-eslint/visitor-keys": "5.56.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/babel-preset-jest": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.4.3.tgz", - "integrity": "sha512-gWx6COtSuma6n9bw+8/F+2PCXrIgxV/D1TJFnp6OyBK2cxPWg0K9p/sriNYeifKjpUkMViWQ09DSWtzJQRETsw==", - "dev": true, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.56.0.tgz", + "integrity": "sha512-1mFdED7u5bZpX6Xxf5N9U2c18sb+8EvU3tyOIj6LQZ5OOvnmj8BVeNNP603OFPm5KkS1a7IvCIcwrdHXaEMG/Q==", + "peer": true, "dependencies": { - "babel-plugin-jest-hoist": "^29.4.3", - "babel-preset-current-node-syntax": "^1.0.0" + "@typescript-eslint/types": "5.56.0", + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "peer": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", + "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.56.0.tgz", + "integrity": "sha512-8WxgOgJjWRy6m4xg9KoSHPzBNZeQbGlQOH7l2QEhQID/+YseaFxg5J/DLwWSsi9Axj4e/cCiKx7PVzOq38tY4A==", + "dependencies": { + "@typescript-eslint/typescript-estree": "5.56.0", + "@typescript-eslint/utils": "5.56.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.56.0.tgz", + "integrity": "sha512-JyAzbTJcIyhuUhogmiu+t79AkdnqgPUEsxMTMc/dCZczGMJQh1MK2wgrju++yMN6AWroVAy2jxyPcPr3SWCq5w==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.56.0.tgz", + "integrity": "sha512-41CH/GncsLXOJi0jb74SnC7jVPWeVJ0pxQj8bOjH1h2O26jXN3YHKDT1ejkVz5YeTEQPeLCCRY0U2r68tfNOcg==", + "dependencies": { + "@typescript-eslint/types": "5.56.0", + "@typescript-eslint/visitor-keys": "5.56.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.56.0.tgz", + "integrity": "sha512-1mFdED7u5bZpX6Xxf5N9U2c18sb+8EvU3tyOIj6LQZ5OOvnmj8BVeNNP603OFPm5KkS1a7IvCIcwrdHXaEMG/Q==", + "dependencies": { + "@typescript-eslint/types": "5.56.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", + "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", + "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.56.0.tgz", + "integrity": "sha512-XhZDVdLnUJNtbzaJeDSCIYaM+Tgr59gZGbFuELgF7m0IY03PlciidS7UQNKLE0+WpUTn1GlycEr6Ivb/afjbhA==", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.56.0", + "@typescript-eslint/types": "5.56.0", + "@typescript-eslint/typescript-estree": "5.56.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.56.0.tgz", + "integrity": "sha512-jGYKyt+iBakD0SA5Ww8vFqGpoV2asSjwt60Gl6YcO8ksQ8s2HlUEyHBMSa38bdLopYqGf7EYQMUIGdT/Luw+sw==", + "dependencies": { + "@typescript-eslint/types": "5.56.0", + "@typescript-eslint/visitor-keys": "5.56.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.56.0.tgz", + "integrity": "sha512-JyAzbTJcIyhuUhogmiu+t79AkdnqgPUEsxMTMc/dCZczGMJQh1MK2wgrju++yMN6AWroVAy2jxyPcPr3SWCq5w==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.56.0.tgz", + "integrity": "sha512-41CH/GncsLXOJi0jb74SnC7jVPWeVJ0pxQj8bOjH1h2O26jXN3YHKDT1ejkVz5YeTEQPeLCCRY0U2r68tfNOcg==", + "dependencies": { + "@typescript-eslint/types": "5.56.0", + "@typescript-eslint/visitor-keys": "5.56.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.56.0.tgz", + "integrity": "sha512-1mFdED7u5bZpX6Xxf5N9U2c18sb+8EvU3tyOIj6LQZ5OOvnmj8BVeNNP603OFPm5KkS1a7IvCIcwrdHXaEMG/Q==", + "dependencies": { + "@typescript-eslint/types": "5.56.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", + "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/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==", + "engines": { + "node": ">=10" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "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==", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.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==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", + "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", + "dependencies": { + "clean-stack": "^4.0.0", + "indent-string": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "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==", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "engines": { + "node": ">=8" + } + }, + "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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "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==" + }, + "node_modules/array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "engines": { + "node": ">=8" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-jest": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.5.0.tgz", + "integrity": "sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==", + "dependencies": { + "@jest/transform": "^29.5.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.5.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", + "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", + "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", + "dependencies": { + "babel-plugin-jest-hoist": "^29.5.0", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "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==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, "funding": [ { "type": "github", @@ -1817,7 +2417,6 @@ "version": "9.1.1", "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz", "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==", - "dev": true, "engines": { "node": "*" } @@ -1826,7 +2425,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, "engines": { "node": ">=8" } @@ -1835,18 +2433,37 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", - "dev": true, "dependencies": { "buffer": "^6.0.3", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, + "node_modules/bl/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==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bl/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==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "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, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1856,7 +2473,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, "dependencies": { "fill-range": "^7.0.1" }, @@ -1868,7 +2484,6 @@ "version": "4.21.5", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", - "dev": true, "funding": [ { "type": "opencollective", @@ -1896,7 +2511,6 @@ "version": "0.2.6", "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, "dependencies": { "fast-json-stable-stringify": "2.x" }, @@ -1908,7 +2522,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, "dependencies": { "node-int64": "^0.4.0" } @@ -1917,7 +2530,6 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, "funding": [ { "type": "github", @@ -1940,20 +2552,17 @@ "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==", - "dev": true + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "node_modules/builtin-modules": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true, "engines": { "node": ">=6" }, @@ -1965,7 +2574,6 @@ "version": "5.0.4", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "dev": true, "engines": { "node": ">=10.6.0" } @@ -1974,7 +2582,6 @@ "version": "7.0.2", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", - "dev": true, "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -1992,7 +2599,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, "dependencies": { "pump": "^3.0.0" }, @@ -2007,7 +2613,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -2020,7 +2625,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, "engines": { "node": ">=6" } @@ -2029,16 +2633,38 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, "engines": { "node": ">=6" } }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-keys/node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "engines": { + "node": ">=8" + } + }, "node_modules/caniuse-lite": { - "version": "1.0.30001457", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001457.tgz", - "integrity": "sha512-SDIV6bgE1aVbK6XyxdURbUE89zY7+k1BBBaOwYwkNCglXlel/E7mELiHC64HQ+W0xSKlqWhV9Wh7iHxUjMs4fA==", - "dev": true, + "version": "1.0.30001469", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001469.tgz", + "integrity": "sha512-Rcp7221ScNqQPP3W+lVOYDyjdR6dC+neEQCttoNr5bAyz54AboB4iwpnWgyi8P4YUsPybVzT4LgWiBbI3drL4g==", "funding": [ { "type": "opencollective", @@ -2054,7 +2680,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2070,7 +2695,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, "engines": { "node": ">=10" } @@ -2078,14 +2702,12 @@ "node_modules/chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, "funding": [ { "type": "individual", @@ -2098,33 +2720,20 @@ "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" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, "engines": { - "node": ">= 6" + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, "node_modules/ci-info": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true, "funding": [ { "type": "github", @@ -2138,14 +2747,12 @@ "node_modules/cjs-module-lexer": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==" }, "node_modules/clean-stack": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", - "dev": true, "dependencies": { "escape-string-regexp": "5.0.0" }, @@ -2160,7 +2767,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, "engines": { "node": ">=12" }, @@ -2172,7 +2778,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, "dependencies": { "restore-cursor": "^3.1.0" }, @@ -2184,7 +2789,6 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", - "dev": true, "engines": { "node": ">=6" }, @@ -2196,236 +2800,558 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", - "dev": true, "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" + }, + "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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "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==" + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/commenting": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/commenting/-/commenting-1.1.0.tgz", + "integrity": "sha512-YeNK4tavZwtH7jEgK1ZINXzLKm6DZdEMfsaaieOsCAN0S8vsY7UeuO3Q7d/M018EFgE+IeUAuBOKkFccBZsUZA==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "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==" + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", + "dependencies": { + "array-find-index": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" + }, + "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==" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/diff-sequences": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", + "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dotf": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dotf/-/dotf-2.0.2.tgz", + "integrity": "sha512-4cN2fwEqHimE11jVc8uMNiEB2A2YOL5Fdyd1p14UbAvRh/5vAxjEaiVPx45zD5IQcwc/uQIxI9Jh18skB/uYFQ==", + "dependencies": { + "graceful-fs": "^4.2.8", + "jsonfile": "^6.1.0" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-truncate/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "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==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.334", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.334.tgz", + "integrity": "sha512-laZ1odk+TRen6q0GeyQx/JEkpD3iSZT7ewopCpKqg9bTjP1l8XRfU3Bg20CFjNPZkp5+NDBl3iqd4o/kPO+Vew==" + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, - "node_modules/cli-truncate/node_modules/emoji-regex": { + "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 + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, - "node_modules/cli-truncate/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, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "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" + "once": "^1.4.0" } }, - "node_modules/cli-truncate/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dev": true, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" + "ansi-colors": "^4.1.1" }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true, "engines": { - "node": ">= 10" + "node": ">=8.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, + "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==", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" + "is-arrayish": "^0.2.1" } }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "engines": { - "node": ">=0.8" + "node": ">=6" } }, - "node_modules/clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" + "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==", + "engines": { + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" + "node_modules/eslint": { + "version": "8.36.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz", + "integrity": "sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.1", + "@eslint/js": "8.36.0", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "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.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.5.0", + "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", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "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.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" }, "engines": { - "node": ">=7.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/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 - }, - "node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, + "node_modules/eslint-config-google": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz", + "integrity": "sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==", "engines": { - "node": ">= 12" + "node": ">=0.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "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 + "node_modules/eslint-config-prettier": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", + "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, + "node_modules/eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" }, "engines": { - "node": ">= 8" + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" } }, - "node_modules/currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", - "dev": true, + "node_modules/eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", "dependencies": { - "array-find-index": "^1.0.1" + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" } }, - "node_modules/debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, + "node_modules/eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", "dependencies": { - "ms": "2.1.2" + "prettier-linter-helpers": "^1.0.0" }, "engines": { - "node": ">=6.0" + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" }, "peerDependenciesMeta": { - "supports-color": { + "eslint-config-prettier": { "optional": true } } }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, + "node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "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==", "dependencies": { - "mimic-response": "^3.1.0" + "eslint-visitor-keys": "^1.1.0" }, "engines": { - "node": ">=10" + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, + "node_modules/eslint-utils/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==", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/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==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, "engines": { "node": ">=10" }, @@ -2433,1022 +3359,1059 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "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 - }, - "node_modules/deepmerge": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", - "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==", - "dev": true, + "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==", + "dependencies": { + "is-glob": "^4.0.3" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10.13.0" } }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, + "node_modules/eslint/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==", "dependencies": { - "clone": "^1.0.2" + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true, + "node_modules/eslint/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==", + "dependencies": { + "p-limit": "^3.0.2" + }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, + "node_modules/eslint/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==", "engines": { "node": ">=8" } }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, + "node_modules/espree": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.0.tgz", + "integrity": "sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==", + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/diff-sequences": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", - "dev": true, + "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==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=4" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dependencies": { - "esutils": "^2.0.2" + "estraverse": "^5.1.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=0.10" } }, - "node_modules/dotf": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dotf/-/dotf-2.0.2.tgz", - "integrity": "sha512-4cN2fwEqHimE11jVc8uMNiEB2A2YOL5Fdyd1p14UbAvRh/5vAxjEaiVPx45zD5IQcwc/uQIxI9Jh18skB/uYFQ==", - "dev": true, + "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==", "dependencies": { - "graceful-fs": "^4.2.8", - "jsonfile": "^6.1.0" + "estraverse": "^5.2.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "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 - }, - "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==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" + "node": ">=4.0" } }, - "node_modules/electron-to-chromium": { - "version": "1.4.305", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.305.tgz", - "integrity": "sha512-WETy6tG0CT5gm1O+xCbyapWNsCcmIvrn4NHViIGYo2AT8FV2qUCXdaB+WqYxSv/vS5mFqhBYnfZAAkVArjBmUg==", - "dev": true - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "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 - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" + "node": ">=4.0" } }, - "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, - "dependencies": { - "is-arrayish": "^0.2.1" - } + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/eslint": { - "version": "8.34.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.34.0.tgz", - "integrity": "sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==", - "dev": true, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dependencies": { - "@eslint/eslintrc": "^1.4.1", - "@humanwhocodes/config-array": "^0.11.8", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "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.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", - "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", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "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.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=10" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/eslint-config-google": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz", - "integrity": "sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==", - "dev": true, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "eslint": ">=5.16.0" + "node": ">= 0.8.0" } }, - "node_modules/eslint-config-prettier": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.6.0.tgz", - "integrity": "sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==", - "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" + "node_modules/expect": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", + "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", + "dependencies": { + "@jest/expect-utils": "^29.5.0", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0" }, - "peerDependencies": { - "eslint": ">=7.0.0" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", - "dev": true, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dependencies": { - "prettier-linter-helpers": "^1.0.0" + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" }, "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "eslint": ">=7.28.0", - "prettier": ">=2.0.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } + "node": ">=4" } }, - "node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, + "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==" + }, + "node_modules/fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==" + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8.6.0" } }, - "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, + "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==" + }, + "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==" + }, + "node_modules/fast-text-encoding": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", + "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==" + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dependencies": { - "eslint-visitor-keys": "^2.0.0" + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dependencies": { + "escape-string-regexp": "^1.0.5" }, "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" + "url": "https://github.com/sponsors/sindresorhus" } }, - "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, + "node_modules/figures/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==", "engines": { - "node": ">=10" + "node": ">=0.8.0" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, + "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==", + "dependencies": { + "flat-cache": "^3.0.4" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/eslint/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==", - "dev": 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, - "engines": { - "node": ">=10" + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8" } }, - "node_modules/eslint/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, + "node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dependencies": { - "type-fest": "^0.20.2" + "flatted": "^3.1.0", + "rimraf": "^3.0.2" }, "engines": { - "node": ">=8" + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/eslint/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, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dependencies": { - "argparse": "^2.0.1" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=12" } }, - "node_modules/eslint/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, + "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==" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" + }, + "node_modules/fuzzy": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/fuzzy/-/fuzzy-0.1.3.tgz", + "integrity": "sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/gaxios": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", + "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", "dependencies": { - "p-locate": "^5.0.0" + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.7" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/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, + "node_modules/gcp-metadata": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz", + "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==", "dependencies": { - "p-limit": "^3.0.2" + "gaxios": "^4.0.0", + "json-bigint": "^1.0.0" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "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, + "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==", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6.9.0" } }, - "node_modules/espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", - "dev": true, - "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.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==", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": "6.* || 8.* || >= 10.*" } }, - "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==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "node_modules/get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esquery": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.2.tgz", - "integrity": "sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, + "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==", "engines": { - "node": ">=0.10" + "node": ">=8.0.0" } }, - "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, - "dependencies": { - "estraverse": "^5.2.0" - }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "engines": { - "node": ">=4.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, + "node_modules/gitignore-to-glob": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/gitignore-to-glob/-/gitignore-to-glob-0.3.0.tgz", + "integrity": "sha512-mk74BdnK7lIwDHnotHddx1wsjMOFIThpLY3cPNniJ/2fA/tlLzHnFxIdR+4sLOu5KGgQJdij4kjJ2RoUNnCNMA==", "engines": { - "node": ">=4.0" + "node": ">=4.4 <5 || >=6.9" } }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, + "node_modules/glob": { + "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" + }, "engines": { - "node": ">=0.10.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true, + "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==", + "dependencies": { + "is-glob": "^4.0.1" + }, "engines": { - "node": ">=6" + "node": ">= 6" } }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, + "node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "type-fest": "^0.20.2" }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, + "node_modules/globby": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + }, "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, - "node_modules/expect": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.4.3.tgz", - "integrity": "sha512-uC05+Q7eXECFpgDrHdXA4k2rpMyStAYPItEDLyQDo5Ta7fVkJnNA/4zh/OIVkVVNZ1oOK1PipQoyNjuZ6sz6Dg==", - "dev": true, + "node_modules/google-auth-library": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.14.1.tgz", + "integrity": "sha512-5Rk7iLNDFhFeBYc3s8l1CqzbEBcdhwR193RlD4vSNFajIcINKI8W8P0JLmBpwymHqqWbX34pJDQu39cSy/6RsA==", "dependencies": { - "@jest/expect-utils": "^29.4.3", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.4.3", - "jest-message-util": "^29.4.3", - "jest-util": "^29.4.3" + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "fast-text-encoding": "^1.0.0", + "gaxios": "^4.0.0", + "gcp-metadata": "^4.2.0", + "gtoken": "^5.0.4", + "jws": "^4.0.0", + "lru-cache": "^6.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, + "node_modules/google-p12-pem": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.4.tgz", + "integrity": "sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg==", "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" + "node-forge": "^1.3.1" + }, + "bin": { + "gp12-pem": "build/src/bin/gp12-pem.js" }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "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==", - "dev": true - }, - "node_modules/fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "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==", - "dev": true - }, - "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 - }, - "node_modules/fast-text-encoding": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", - "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, + "node_modules/googleapis": { + "version": "84.0.0", + "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-84.0.0.tgz", + "integrity": "sha512-5WWLwmraulw3p55lu0gNpLz2FME1gcuR7QxgmUdAVHMiVN4LEasYjJV9p36gxcf2TMe6bn6+PgQ/63+CvBEgoQ==", "dependencies": { - "reusify": "^1.0.4" + "google-auth-library": "^7.0.2", + "googleapis-common": "^5.0.2" + }, + "engines": { + "node": ">=10" } }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, + "node_modules/googleapis-common": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-5.1.0.tgz", + "integrity": "sha512-RXrif+Gzhq1QAzfjxulbGvAY3FPj8zq/CYcvgjzDbaBNCD6bUl+86I7mUs4DKWHGruuK26ijjR/eDpWIDgNROA==", "dependencies": { - "bser": "2.1.1" + "extend": "^3.0.2", + "gaxios": "^4.0.0", + "google-auth-library": "^7.14.0", + "qs": "^6.7.0", + "url-template": "^2.0.8", + "uuid": "^8.0.0" + }, + "engines": { + "node": ">=10.10.0" } }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, + "node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", "dependencies": { - "escape-string-regexp": "^1.0.5" + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=10.19.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sindresorhus/got?sponsor=1" } }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } + "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==" }, - "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, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" + }, + "node_modules/gtoken": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.2.tgz", + "integrity": "sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==", "dependencies": { - "flat-cache": "^3.0.4" + "gaxios": "^4.0.0", + "google-p12-pem": "^3.1.3", + "jws": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=10" } }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, + "node_modules/gts": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/gts/-/gts-3.1.1.tgz", + "integrity": "sha512-Jw44aBbzMnd1vtZs7tZt3LMstKQukCBg7N4CKVGzviIQ45Cz5b9lxDJGXVKj/9ySuGv6TYEeijZJGbiiVcM27w==", "dependencies": { - "to-regex-range": "^5.0.1" + "@typescript-eslint/eslint-plugin": "^4.2.0", + "@typescript-eslint/parser": "^4.2.0", + "chalk": "^4.1.0", + "eslint": "^7.10.0", + "eslint-config-prettier": "^7.0.0", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-prettier": "^3.1.4", + "execa": "^5.0.0", + "inquirer": "^7.3.3", + "json5": "^2.1.3", + "meow": "^9.0.0", + "ncp": "^2.0.0", + "prettier": "^2.1.2", + "rimraf": "^3.0.2", + "write-file-atomic": "^3.0.3" + }, + "bin": { + "gts": "build/src/cli.js" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "peerDependencies": { + "typescript": ">=3" } }, - "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, + "node_modules/gts/node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" + "@babel/highlight": "^7.10.4" } }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, + "node_modules/gts/node_modules/@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" }, "engines": { "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true + "node_modules/gts/node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "engines": { + "node": ">= 4" + } }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, + "node_modules/gts/node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" }, "engines": { - "node": ">=12" + "node": ">=10.10.0" } }, - "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==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], + "node_modules/gts/node_modules/@typescript-eslint/eslint-plugin": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", + "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", + "dependencies": { + "@typescript-eslint/experimental-utils": "4.33.0", + "@typescript-eslint/scope-manager": "4.33.0", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^4.0.0", + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/fuzzy": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/fuzzy/-/fuzzy-0.1.3.tgz", - "integrity": "sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w==", - "dev": true, + "node_modules/gts/node_modules/@typescript-eslint/parser": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", + "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", + "dependencies": { + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "debug": "^4.3.1" + }, "engines": { - "node": ">= 0.6.0" + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/gaxios": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", - "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", - "dev": true, - "dependencies": { - "abort-controller": "^3.0.0", - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.7" + "node_modules/gts/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">=10" + "node": ">=0.4.0" } }, - "node_modules/gcp-metadata": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz", - "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==", - "dev": true, + "node_modules/gts/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dependencies": { - "gaxios": "^4.0.0", - "json-bigint": "^1.0.0" - }, - "engines": { - "node": ">=10" + "sprintf-js": "~1.0.2" } }, - "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, + "node_modules/gts/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==" + }, + "node_modules/gts/node_modules/eslint": { + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, "engines": { - "node": ">=6.9.0" + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "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, - "engines": { - "node": "6.* || 8.* || >= 10.*" + "node_modules/gts/node_modules/eslint-config-prettier": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-7.2.0.tgz", + "integrity": "sha512-rV4Qu0C3nfJKPOAhFujFxB7RMP+URFyQqqOZW9DMRD7ZDTFyjaIlETU3xzHELt++4ugC0+Jm084HQYkkJe+Ivg==", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "node_modules/get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", - "dev": true, + "node_modules/gts/node_modules/eslint-plugin-prettier": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", + "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "prettier-linter-helpers": "^1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "eslint": ">=5.0.0", + "prettier": ">=1.13.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } } }, - "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, + "node_modules/gts/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, "engines": { "node": ">=8.0.0" } }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, + "node_modules/gts/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==", "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, + "node_modules/gts/node_modules/eslint/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 4" } }, - "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, + "node_modules/gts/node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dependencies": { - "is-glob": "^4.0.3" + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" }, "engines": { - "node": ">=10.13.0" + "node": "^10.12.0 || >=12.0.0" } }, - "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, + "node_modules/gts/node_modules/espree/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==", "engines": { "node": ">=4" } }, - "node_modules/google-auth-library": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.14.1.tgz", - "integrity": "sha512-5Rk7iLNDFhFeBYc3s8l1CqzbEBcdhwR193RlD4vSNFajIcINKI8W8P0JLmBpwymHqqWbX34pJDQu39cSy/6RsA==", - "dev": true, - "dependencies": { - "arrify": "^2.0.0", - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "fast-text-encoding": "^1.0.0", - "gaxios": "^4.0.0", - "gcp-metadata": "^4.2.0", - "gtoken": "^5.0.4", - "jws": "^4.0.0", - "lru-cache": "^6.0.0" - }, + "node_modules/gts/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "engines": { - "node": ">=10" + "node": ">=4.0" } }, - "node_modules/google-auth-library/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==", - "dev": true, + "node_modules/gts/node_modules/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", "dependencies": { - "yallist": "^4.0.0" + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" }, "engines": { - "node": ">=10" + "node": ">=8.0.0" } }, - "node_modules/google-auth-library/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "node_modules/gts/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==", + "engines": { + "node": ">=8" + } }, - "node_modules/google-p12-pem": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.4.tgz", - "integrity": "sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg==", - "dev": true, + "node_modules/gts/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==", "dependencies": { - "node-forge": "^1.3.1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, "bin": { - "gp12-pem": "build/src/bin/gp12-pem.js" + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/gts/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" }, - "engines": { - "node": ">=10" + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/googleapis": { - "version": "84.0.0", - "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-84.0.0.tgz", - "integrity": "sha512-5WWLwmraulw3p55lu0gNpLz2FME1gcuR7QxgmUdAVHMiVN4LEasYjJV9p36gxcf2TMe6bn6+PgQ/63+CvBEgoQ==", - "dev": true, + "node_modules/gts/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dependencies": { - "google-auth-library": "^7.0.2", - "googleapis-common": "^5.0.2" + "tslib": "^1.9.0" }, "engines": { - "node": ">=10" + "npm": ">=2.0.0" } }, - "node_modules/googleapis-common": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-5.1.0.tgz", - "integrity": "sha512-RXrif+Gzhq1QAzfjxulbGvAY3FPj8zq/CYcvgjzDbaBNCD6bUl+86I7mUs4DKWHGruuK26ijjR/eDpWIDgNROA==", - "dev": true, + "node_modules/gts/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dependencies": { - "extend": "^3.0.2", - "gaxios": "^4.0.0", - "google-auth-library": "^7.14.0", - "qs": "^6.7.0", - "url-template": "^2.0.8", - "uuid": "^8.0.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=10.10.0" + "node": ">=10" } }, - "node_modules/got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", - "dev": true, + "node_modules/gts/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==", "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=10.19.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" + "node": ">=8" } }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true + "node_modules/gts/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, - "node_modules/gtoken": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.2.tgz", - "integrity": "sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==", - "dev": true, - "dependencies": { - "gaxios": "^4.0.0", - "google-p12-pem": "^3.1.3", - "jws": "^4.0.0" - }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "engines": { - "node": ">=10" + "node": ">=6" } }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "dependencies": { "function-bind": "^1.1.1" }, @@ -3460,7 +4423,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "engines": { "node": ">=8" } @@ -3469,7 +4431,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -3481,7 +4442,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -3489,41 +4449,20 @@ "node": ">=10" } }, - "node_modules/hosted-git-info/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==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/hosted-git-info/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "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 + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" }, "node_modules/http-cache-semantics": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" }, "node_modules/http2-wrapper": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "dev": true, "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.0.0" @@ -3536,7 +4475,6 @@ "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==", - "dev": true, "dependencies": { "agent-base": "6", "debug": "4" @@ -3549,7 +4487,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, "engines": { "node": ">=10.17.0" } @@ -3558,7 +4495,6 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -3570,7 +4506,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, "funding": [ { "type": "github", @@ -3590,7 +4525,6 @@ "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, "engines": { "node": ">= 4" } @@ -3599,7 +4533,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -3611,20 +4544,10 @@ "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, - "engines": { - "node": ">=4" - } - }, "node_modules/import-local": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -3643,7 +4566,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, "engines": { "node": ">=0.8.19" } @@ -3652,7 +4574,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "dev": true, "engines": { "node": ">=12" }, @@ -3664,7 +4585,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -3673,14 +4593,12 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/inquirer": { "version": "8.2.5", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", - "dev": true, "dependencies": { "ansi-escapes": "^4.2.1", "chalk": "^4.1.1", @@ -3706,7 +4624,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/inquirer-autocomplete-prompt-ipt/-/inquirer-autocomplete-prompt-ipt-2.0.0.tgz", "integrity": "sha512-2qkl1lWeXbFN/O3+xdqJUdMfnNirvWKqgsgmhOjpOiVCcnJf+XYSEjFfdTgk+MDTtVt5AZiWR9Ji+f4YsWBdUw==", - "dev": true, "dependencies": { "ansi-escapes": "^4.2.1", "chalk": "^2.4.2", @@ -3725,7 +4642,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -3737,7 +4653,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -3751,7 +4666,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "dependencies": { "color-name": "1.1.3" } @@ -3759,14 +4673,12 @@ "node_modules/inquirer-autocomplete-prompt-ipt/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==", - "dev": true + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/inquirer-autocomplete-prompt-ipt/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, "engines": { "node": ">=0.8.0" } @@ -3775,7 +4687,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, "engines": { "node": ">=4" } @@ -3784,7 +4695,6 @@ "version": "6.6.7", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, "dependencies": { "tslib": "^1.9.0" }, @@ -3796,7 +4706,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -3807,14 +4716,12 @@ "node_modules/inquirer-autocomplete-prompt-ipt/node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/inquirer/node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -3825,7 +4732,6 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, "funding": [ { "type": "github", @@ -3845,11 +4751,23 @@ "ieee754": "^1.1.13" } }, + "node_modules/inquirer/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==" + }, + "node_modules/inquirer/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==", + "engines": { + "node": ">=8" + } + }, "node_modules/inquirer/node_modules/is-interactive": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, "engines": { "node": ">=8" } @@ -3858,7 +4776,6 @@ "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, "engines": { "node": ">=10" }, @@ -3870,7 +4787,6 @@ "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, "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -3886,7 +4802,6 @@ "version": "5.4.1", "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", @@ -3905,17 +4820,49 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/inquirer/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==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/inquirer/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==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/inquirer/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==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, "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, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -3927,7 +4874,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", - "dev": true, "dependencies": { "builtin-modules": "^3.3.0" }, @@ -3942,7 +4888,6 @@ "version": "2.11.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, "dependencies": { "has": "^1.0.3" }, @@ -3954,7 +4899,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, "bin": { "is-docker": "cli.js" }, @@ -3969,25 +4913,25 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, "engines": { "node": ">=0.10.0" } }, "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, + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-generator-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, "engines": { "node": ">=6" } @@ -3996,7 +4940,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -4008,7 +4951,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", - "dev": true, "engines": { "node": ">=12" }, @@ -4019,14 +4961,12 @@ "node_modules/is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" }, "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, "engines": { "node": ">=0.12.0" } @@ -4035,16 +4975,22 @@ "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, "engines": { "node": ">=8" } }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-port-reachable": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-port-reachable/-/is-port-reachable-3.1.0.tgz", "integrity": "sha512-vjc0SSRNZ32s9SbZBzGaiP6YVB+xglLShhgZD/FHMZUXBvQWaV9CtzgeVhjccFJrI6RAMV+LX7NYxueW/A8W5A==", - "dev": true, "engines": { "node": ">=8" } @@ -4053,7 +4999,6 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/is-reachable/-/is-reachable-5.2.1.tgz", "integrity": "sha512-ViPrrlmt9FTTclYbz6mL/PFyF1TXSpJ9y/zw9QMVJxbhU/7DFkvk/5cTv7S0sXtqbJj32zZ+jKpNAjrYTUZBPQ==", - "dev": true, "dependencies": { "arrify": "^2.0.1", "got": "^11.7.0", @@ -4075,7 +5020,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, "engines": { "node": ">=8" }, @@ -4083,11 +5027,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, "node_modules/is-unicode-supported": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", - "dev": true, "engines": { "node": ">=12" }, @@ -4099,7 +5047,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, "dependencies": { "is-docker": "^2.0.0" }, @@ -4110,14 +5057,12 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, "engines": { "node": ">=8" } @@ -4126,7 +5071,6 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -4142,7 +5086,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^3.0.0", @@ -4156,7 +5099,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -4170,7 +5112,6 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -4180,15 +5121,14 @@ } }, "node_modules/jest": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.4.3.tgz", - "integrity": "sha512-XvK65feuEFGZT8OO0fB/QAQS+LGHvQpaadkH5p47/j3Ocqq3xf2pK9R+G0GzgfuhXVxEv76qCOOcMb5efLk6PA==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.5.0.tgz", + "integrity": "sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==", "dependencies": { - "@jest/core": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/core": "^29.5.0", + "@jest/types": "^29.5.0", "import-local": "^3.0.2", - "jest-cli": "^29.4.3" + "jest-cli": "^29.5.0" }, "bin": { "jest": "bin/jest.js" @@ -4206,10 +5146,9 @@ } }, "node_modules/jest-changed-files": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.4.3.tgz", - "integrity": "sha512-Vn5cLuWuwmi2GNNbokPOEcvrXGSGrqVnPEZV7rC6P7ck07Dyw9RFnvWglnupSh+hGys0ajGtw/bc2ZgweljQoQ==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", + "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", "dependencies": { "execa": "^5.0.0", "p-limit": "^3.1.0" @@ -4219,28 +5158,28 @@ } }, "node_modules/jest-circus": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.4.3.tgz", - "integrity": "sha512-Vw/bVvcexmdJ7MLmgdT3ZjkJ3LKu8IlpefYokxiqoZy6OCQ2VAm6Vk3t/qHiAGUXbdbJKJWnc8gH3ypTbB/OBw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.4.3", - "@jest/expect": "^29.4.3", - "@jest/test-result": "^29.4.3", - "@jest/types": "^29.4.3", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.5.0.tgz", + "integrity": "sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==", + "dependencies": { + "@jest/environment": "^29.5.0", + "@jest/expect": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", "is-generator-fn": "^2.0.0", - "jest-each": "^29.4.3", - "jest-matcher-utils": "^29.4.3", - "jest-message-util": "^29.4.3", - "jest-runtime": "^29.4.3", - "jest-snapshot": "^29.4.3", - "jest-util": "^29.4.3", + "jest-each": "^29.5.0", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-runtime": "^29.5.0", + "jest-snapshot": "^29.5.0", + "jest-util": "^29.5.0", "p-limit": "^3.1.0", - "pretty-format": "^29.4.3", + "pretty-format": "^29.5.0", + "pure-rand": "^6.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -4249,21 +5188,20 @@ } }, "node_modules/jest-cli": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.4.3.tgz", - "integrity": "sha512-PiiAPuFNfWWolCE6t3ZrDXQc6OsAuM3/tVW0u27UWc1KE+n/HSn5dSE6B2juqN7WP+PP0jAcnKtGmI4u8GMYCg==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.5.0.tgz", + "integrity": "sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==", "dependencies": { - "@jest/core": "^29.4.3", - "@jest/test-result": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/core": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/types": "^29.5.0", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^29.4.3", - "jest-util": "^29.4.3", - "jest-validate": "^29.4.3", + "jest-config": "^29.5.0", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", "prompts": "^2.0.1", "yargs": "^17.3.1" }, @@ -4282,32 +5220,95 @@ } } }, + "node_modules/jest-cli/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-cli/node_modules/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==" + }, + "node_modules/jest-cli/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/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==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/node_modules/yargs": { + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "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/jest-cli/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, "node_modules/jest-config": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.4.3.tgz", - "integrity": "sha512-eCIpqhGnIjdUCXGtLhz4gdDoxKSWXKjzNcc5r+0S1GKOp2fwOipx5mRcwa9GB/ArsxJ1jlj2lmlD9bZAsBxaWQ==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.5.0.tgz", + "integrity": "sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==", "dependencies": { "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.4.3", - "@jest/types": "^29.4.3", - "babel-jest": "^29.4.3", + "@jest/test-sequencer": "^29.5.0", + "@jest/types": "^29.5.0", + "babel-jest": "^29.5.0", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^29.4.3", - "jest-environment-node": "^29.4.3", + "jest-circus": "^29.5.0", + "jest-environment-node": "^29.5.0", "jest-get-type": "^29.4.3", "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.4.3", - "jest-runner": "^29.4.3", - "jest-util": "^29.4.3", - "jest-validate": "^29.4.3", + "jest-resolve": "^29.5.0", + "jest-runner": "^29.5.0", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^29.4.3", + "pretty-format": "^29.5.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, @@ -4328,15 +5329,14 @@ } }, "node_modules/jest-diff": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.4.3.tgz", - "integrity": "sha512-YB+ocenx7FZ3T5O9lMVMeLYV4265socJKtkwgk/6YUz/VsEzYDkiMuMhWzZmxm3wDRQvayJu/PjkjjSkjoHsCA==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", + "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.4.3", "jest-get-type": "^29.4.3", - "pretty-format": "^29.4.3" + "pretty-format": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -4346,7 +5346,6 @@ "version": "29.4.3", "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", - "dev": true, "dependencies": { "detect-newline": "^3.0.0" }, @@ -4355,33 +5354,31 @@ } }, "node_modules/jest-each": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.4.3.tgz", - "integrity": "sha512-1ElHNAnKcbJb/b+L+7j0/w7bDvljw4gTv1wL9fYOczeJrbTbkMGQ5iQPFJ3eFQH19VPTx1IyfePdqSpePKss7Q==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.5.0.tgz", + "integrity": "sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==", "dependencies": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "chalk": "^4.0.0", "jest-get-type": "^29.4.3", - "jest-util": "^29.4.3", - "pretty-format": "^29.4.3" + "jest-util": "^29.5.0", + "pretty-format": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-environment-node": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.4.3.tgz", - "integrity": "sha512-gAiEnSKF104fsGDXNkwk49jD/0N0Bqu2K9+aMQXA6avzsA9H3Fiv1PW2D+gzbOSR705bWd2wJZRFEFpV0tXISg==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.5.0.tgz", + "integrity": "sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==", "dependencies": { - "@jest/environment": "^29.4.3", - "@jest/fake-timers": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/environment": "^29.5.0", + "@jest/fake-timers": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", - "jest-mock": "^29.4.3", - "jest-util": "^29.4.3" + "jest-mock": "^29.5.0", + "jest-util": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -4391,26 +5388,24 @@ "version": "29.4.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", - "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-haste-map": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.4.3.tgz", - "integrity": "sha512-eZIgAS8tvm5IZMtKlR8Y+feEOMfo2pSQkmNbufdbMzMSn9nitgGxF1waM/+LbryO3OkMcKS98SUb+j/cQxp/vQ==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.5.0.tgz", + "integrity": "sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==", "dependencies": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", "jest-regex-util": "^29.4.3", - "jest-util": "^29.4.3", - "jest-worker": "^29.4.3", + "jest-util": "^29.5.0", + "jest-worker": "^29.5.0", "micromatch": "^4.0.4", "walker": "^1.0.8" }, @@ -4422,46 +5417,43 @@ } }, "node_modules/jest-leak-detector": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.4.3.tgz", - "integrity": "sha512-9yw4VC1v2NspMMeV3daQ1yXPNxMgCzwq9BocCwYrRgXe4uaEJPAN0ZK37nFBhcy3cUwEVstFecFLaTHpF7NiGA==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz", + "integrity": "sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==", "dependencies": { "jest-get-type": "^29.4.3", - "pretty-format": "^29.4.3" + "pretty-format": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.4.3.tgz", - "integrity": "sha512-TTciiXEONycZ03h6R6pYiZlSkvYgT0l8aa49z/DLSGYjex4orMUcafuLXYyyEDWB1RKglq00jzwY00Ei7yFNVg==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz", + "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==", "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^29.4.3", + "jest-diff": "^29.5.0", "jest-get-type": "^29.4.3", - "pretty-format": "^29.4.3" + "pretty-format": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-message-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.4.3.tgz", - "integrity": "sha512-1Y8Zd4ZCN7o/QnWdMmT76If8LuDv23Z1DRovBj/vcSFNlGCJGoO8D1nJDw1AdyAGUk0myDLFGN5RbNeJyCRGCw==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", + "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^29.4.3", + "pretty-format": "^29.5.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -4470,14 +5462,13 @@ } }, "node_modules/jest-mock": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.4.3.tgz", - "integrity": "sha512-LjFgMg+xed9BdkPMyIJh+r3KeHt1klXPJYBULXVVAkbTaaKjPX1o1uVCAZADMEp/kOxGTwy/Ot8XbvgItOrHEg==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.5.0.tgz", + "integrity": "sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==", "dependencies": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "@types/node": "*", - "jest-util": "^29.4.3" + "jest-util": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -4487,7 +5478,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, "engines": { "node": ">=6" }, @@ -4504,23 +5494,21 @@ "version": "29.4.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", - "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-resolve": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.4.3.tgz", - "integrity": "sha512-GPokE1tzguRyT7dkxBim4wSx6E45S3bOQ7ZdKEG+Qj0Oac9+6AwJPCk0TZh5Vu0xzeX4afpb+eDmgbmZFFwpOw==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.5.0.tgz", + "integrity": "sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==", "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.4.3", + "jest-haste-map": "^29.5.0", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.4.3", - "jest-validate": "^29.4.3", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", "resolve": "^1.20.0", "resolve.exports": "^2.0.0", "slash": "^3.0.0" @@ -4530,43 +5518,41 @@ } }, "node_modules/jest-resolve-dependencies": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.4.3.tgz", - "integrity": "sha512-uvKMZAQ3nmXLH7O8WAOhS5l0iWyT3WmnJBdmIHiV5tBbdaDZ1wqtNX04FONGoaFvSOSHBJxnwAVnSn1WHdGVaw==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz", + "integrity": "sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==", "dependencies": { "jest-regex-util": "^29.4.3", - "jest-snapshot": "^29.4.3" + "jest-snapshot": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-runner": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.4.3.tgz", - "integrity": "sha512-GWPTEiGmtHZv1KKeWlTX9SIFuK19uLXlRQU43ceOQ2hIfA5yPEJC7AMkvFKpdCHx6pNEdOD+2+8zbniEi3v3gA==", - "dev": true, - "dependencies": { - "@jest/console": "^29.4.3", - "@jest/environment": "^29.4.3", - "@jest/test-result": "^29.4.3", - "@jest/transform": "^29.4.3", - "@jest/types": "^29.4.3", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.5.0.tgz", + "integrity": "sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==", + "dependencies": { + "@jest/console": "^29.5.0", + "@jest/environment": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.13.1", "graceful-fs": "^4.2.9", "jest-docblock": "^29.4.3", - "jest-environment-node": "^29.4.3", - "jest-haste-map": "^29.4.3", - "jest-leak-detector": "^29.4.3", - "jest-message-util": "^29.4.3", - "jest-resolve": "^29.4.3", - "jest-runtime": "^29.4.3", - "jest-util": "^29.4.3", - "jest-watcher": "^29.4.3", - "jest-worker": "^29.4.3", + "jest-environment-node": "^29.5.0", + "jest-haste-map": "^29.5.0", + "jest-leak-detector": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-resolve": "^29.5.0", + "jest-runtime": "^29.5.0", + "jest-util": "^29.5.0", + "jest-watcher": "^29.5.0", + "jest-worker": "^29.5.0", "p-limit": "^3.1.0", "source-map-support": "0.5.13" }, @@ -4575,31 +5561,30 @@ } }, "node_modules/jest-runtime": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.4.3.tgz", - "integrity": "sha512-F5bHvxSH+LvLV24vVB3L8K467dt3y3dio6V3W89dUz9nzvTpqd/HcT9zfYKL2aZPvD63vQFgLvaUX/UpUhrP6Q==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.5.0.tgz", + "integrity": "sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==", "dependencies": { - "@jest/environment": "^29.4.3", - "@jest/fake-timers": "^29.4.3", - "@jest/globals": "^29.4.3", + "@jest/environment": "^29.5.0", + "@jest/fake-timers": "^29.5.0", + "@jest/globals": "^29.5.0", "@jest/source-map": "^29.4.3", - "@jest/test-result": "^29.4.3", - "@jest/transform": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.4.3", - "jest-message-util": "^29.4.3", - "jest-mock": "^29.4.3", + "jest-haste-map": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-mock": "^29.5.0", "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.4.3", - "jest-snapshot": "^29.4.3", - "jest-util": "^29.4.3", + "jest-resolve": "^29.5.0", + "jest-snapshot": "^29.5.0", + "jest-util": "^29.5.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, @@ -4607,11 +5592,18 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-runtime/node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "engines": { + "node": ">=8" + } + }, "node_modules/jest-snapshot": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.4.3.tgz", - "integrity": "sha512-NGlsqL0jLPDW91dz304QTM/SNO99lpcSYYAjNiX0Ou+sSGgkanKBcSjCfp/pqmiiO1nQaOyLp6XQddAzRcx3Xw==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz", + "integrity": "sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==", "dependencies": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", @@ -4619,46 +5611,32 @@ "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.4.3", - "@jest/transform": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/expect-utils": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", "@types/babel__traverse": "^7.0.6", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^29.4.3", + "expect": "^29.5.0", "graceful-fs": "^4.2.9", - "jest-diff": "^29.4.3", + "jest-diff": "^29.5.0", "jest-get-type": "^29.4.3", - "jest-haste-map": "^29.4.3", - "jest-matcher-utils": "^29.4.3", - "jest-message-util": "^29.4.3", - "jest-util": "^29.4.3", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0", "natural-compare": "^1.4.0", - "pretty-format": "^29.4.3", + "pretty-format": "^29.5.0", "semver": "^7.3.5" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-snapshot/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==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/jest-snapshot/node_modules/semver": { "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -4669,19 +5647,12 @@ "node": ">=10" } }, - "node_modules/jest-snapshot/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/jest-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.4.3.tgz", - "integrity": "sha512-ToSGORAz4SSSoqxDSylWX8JzkOQR7zoBtNRsA7e+1WUX5F8jrOwaNpuh1YfJHJKDHXLHmObv5eOjejUd+/Ws+Q==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", + "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==", "dependencies": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -4693,17 +5664,16 @@ } }, "node_modules/jest-validate": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.4.3.tgz", - "integrity": "sha512-J3u5v7aPQoXPzaar6GndAVhdQcZr/3osWSgTeKg5v574I9ybX/dTyH0AJFb5XgXIB7faVhf+rS7t4p3lL9qFaw==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz", + "integrity": "sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==", "dependencies": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "camelcase": "^6.2.0", "chalk": "^4.0.0", "jest-get-type": "^29.4.3", "leven": "^3.1.0", - "pretty-format": "^29.4.3" + "pretty-format": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -4713,7 +5683,6 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, "engines": { "node": ">=10" }, @@ -4722,18 +5691,17 @@ } }, "node_modules/jest-watcher": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.4.3.tgz", - "integrity": "sha512-zwlXH3DN3iksoIZNk73etl1HzKyi5FuQdYLnkQKm5BW4n8HpoG59xSwpVdFrnh60iRRaRBGw0gcymIxjJENPcA==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.5.0.tgz", + "integrity": "sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==", "dependencies": { - "@jest/test-result": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/test-result": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.13.1", - "jest-util": "^29.4.3", + "jest-util": "^29.5.0", "string-length": "^4.0.1" }, "engines": { @@ -4741,13 +5709,12 @@ } }, "node_modules/jest-worker": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.4.3.tgz", - "integrity": "sha512-GLHN/GTAAMEy5BFdvpUfzr9Dr80zQqBrh0fz1mtRMe05hqP45+HfQltu7oTBfduD0UeZs09d+maFtFYAXFWvAA==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz", + "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==", "dependencies": { "@types/node": "*", - "jest-util": "^29.4.3", + "jest-util": "^29.5.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, @@ -4759,7 +5726,6 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -4774,7 +5740,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/js-cleanup/-/js-cleanup-1.2.0.tgz", "integrity": "sha512-JeDD0yiiSt80fXzAVa/crrS0JDPQljyBG/RpOtaSbyDq03VHa9szJWMaWOYU/bcTn412uMN2MxApXq8v79cUiQ==", - "dev": true, "dependencies": { "magic-string": "^0.25.7", "perf-regexes": "^1.0.1", @@ -4788,7 +5753,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", - "dev": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/js-sdsl" @@ -4797,17 +5761,14 @@ "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 + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "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, + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" @@ -4817,7 +5778,6 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, "bin": { "jsesc": "bin/jsesc" }, @@ -4829,7 +5789,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "dev": true, "dependencies": { "bignumber.js": "^9.0.0" } @@ -4837,32 +5796,27 @@ "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 + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "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==", - "dev": true + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "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 + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, "bin": { "json5": "lib/cli.js" }, @@ -4874,7 +5828,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, "dependencies": { "universalify": "^2.0.0" }, @@ -4882,108 +5835,335 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/jwa": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", - "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", - "dev": true, + "node_modules/jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "dependencies": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/keyv": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", + "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "engines": { + "node": ">=6" + } + }, + "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==", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/license-check-and-add": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/license-check-and-add/-/license-check-and-add-4.0.5.tgz", + "integrity": "sha512-FySnMi3Kf/vO5jka8tcbVF1FhDFb8PWsQ8pg5Y7U/zkQgta+fIrJGcGHO58WFjfKlgvhneG1uQ00Fpxzhau3QA==", + "dependencies": { + "fs-extra": "^8.1.0", + "gitignore-to-glob": "^0.3.0", + "globby": "^10.0.1", + "ignore": "^5.1.2", + "yargs": "^13.3.0" + }, + "bin": { + "license-check-and-add": "dist/src/cli.js" + } + }, + "node_modules/license-check-and-add/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/license-check-and-add/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/license-check-and-add/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/license-check-and-add/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==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/license-check-and-add/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==" + }, + "node_modules/license-check-and-add/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "node_modules/license-check-and-add/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==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/license-check-and-add/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/license-check-and-add/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "engines": { + "node": ">=4" + } + }, + "node_modules/license-check-and-add/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/license-check-and-add/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==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/license-check-and-add/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==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/license-check-and-add/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==", "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", - "dev": true, - "dependencies": { - "jwa": "^2.0.0", - "safe-buffer": "^5.0.1" + "node_modules/license-check-and-add/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==", + "engines": { + "node": ">=4" } }, - "node_modules/keyv": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", - "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", - "dev": true, + "node_modules/license-check-and-add/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dependencies": { - "json-buffer": "3.0.1" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, + "node_modules/license-check-and-add/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dependencies": { + "ansi-regex": "^4.1.0" + }, "engines": { "node": ">=6" } }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, + "node_modules/license-check-and-add/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "engines": { - "node": ">=6" + "node": ">= 4.0.0" } }, - "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, + "node_modules/license-check-and-add/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=6" + } + }, + "node_modules/license-check-and-add/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==" + }, + "node_modules/license-check-and-add/node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dependencies": { + "cliui": "^5.0.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": "^13.1.2" + } + }, + "node_modules/license-check-and-add/node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "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, + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", "dependencies": { - "p-locate": "^4.1.0" + "p-locate": "^6.0.0" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "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==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" }, "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 + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==" }, "node_modules/log-symbols": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", - "dev": true, "dependencies": { "chalk": "^5.0.0", "is-unicode-supported": "^1.1.0" @@ -4999,7 +6179,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", - "dev": true, "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -5011,7 +6190,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-2.2.0.tgz", "integrity": "sha512-S0FayMXku80toa5sZ6Ro4C+s+EtFDCsyJNG/AzFMfX3AxD5Si4dZsgzm/kKnbOxHl5Cv8jBlno8+3XYIh2pNjQ==", - "dev": true, "dependencies": { "currently-unhandled": "^0.4.1", "signal-exit": "^3.0.2" @@ -5024,25 +6202,25 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, "engines": { "node": ">=8" } }, "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, + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dependencies": { - "yallist": "^3.0.2" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, "node_modules/magic-string": { "version": "0.25.9", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, "dependencies": { "sourcemap-codec": "^1.4.8" } @@ -5051,7 +6229,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, "dependencies": { "semver": "^6.0.0" }, @@ -5065,29 +6242,206 @@ "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, "dependencies": { "tmpl": "1.0.5" } }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/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==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + }, + "node_modules/meow/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==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/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==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/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==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/read-pkg-up/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "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" + } + }, + "node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } }, "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -5100,7 +6454,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, "engines": { "node": ">=6" } @@ -5109,7 +6462,14 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "engines": { "node": ">=4" } @@ -5118,7 +6478,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -5126,17 +6485,63 @@ "node": "*" } }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/minimist-options/node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/minipass": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.5.tgz", + "integrity": "sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "engines": { + "node": "*" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/multimatch": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", - "dev": true, "dependencies": { "@types/minimatch": "^3.0.3", "array-differ": "^3.0.0", @@ -5151,23 +6556,38 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/multimatch/node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" + }, "node_modules/mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, "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 + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==" + }, + "node_modules/ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", + "bin": { + "ncp": "bin/ncp" + } }, "node_modules/node-fetch": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", - "dev": true, "dependencies": { "whatwg-url": "^5.0.0" }, @@ -5187,7 +6607,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true, "engines": { "node": ">= 6.13.0" } @@ -5195,20 +6614,17 @@ "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" }, "node_modules/node-releases": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", - "dev": true + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" }, "node_modules/normalize-newline": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/normalize-newline/-/normalize-newline-4.1.0.tgz", "integrity": "sha512-ff4jKqMI8Xl50/4Mms/9jPobzAV/UK+kXG2XJ/7AqOmxIx8mqfqTIHYxuAnEgJ2AQeBbLnlbmZ5+38Y9A0w/YA==", - "dev": true, "dependencies": { "replace-buffer": "^1.2.1" }, @@ -5223,24 +6639,11 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-package-data/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==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" }, "engines": { "node": ">=10" @@ -5250,7 +6653,6 @@ "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -5261,17 +6663,10 @@ "node": ">=10" } }, - "node_modules/normalize-package-data/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "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, "engines": { "node": ">=0.10.0" } @@ -5280,7 +6675,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, "engines": { "node": ">=10" }, @@ -5292,7 +6686,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, "dependencies": { "path-key": "^3.0.0" }, @@ -5304,7 +6697,6 @@ "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5313,7 +6705,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "dependencies": { "wrappy": "1" } @@ -5322,7 +6713,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, "dependencies": { "mimic-fn": "^2.1.0" }, @@ -5337,7 +6727,6 @@ "version": "8.4.2", "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dev": true, "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", @@ -5354,7 +6743,6 @@ "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -5368,18 +6756,17 @@ } }, "node_modules/ora": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/ora/-/ora-6.1.2.tgz", - "integrity": "sha512-EJQ3NiP5Xo94wJXIzAyOtSb0QEIAUu7m8t6UZ9krbz0vAJqr92JpcK/lEXg91q6B9pEGqrykkd2EQplnifDSBw==", - "dev": true, + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-6.2.0.tgz", + "integrity": "sha512-c1qb/1rdE+EFDYiLXh10VY459uMh7DN9zlgd8mZJLoeiPpYllN8eAOiih2Rkah5ywxRm5tHN5C9zPheDq8d1MA==", "dependencies": { - "bl": "^5.0.0", "chalk": "^5.0.0", "cli-cursor": "^4.0.0", "cli-spinners": "^2.6.1", "is-interactive": "^2.0.0", "is-unicode-supported": "^1.1.0", "log-symbols": "^5.1.0", + "stdin-discarder": "^0.1.0", "strip-ansi": "^7.0.1", "wcwidth": "^1.0.1" }, @@ -5394,7 +6781,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, "engines": { "node": ">=12" }, @@ -5406,7 +6792,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", - "dev": true, "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -5418,7 +6803,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", - "dev": true, "dependencies": { "restore-cursor": "^4.0.0" }, @@ -5433,7 +6817,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", - "dev": true, "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -5449,7 +6832,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -5464,7 +6846,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -5473,7 +6854,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-any/-/p-any-3.0.0.tgz", "integrity": "sha512-5rqbqfsRWNb0sukt0awwgJMlaep+8jV45S15SKKB34z4UuzjcofIfnriCBhWjZP2jbVtjt9yRl7buB6RlKsu9w==", - "dev": true, "dependencies": { "p-cancelable": "^2.0.0", "p-some": "^5.0.0" @@ -5489,7 +6869,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "dev": true, "engines": { "node": ">=8" } @@ -5498,7 +6877,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "dev": true, "engines": { "node": ">=4" } @@ -5507,7 +6885,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -5519,27 +6896,39 @@ } }, "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, + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "dependencies": { - "p-limit": "^2.2.0" + "p-limit": "^4.0.0" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-locate/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, + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "dependencies": { - "p-try": "^2.0.0" + "yocto-queue": "^1.0.0" }, "engines": { - "node": ">=6" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "engines": { + "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -5549,7 +6938,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", - "dev": true, "dependencies": { "aggregate-error": "^4.0.0" }, @@ -5564,7 +6952,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-some/-/p-some-5.0.0.tgz", "integrity": "sha512-Js5XZxo6vHjB9NOYAzWDYAIyyiPvva0DWESAIWIK7uhSpGsyg5FwUPxipU/SOQx5x9EqhOh545d1jo6cVkitig==", - "dev": true, "dependencies": { "aggregate-error": "^3.0.0", "p-cancelable": "^2.0.0" @@ -5580,7 +6967,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -5593,7 +6979,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, "engines": { "node": ">=6" } @@ -5602,7 +6987,6 @@ "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, "engines": { "node": ">=8" } @@ -5611,7 +6995,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, "dependencies": { "p-finally": "^1.0.0" }, @@ -5623,16 +7006,25 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, "engines": { "node": ">=6" } }, + "node_modules/package-name-regex": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/package-name-regex/-/package-name-regex-2.0.6.tgz", + "integrity": "sha512-gFL35q7kbE/zBaPA3UKhp2vSzcPYx2ecbYuwv1ucE9Il6IIgBDweBlH8D68UFGZic2MkllKa2KHCfC1IQBQUYA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/dword-design" + } + }, "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, "dependencies": { "callsites": "^3.0.0" }, @@ -5644,7 +7036,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -5659,19 +7050,17 @@ } }, "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, + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "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==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -5680,7 +7069,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "engines": { "node": ">=8" } @@ -5688,14 +7076,43 @@ "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 + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-scurry": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.6.1.tgz", + "integrity": "sha512-OW+5s+7cw6253Q4E+8qQ/u1fVvcJQCJo/VFD8pje+dbJCF1n5ZRMV2AEHbGp+5Q7jxQIYJxkHopnj6nzdGeZLA==", + "dependencies": { + "lru-cache": "^7.14.1", + "minipass": "^4.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } }, "node_modules/perf-regexes": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/perf-regexes/-/perf-regexes-1.0.1.tgz", "integrity": "sha512-L7MXxUDtqr4PUaLFCDCXBfGV/6KLIuSEccizDI7JxT+c9x1G1v04BQ4+4oag84SHaCdrBgQAIs/Cqn+flwFPng==", - "dev": true, "engines": { "node": ">=6.14" } @@ -5703,14 +7120,12 @@ "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, "engines": { "node": ">=8.6" }, @@ -5722,7 +7137,6 @@ "version": "4.0.5", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true, "engines": { "node": ">= 6" } @@ -5731,7 +7145,6 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, "dependencies": { "find-up": "^4.0.0" }, @@ -5739,11 +7152,66 @@ "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==", + "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==", + "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==", + "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==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/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==", + "engines": { + "node": ">=8" + } + }, "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, "engines": { "node": ">= 0.8.0" } @@ -5752,16 +7220,14 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-3.0.1.tgz", "integrity": "sha512-BLxfZh+m6UiAiCPZFJ4+vYoL7NrRs5XgCTRrjseATAggXhdZKKxn+JUNmuVYWY23bDHgaEHodxw8mnmtVEDtHw==", - "dev": true, "engines": { "node": ">=8" } }, "node_modules/prettier": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", - "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", - "dev": true, + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.5.tgz", + "integrity": "sha512-3gzuxrHbKUePRBB4ZeU08VNkUcqEHaUaouNt0m7LGP4Hti/NuB07C7PPTM/LkWqXoJYJn2McEo5+kxPNrtQkLQ==", "bin": { "prettier": "bin-prettier.js" }, @@ -5776,7 +7242,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, "dependencies": { "fast-diff": "^1.1.2" }, @@ -5785,10 +7250,9 @@ } }, "node_modules/pretty-format": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", - "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", + "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", "dependencies": { "@jest/schemas": "^29.4.3", "ansi-styles": "^5.0.0", @@ -5802,7 +7266,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, "engines": { "node": ">=10" }, @@ -5810,11 +7273,18 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -5827,7 +7297,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -5837,16 +7306,29 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, "engines": { "node": ">=6" } }, + "node_modules/pure-rand": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.1.tgz", + "integrity": "sha512-t+x1zEHDjBwkDGY5v5ApnZ/utcd4XYDiJsaQQoptTXgUXX95sDg1elCdJghzicm7n2mbCBJ3uYWr6M22SO19rg==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.1.tgz", + "integrity": "sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==", "dependencies": { "side-channel": "^1.0.4" }, @@ -5860,14 +7342,12 @@ "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, "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", @@ -5887,7 +7367,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, "engines": { "node": ">=10" }, @@ -5898,14 +7377,12 @@ "node_modules/react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, "node_modules/read-pkg": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", - "dev": true, "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^3.0.2", @@ -5923,7 +7400,6 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", - "dev": true, "dependencies": { "find-up": "^5.0.0", "read-pkg": "^6.0.0", @@ -5940,7 +7416,6 @@ "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, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -5956,7 +7431,6 @@ "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, "dependencies": { "p-locate": "^5.0.0" }, @@ -5971,7 +7445,6 @@ "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, "dependencies": { "p-limit": "^3.0.2" }, @@ -5982,11 +7455,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/read-pkg-up/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==", + "engines": { + "node": ">=8" + } + }, "node_modules/read-pkg-up/node_modules/type-fest": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true, "engines": { "node": ">=10" }, @@ -5998,7 +7478,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true, "engines": { "node": ">=10" }, @@ -6006,25 +7485,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "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, "dependencies": { "picomatch": "^2.2.1" }, @@ -6036,7 +7500,6 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "dev": true, "dependencies": { "minimatch": "^3.0.5" }, @@ -6044,11 +7507,30 @@ "node": ">=6.0.0" } }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/redent/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==", + "engines": { + "node": ">=8" + } + }, "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, "engines": { "node": ">=8" }, @@ -6060,7 +7542,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/replace-buffer/-/replace-buffer-1.2.1.tgz", "integrity": "sha512-ly3OKwKu+3T55DjP5PjIMzxgz9lFx6dQnBmAIxryZyRKl8f22juy12ShOyuq8WrQE5UlFOseZgQZDua0iF9DHw==", - "dev": true, "engines": { "node": ">=4" } @@ -6069,22 +7550,32 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, "engines": { "node": ">=0.10.0" } }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "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==" + }, "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==", - "dev": true + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "node_modules/resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, "dependencies": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", @@ -6100,14 +7591,12 @@ "node_modules/resolve-alpn": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" }, "node_modules/resolve-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, "dependencies": { "resolve-from": "^5.0.0" }, @@ -6115,20 +7604,26 @@ "node": ">=8" } }, - "node_modules/resolve-from": { + "node_modules/resolve-cwd/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, "engines": { "node": ">=8" } }, + "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==", + "engines": { + "node": ">=4" + } + }, "node_modules/resolve.exports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.0.tgz", - "integrity": "sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg==", - "dev": true, + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.1.tgz", + "integrity": "sha512-OEJWVeimw8mgQuj3HfkNl4KqRevH7lzeQNaWRPfx0PPse7Jk6ozcsG4FKVgtzDsC1KUF+YlTHh17NcgHOPykLw==", "engines": { "node": ">=10" } @@ -6137,7 +7632,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", - "dev": true, "dependencies": { "lowercase-keys": "^2.0.0" }, @@ -6149,7 +7643,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -6162,32 +7655,71 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, "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==", - "dev": true, + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.0.tgz", + "integrity": "sha512-X36S+qpCUR0HjXlkDe4NAOhS//aHH0Z+h8Ckf2auGJk3PTnx5rLmrHkwNdbVQuCSUhOyFrlRvFEllZOYE+yZGQ==", "dependencies": { - "glob": "^7.1.3" + "glob": "^9.2.0" }, "bin": { - "rimraf": "bin.js" + "rimraf": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/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==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.1.tgz", + "integrity": "sha512-qERvJb7IGsnkx6YYmaaGvDpf77c951hICMdWaFXyH3PlVob8sbPJJyJX0kWkiCWyXUzoy9UOTNjGg0RbD8bYIw==", + "dependencies": { + "fs.realpath": "^1.0.0", + "minimatch": "^7.4.1", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.2.tgz", + "integrity": "sha512-xy4q7wou3vUoC9k1xGTXc+awNdGaGVHtFUaey8tiX4H1QRc04DZ/rmDFwNm2EBsuYEhAZ6SgMmYf3InGY6OauA==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/rollup": { - "version": "3.17.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.17.2.tgz", - "integrity": "sha512-qMNZdlQPCkWodrAZ3qnJtvCAl4vpQ8q77uEujVCCbC/6CLB7Lcmvjq7HyiOSnf4fxTT9XgsE36oLHJBH49xjqA==", - "dev": true, + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.20.0.tgz", + "integrity": "sha512-YsIfrk80NqUDrxrjWPXUa7PWvAfegZEXHuPsEZg58fGCdjL1I9C1i/NaG+L+27kxxwkrG/QEDEQc8s/ynXWWGQ==", "bin": { "rollup": "dist/bin/rollup" }, @@ -6203,7 +7735,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/rollup-plugin-cleanup/-/rollup-plugin-cleanup-3.2.1.tgz", "integrity": "sha512-zuv8EhoO3TpnrU8MX8W7YxSbO4gmOR0ny06Lm3nkFfq0IVKdBUtHwhVzY1OAJyNCIAdLiyPnOrU0KnO0Fri1GQ==", - "dev": true, "dependencies": { "js-cleanup": "^1.2.0", "rollup-pluginutils": "^2.8.2" @@ -6215,11 +7746,43 @@ "rollup": ">=2.0" } }, + "node_modules/rollup-plugin-license": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-license/-/rollup-plugin-license-3.0.1.tgz", + "integrity": "sha512-/lec6Y94Y3wMfTDeYTO/jSXII0GQ/XkDZCiqkMKxyU5D5nGPaxr/2JNYvAgYsoCYuOLGOanKDPjCCQiTT96p7A==", + "dependencies": { + "commenting": "~1.1.0", + "glob": "~7.2.0", + "lodash": "~4.17.21", + "magic-string": "~0.26.2", + "mkdirp": "~1.0.4", + "moment": "~2.29.3", + "package-name-regex": "~2.0.6", + "spdx-expression-validate": "~2.0.0", + "spdx-satisfies": "~5.0.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.0.0 || ^2.0.0 || ^3.0.0" + } + }, + "node_modules/rollup-plugin-license/node_modules/magic-string": { + "version": "0.26.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz", + "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==", + "dependencies": { + "sourcemap-codec": "^1.4.8" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/rollup-pluginutils": { "version": "2.8.2", "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", - "dev": true, "dependencies": { "estree-walker": "^0.6.1" } @@ -6227,14 +7790,12 @@ "node_modules/rollup-pluginutils/node_modules/estree-walker": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" }, "node_modules/router-ips": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/router-ips/-/router-ips-1.0.0.tgz", "integrity": "sha512-yBo6F52Un/WYioXbedBGvrKIiofbwt+4cUhdqDb9fNMJBI4D4jOy7jlxxaRVEvICPKU7xMmJDtDFR6YswX/sFQ==", - "dev": true, "engines": { "node": ">=4" } @@ -6243,7 +7804,6 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, "engines": { "node": ">=0.12.0" } @@ -6252,7 +7812,6 @@ "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", @@ -6275,7 +7834,6 @@ "version": "7.8.0", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", - "dev": true, "dependencies": { "tslib": "^2.1.0" } @@ -6284,7 +7842,6 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, "funding": [ { "type": "github", @@ -6303,14 +7860,12 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, "bin": { "semver": "bin/semver.js" } @@ -6318,14 +7873,17 @@ "node_modules/server-destroy": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", - "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==", - "dev": true + "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==" + }, + "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==" }, "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, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -6337,7 +7895,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, "engines": { "node": ">=8" } @@ -6346,7 +7903,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -6359,20 +7915,17 @@ "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 + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, "node_modules/skip-regex": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/skip-regex/-/skip-regex-1.0.2.tgz", "integrity": "sha512-pEjMUbwJ5Pl/6Vn6FsamXHXItJXSRftcibixDmNCWbWhic0hzHrwkMZo0IZ7fMRH9KxcWDFSkzhccB4285PutA==", - "dev": true, "engines": { "node": ">=4.2" } @@ -6381,7 +7934,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, "engines": { "node": ">=8" } @@ -6390,7 +7942,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "dev": true, "dependencies": { "ansi-styles": "^6.0.0", "is-fullwidth-code-point": "^4.0.0" @@ -6406,7 +7957,6 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, "engines": { "node": ">=12" }, @@ -6414,23 +7964,10 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -6439,7 +7976,6 @@ "version": "0.5.13", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -6449,14 +7985,22 @@ "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "deprecated": "Please use @jridgewell/sourcemap-codec instead", - "dev": true + "deprecated": "Please use @jridgewell/sourcemap-codec instead" + }, + "node_modules/spdx-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/spdx-compare/-/spdx-compare-1.0.0.tgz", + "integrity": "sha512-C1mDZOX0hnu0ep9dfmuoi03+eOdDoz2yvK79RxbcrVEG1NO1Ph35yW102DHWKN4pk80nwCgeMmSY5L25VE4D9A==", + "dependencies": { + "array-find-index": "^1.0.2", + "spdx-expression-parse": "^3.0.0", + "spdx-ranges": "^2.0.0" + } }, "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -6465,30 +8009,49 @@ "node_modules/spdx-exceptions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-expression-validate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-validate/-/spdx-expression-validate-2.0.0.tgz", + "integrity": "sha512-b3wydZLM+Tc6CFvaRDBOF9d76oGIHNCLYFeHbftFXUWjnfZWganmDmvtM5sm1cRwJc/VDBMLyGGrsLFd1vOxbg==", + "dependencies": { + "spdx-expression-parse": "^3.0.0" } }, "node_modules/spdx-license-ids": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", - "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", - "dev": true + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==" + }, + "node_modules/spdx-ranges": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/spdx-ranges/-/spdx-ranges-2.1.1.tgz", + "integrity": "sha512-mcdpQFV7UDAgLpXEE/jOMqvK4LBoO0uTQg0uvXUewmEFhpiZx5yJSZITHB8w1ZahKdhfZqP5GPEOKLyEq5p8XA==" + }, + "node_modules/spdx-satisfies": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/spdx-satisfies/-/spdx-satisfies-5.0.1.tgz", + "integrity": "sha512-Nwor6W6gzFp8XX4neaKQ7ChV4wmpSh2sSDemMFSzHxpTw460jxFYeOn+jq4ybnSSw/5sc3pjka9MQPouksQNpw==", + "dependencies": { + "spdx-compare": "^1.0.0", + "spdx-expression-parse": "^3.0.0", + "spdx-ranges": "^2.0.0" + } }, "node_modules/split-lines": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/split-lines/-/split-lines-3.0.0.tgz", "integrity": "sha512-d0TpRBL/VfKDXsk8JxPF7zgF5pCUDdBMSlEL36xBgVeaX448t+yGXcJaikUyzkoKOJ0l6KpMfygzJU9naIuivw==", - "dev": true, "engines": { "node": ">=12" }, @@ -6499,14 +8062,12 @@ "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, "dependencies": { "escape-string-regexp": "^2.0.0" }, @@ -6514,20 +8075,32 @@ "node": ">=10" } }, - "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==", - "dev": true, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/stdin-discarder": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", + "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==", "dependencies": { - "safe-buffer": "~5.2.0" + "bl": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" @@ -6537,24 +8110,50 @@ } }, "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, + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "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, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -6563,28 +8162,39 @@ } }, "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, + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-5.0.0.tgz", + "integrity": "sha512-p+byADHF7SzEcVnLvc/r3uognM1hUhObuHXxJcgLCfD194XAkaLbjq3Wzb0N5G2tgIjH0dgT708Z51QxMeu60A==", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, "engines": { "node": ">=6" } }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dependencies": { + "min-indent": "^1.0.0" + }, + "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, "engines": { "node": ">=8" }, @@ -6596,7 +8206,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -6608,7 +8217,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -6616,11 +8224,87 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/table": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/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==" + }, + "node_modules/table/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/table/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/table/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==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -6633,20 +8317,17 @@ "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 + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -6657,14 +8338,12 @@ "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, "engines": { "node": ">=4" } @@ -6673,7 +8352,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -6684,14 +8362,20 @@ "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "engines": { + "node": ">=8" + } }, "node_modules/ts-jest": { "version": "29.0.5", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.0.5.tgz", "integrity": "sha512-PL3UciSgIpQ7f6XjVOmbi96vmDHUqAyqDr8YxzopDqX3kfgYtX1cuNeBjP+L9sFXi6nzsGGA6R3fP3DDDJyrxA==", - "dev": true, "dependencies": { "bs-logger": "0.x", "fast-json-stable-stringify": "2.x", @@ -6730,23 +8414,10 @@ } } }, - "node_modules/ts-jest/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==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/ts-jest/node_modules/semver": { "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -6757,17 +8428,18 @@ "node": ">=10" } }, - "node_modules/ts-jest/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "node_modules/ts-jest/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } }, "node_modules/ts2gas": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/ts2gas/-/ts2gas-4.2.0.tgz", "integrity": "sha512-5xZugaeM3wKQPj/vrWnrtYjNh4xnIz6cGSW/smCe9OTmkh1+KvHpm7M7HLq/OnBaljf4+yKctC4AYimBi4T1/Q==", - "dev": true, "dependencies": { "type-fest": "^2.1.0", "typescript": "^4.4.2" @@ -6780,7 +8452,6 @@ "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true, "engines": { "node": ">=12.20" }, @@ -6791,14 +8462,31 @@ "node_modules/tslib": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "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, "dependencies": { "prelude-ls": "^1.2.1" }, @@ -6810,16 +8498,14 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, "engines": { "node": ">=4" } }, "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, + "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==", "engines": { "node": ">=10" }, @@ -6827,11 +8513,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "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==", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, "node_modules/typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -6844,7 +8537,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, "engines": { "node": ">= 10.0.0" } @@ -6853,7 +8545,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "dev": true, "funding": [ { "type": "opencollective", @@ -6879,7 +8570,6 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, "dependencies": { "punycode": "^2.1.0" } @@ -6888,7 +8578,6 @@ "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -6897,29 +8586,30 @@ "node_modules/url-template": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", - "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==", - "dev": true + "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==" }, "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==", - "dev": true + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "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, "bin": { "uuid": "dist/bin/uuid" } }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" + }, "node_modules/v8-to-istanbul": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", - "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -6932,14 +8622,12 @@ "node_modules/v8-to-istanbul/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 + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -6949,7 +8637,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, "dependencies": { "makeerror": "1.0.12" } @@ -6958,7 +8645,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, "dependencies": { "defaults": "^1.0.3" } @@ -6966,14 +8652,12 @@ "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -6983,7 +8667,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -6994,11 +8677,15 @@ "node": ">= 8" } }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" + }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -7007,7 +8694,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -7020,72 +8706,73 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi/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==" + }, + "node_modules/wrap-ansi/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/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==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "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==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, + "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": { "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } }, "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, "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 - }, - "node_modules/yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "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, + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "engines": { - "node": ">=12" + "node": ">=10" } }, "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, "engines": { "node": ">=10" }, @@ -7099,7 +8786,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, "requires": { "@jridgewell/gen-mapping": "^0.1.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -7109,7 +8795,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, "requires": { "@babel/highlight": "^7.18.6" } @@ -7117,25 +8802,23 @@ "@babel/compat-data": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz", - "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==", - "dev": true + "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==" }, "@babel/core": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.0.tgz", - "integrity": "sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA==", - "dev": true, + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.3.tgz", + "integrity": "sha512-qIJONzoa/qiHghnm0l1n4i/6IIziDpzqc36FBs4pzMhDUraHqponwJLiAKm1hGLP3OSB/TVNz6rMwVGpwxxySw==", "requires": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.21.0", + "@babel/generator": "^7.21.3", "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.21.0", + "@babel/helper-module-transforms": "^7.21.2", "@babel/helpers": "^7.21.0", - "@babel/parser": "^7.21.0", + "@babel/parser": "^7.21.3", "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.0", - "@babel/types": "^7.21.0", + "@babel/traverse": "^7.21.3", + "@babel/types": "^7.21.3", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -7146,18 +8829,16 @@ "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 + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" } } }, "@babel/generator": { - "version": "7.21.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz", - "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==", - "dev": true, + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.3.tgz", + "integrity": "sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==", "requires": { - "@babel/types": "^7.21.0", + "@babel/types": "^7.21.3", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -7167,7 +8848,6 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, "requires": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -7180,26 +8860,38 @@ "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", - "dev": true, "requires": { "@babel/compat-data": "^7.20.5", "@babel/helper-validator-option": "^7.18.6", "browserslist": "^4.21.3", "lru-cache": "^5.1.1", "semver": "^6.3.0" + }, + "dependencies": { + "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==", + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } } }, "@babel/helper-environment-visitor": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" }, "@babel/helper-function-name": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", - "dev": true, "requires": { "@babel/template": "^7.20.7", "@babel/types": "^7.21.0" @@ -7209,7 +8901,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, "requires": { "@babel/types": "^7.18.6" } @@ -7218,16 +8909,14 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, "requires": { "@babel/types": "^7.18.6" } }, "@babel/helper-module-transforms": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.0.tgz", - "integrity": "sha512-eD/JQ21IG2i1FraJnTMbUarAUkA7G988ofehG5MDCRXaUU91rEBJuCeSoou2Sk1y4RbLYXzqEg1QLwEmRU4qcQ==", - "dev": true, + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", + "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", "requires": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", @@ -7235,21 +8924,19 @@ "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.0", - "@babel/types": "^7.21.0" + "@babel/traverse": "^7.21.2", + "@babel/types": "^7.21.2" } }, "@babel/helper-plugin-utils": { "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", - "dev": true + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" }, "@babel/helper-simple-access": { "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "dev": true, "requires": { "@babel/types": "^7.20.2" } @@ -7258,7 +8945,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, "requires": { "@babel/types": "^7.18.6" } @@ -7266,26 +8952,22 @@ "@babel/helper-string-parser": { "version": "7.19.4", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "dev": true + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" }, "@babel/helper-validator-identifier": { "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" }, "@babel/helper-validator-option": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", - "dev": true + "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==" }, "@babel/helpers": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", - "dev": true, "requires": { "@babel/template": "^7.20.7", "@babel/traverse": "^7.21.0", @@ -7296,7 +8978,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", @@ -7307,7 +8988,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -7316,7 +8996,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -7327,7 +9006,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "requires": { "color-name": "1.1.3" } @@ -7335,26 +9013,22 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -7362,16 +9036,14 @@ } }, "@babel/parser": { - "version": "7.21.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.1.tgz", - "integrity": "sha512-JzhBFpkuhBNYUY7qs+wTzNmyCWUHEaAFpQQD2YfU1rPL38/L43Wvid0fFkiOCnHvsGncRZgEPyGnltABLcVDTg==", - "dev": true + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.3.tgz", + "integrity": "sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==" }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -7380,7 +9052,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -7389,7 +9060,6 @@ "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.12.13" } @@ -7398,7 +9068,6 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } @@ -7407,7 +9076,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -7416,7 +9084,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" } @@ -7425,7 +9092,6 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } @@ -7434,7 +9100,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -7443,7 +9108,6 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } @@ -7452,7 +9116,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -7461,7 +9124,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -7470,7 +9132,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -7479,7 +9140,6 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } @@ -7488,7 +9148,6 @@ "version": "7.20.0", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.19.0" } @@ -7497,7 +9156,6 @@ "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", - "dev": true, "requires": { "@babel/code-frame": "^7.18.6", "@babel/parser": "^7.20.7", @@ -7505,28 +9163,33 @@ } }, "@babel/traverse": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.0.tgz", - "integrity": "sha512-Xdt2P1H4LKTO8ApPfnO1KmzYMFpp7D/EinoXzLYN/cHcBNrVCAkAtGUcXnHXrl/VGktureU6fkQrHSBE2URfoA==", - "dev": true, + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.3.tgz", + "integrity": "sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==", "requires": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.21.0", + "@babel/generator": "^7.21.3", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.0", - "@babel/types": "^7.21.0", + "@babel/parser": "^7.21.3", + "@babel/types": "^7.21.3", "debug": "^4.1.0", "globals": "^11.1.0" + }, + "dependencies": { + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + } } }, "@babel/types": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.0.tgz", - "integrity": "sha512-uR7NWq2VNFnDi7EYqiRz2Jv/VQIu38tu64Zy8TX2nQFQ6etJ9V/Rr2msW8BS132mum2rL645qpDrLtAJtVpuow==", - "dev": true, + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.3.tgz", + "integrity": "sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==", "requires": { "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", @@ -7536,63 +9199,46 @@ "@bcoe/v8-coverage": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" + }, + "@eslint-community/eslint-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.3.0.tgz", + "integrity": "sha512-v3oplH6FYCULtFuCeqyuTd9D2WKO937Dxdq+GmHOLL72TTRriLxz2VLlNfkZRsvj6PKnOPAtuT6dwrs/pA5DvA==", + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.0.tgz", + "integrity": "sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==" }, "@eslint/eslintrc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", - "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", - "dev": true, + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.1.tgz", + "integrity": "sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==", "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.4.0", + "espree": "^9.5.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" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "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, - "requires": { - "argparse": "^2.0.1" - } - }, - "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 - } } }, + "@eslint/js": { + "version": "8.36.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.36.0.tgz", + "integrity": "sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==" + }, "@google/clasp": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/@google/clasp/-/clasp-2.4.2.tgz", "integrity": "sha512-SrHzWSotR8c7mNBVwH81sFCc4HhoDrCevicJehQlvrvgdTvLIiU0Pfb5EYCzWUPBSC4Ez/nvW6wxsgaK7RrPjQ==", - "dev": true, "requires": { "@sindresorhus/is": "^4.0.1", "chalk": "^4.1.2", @@ -7624,70 +9270,12 @@ "strip-bom": "^5.0.0", "ts2gas": "^4.2.0", "typescript": "^4.4.2" - }, - "dependencies": { - "find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dev": true, - "requires": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - } - }, - "locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, - "requires": { - "p-locate": "^6.0.0" - } - }, - "p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "requires": { - "yocto-queue": "^1.0.0" - } - }, - "p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, - "requires": { - "p-limit": "^4.0.0" - } - }, - "path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true - }, - "strip-bom": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-5.0.0.tgz", - "integrity": "sha512-p+byADHF7SzEcVnLvc/r3uognM1hUhObuHXxJcgLCfD194XAkaLbjq3Wzb0N5G2tgIjH0dgT708Z51QxMeu60A==", - "dev": true - }, - "yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "dev": true - } } }, "@humanwhocodes/config-array": { "version": "0.11.8", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", - "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", @@ -7697,152 +9285,202 @@ "@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 + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==" }, "@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" }, "@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, "requires": { "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" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "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==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "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==" + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + } } }, "@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 + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" }, "@jest/console": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.4.3.tgz", - "integrity": "sha512-W/o/34+wQuXlgqlPYTansOSiBnuxrTv61dEVkA6HNmpcgHLUjfaUbdqt6oVvOzaawwo9IdW9QOtMgQ1ScSZC4A==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz", + "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==", "requires": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^29.4.3", - "jest-util": "^29.4.3", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0", "slash": "^3.0.0" } }, "@jest/core": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.4.3.tgz", - "integrity": "sha512-56QvBq60fS4SPZCuM7T+7scNrkGIe7Mr6PVIXUpu48ouvRaWOFqRPV91eifvFM0ay2HmfswXiGf97NGUN5KofQ==", - "dev": true, - "requires": { - "@jest/console": "^29.4.3", - "@jest/reporters": "^29.4.3", - "@jest/test-result": "^29.4.3", - "@jest/transform": "^29.4.3", - "@jest/types": "^29.4.3", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.5.0.tgz", + "integrity": "sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==", + "requires": { + "@jest/console": "^29.5.0", + "@jest/reporters": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.4.3", - "jest-config": "^29.4.3", - "jest-haste-map": "^29.4.3", - "jest-message-util": "^29.4.3", + "jest-changed-files": "^29.5.0", + "jest-config": "^29.5.0", + "jest-haste-map": "^29.5.0", + "jest-message-util": "^29.5.0", "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.4.3", - "jest-resolve-dependencies": "^29.4.3", - "jest-runner": "^29.4.3", - "jest-runtime": "^29.4.3", - "jest-snapshot": "^29.4.3", - "jest-util": "^29.4.3", - "jest-validate": "^29.4.3", - "jest-watcher": "^29.4.3", + "jest-resolve": "^29.5.0", + "jest-resolve-dependencies": "^29.5.0", + "jest-runner": "^29.5.0", + "jest-runtime": "^29.5.0", + "jest-snapshot": "^29.5.0", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", + "jest-watcher": "^29.5.0", "micromatch": "^4.0.4", - "pretty-format": "^29.4.3", + "pretty-format": "^29.5.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" } }, "@jest/environment": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.4.3.tgz", - "integrity": "sha512-dq5S6408IxIa+lr54zeqce+QgI+CJT4nmmA+1yzFgtcsGK8c/EyiUb9XQOgz3BMKrRDfKseeOaxj2eO8LlD3lA==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.5.0.tgz", + "integrity": "sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==", "requires": { - "@jest/fake-timers": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/fake-timers": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", - "jest-mock": "^29.4.3" + "jest-mock": "^29.5.0" } }, "@jest/expect": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.4.3.tgz", - "integrity": "sha512-iktRU/YsxEtumI9zsPctYUk7ptpC+AVLLk1Ax3AsA4g1C+8OOnKDkIQBDHtD5hA/+VtgMd5AWI5gNlcAlt2vxQ==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.5.0.tgz", + "integrity": "sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==", "requires": { - "expect": "^29.4.3", - "jest-snapshot": "^29.4.3" + "expect": "^29.5.0", + "jest-snapshot": "^29.5.0" } }, "@jest/expect-utils": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.4.3.tgz", - "integrity": "sha512-/6JWbkxHOP8EoS8jeeTd9dTfc9Uawi+43oLKHfp6zzux3U2hqOOVnV3ai4RpDYHOccL6g+5nrxpoc8DmJxtXVQ==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz", + "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==", "requires": { "jest-get-type": "^29.4.3" } }, "@jest/fake-timers": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.4.3.tgz", - "integrity": "sha512-4Hote2MGcCTWSD2gwl0dwbCpBRHhE6olYEuTj8FMowdg3oQWNKr2YuxenPQYZ7+PfqPY1k98wKDU4Z+Hvd4Tiw==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.5.0.tgz", + "integrity": "sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==", "requires": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^29.4.3", - "jest-mock": "^29.4.3", - "jest-util": "^29.4.3" + "jest-message-util": "^29.5.0", + "jest-mock": "^29.5.0", + "jest-util": "^29.5.0" } }, "@jest/globals": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.4.3.tgz", - "integrity": "sha512-8BQ/5EzfOLG7AaMcDh7yFCbfRLtsc+09E1RQmRBI4D6QQk4m6NSK/MXo+3bJrBN0yU8A2/VIcqhvsOLFmziioA==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.5.0.tgz", + "integrity": "sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==", "requires": { - "@jest/environment": "^29.4.3", - "@jest/expect": "^29.4.3", - "@jest/types": "^29.4.3", - "jest-mock": "^29.4.3" + "@jest/environment": "^29.5.0", + "@jest/expect": "^29.5.0", + "@jest/types": "^29.5.0", + "jest-mock": "^29.5.0" } }, "@jest/reporters": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.4.3.tgz", - "integrity": "sha512-sr2I7BmOjJhyqj9ANC6CTLsL4emMoka7HkQpcoMRlhCbQJjz2zsRzw0BDPiPyEFDXAbxKgGFYuQZiSJ1Y6YoTg==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.5.0.tgz", + "integrity": "sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==", "requires": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.4.3", - "@jest/test-result": "^29.4.3", - "@jest/transform": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/console": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", "@jridgewell/trace-mapping": "^0.3.15", "@types/node": "*", "chalk": "^4.0.0", @@ -7855,9 +9493,9 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.4.3", - "jest-util": "^29.4.3", - "jest-worker": "^29.4.3", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0", + "jest-worker": "^29.5.0", "slash": "^3.0.0", "string-length": "^4.0.1", "strip-ansi": "^6.0.0", @@ -7868,7 +9506,6 @@ "version": "29.4.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", - "dev": true, "requires": { "@sinclair/typebox": "^0.25.16" } @@ -7877,7 +9514,6 @@ "version": "29.4.3", "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz", "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==", - "dev": true, "requires": { "@jridgewell/trace-mapping": "^0.3.15", "callsites": "^3.0.0", @@ -7885,57 +9521,64 @@ } }, "@jest/test-result": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.4.3.tgz", - "integrity": "sha512-Oi4u9NfBolMq9MASPwuWTlC5WvmNRwI4S8YrQg5R5Gi47DYlBe3sh7ILTqi/LGrK1XUE4XY9KZcQJTH1WJCLLA==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.5.0.tgz", + "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==", "requires": { - "@jest/console": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/console": "^29.5.0", + "@jest/types": "^29.5.0", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "@jest/test-sequencer": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.4.3.tgz", - "integrity": "sha512-yi/t2nES4GB4G0mjLc0RInCq/cNr9dNwJxcGg8sslajua5Kb4kmozAc+qPLzplhBgfw1vLItbjyHzUN92UXicw==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz", + "integrity": "sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==", "requires": { - "@jest/test-result": "^29.4.3", + "@jest/test-result": "^29.5.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.4.3", + "jest-haste-map": "^29.5.0", "slash": "^3.0.0" } }, "@jest/transform": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.4.3.tgz", - "integrity": "sha512-8u0+fBGWolDshsFgPQJESkDa72da/EVwvL+II0trN2DR66wMwiQ9/CihaGfHdlLGFzbBZwMykFtxuwFdZqlKwg==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.5.0.tgz", + "integrity": "sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==", "requires": { "@babel/core": "^7.11.6", - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "@jridgewell/trace-mapping": "^0.3.15", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.4.3", + "jest-haste-map": "^29.5.0", "jest-regex-util": "^29.4.3", - "jest-util": "^29.4.3", + "jest-util": "^29.5.0", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", "write-file-atomic": "^4.0.2" + }, + "dependencies": { + "write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + } } }, "@jest/types": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.4.3.tgz", - "integrity": "sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", + "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", "requires": { "@jest/schemas": "^29.4.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -7949,7 +9592,6 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, "requires": { "@jridgewell/set-array": "^1.0.0", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -7958,26 +9600,22 @@ "@jridgewell/resolve-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" }, "@jridgewell/set-array": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" }, "@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "@jridgewell/trace-mapping": { "version": "0.3.17", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "dev": true, "requires": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" @@ -7987,7 +9625,6 @@ "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, "requires": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -7996,14 +9633,12 @@ "@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 + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" }, "@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, "requires": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -8013,7 +9648,6 @@ "version": "15.0.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.1.tgz", "integrity": "sha512-ReY88T7JhJjeRVbfCyNj+NXAG3IIsVMsX9b5/9jC98dRP8/yxlZdz7mHZbHk5zHr24wZZICS5AcXsFZAXYUQEg==", - "dev": true, "requires": { "@rollup/pluginutils": "^5.0.1", "@types/resolve": "1.20.2", @@ -8027,7 +9661,6 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", - "dev": true, "requires": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", @@ -8035,22 +9668,19 @@ } }, "@sinclair/typebox": { - "version": "0.25.23", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.23.tgz", - "integrity": "sha512-VEB8ygeP42CFLWyAJhN5OklpxUliqdNEUcXb4xZ/CINqtYGTjL5ukluKdKzQ0iWdUxyQ7B0539PAUhHKrCNWSQ==", - "dev": true + "version": "0.25.24", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", + "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==" }, "@sindresorhus/is": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "dev": true + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==" }, "@sinonjs/commons": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", - "dev": true, "requires": { "type-detect": "4.0.8" } @@ -8059,7 +9689,6 @@ "version": "10.0.2", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz", "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==", - "dev": true, "requires": { "@sinonjs/commons": "^2.0.0" } @@ -8068,7 +9697,6 @@ "version": "4.0.6", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dev": true, "requires": { "defer-to-connect": "^2.0.0" } @@ -8077,7 +9705,6 @@ "version": "7.20.0", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", - "dev": true, "requires": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", @@ -8090,7 +9717,6 @@ "version": "7.6.4", "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, "requires": { "@babel/types": "^7.0.0" } @@ -8099,7 +9725,6 @@ "version": "7.4.1", "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, "requires": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" @@ -8109,7 +9734,6 @@ "version": "7.18.3", "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", - "dev": true, "requires": { "@babel/types": "^7.3.0" } @@ -8118,7 +9742,6 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", - "dev": true, "requires": { "@types/http-cache-semantics": "*", "@types/keyv": "^3.1.4", @@ -8129,20 +9752,26 @@ "@types/estree": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", - "dev": true + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" + }, + "@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } }, "@types/google-apps-script": { - "version": "1.0.57", - "resolved": "https://registry.npmjs.org/@types/google-apps-script/-/google-apps-script-1.0.57.tgz", - "integrity": "sha512-w06Yoh+SamGpS2kGVlGy/5JkmFkLrW6u3tbglyHEu9uC9lrzqr6FyLcgVsL95Tmq9L0q//D8seqd4GZGRPPKUw==", - "dev": true + "version": "1.0.59", + "resolved": "https://registry.npmjs.org/@types/google-apps-script/-/google-apps-script-1.0.59.tgz", + "integrity": "sha512-vOtsegVU/BrgofBsx6Ckzz4jDNp2zEwGHHc20AAouyP6YzytCF5vIBCSETBjsIHZya+nA8A/f7YaSkCe29jbvQ==" }, "@types/google-apps-script-oauth2": { "version": "38.0.0", "resolved": "https://registry.npmjs.org/@types/google-apps-script-oauth2/-/google-apps-script-oauth2-38.0.0.tgz", "integrity": "sha512-TxaCxXmAb3/Qm/kSweW+PPIckNwLvZo6maGI0oKx/MBdl/WrZkPAY7Mi56qg2xPGBObqG80rmYU691SAHiUdJg==", - "dev": true, "requires": { "@types/google-apps-script": "*" } @@ -8151,7 +9780,6 @@ "version": "4.1.6", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", - "dev": true, "requires": { "@types/node": "*" } @@ -8159,20 +9787,17 @@ "@types/http-cache-semantics": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", - "dev": true + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" }, "@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" }, "@types/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, "requires": { "@types/istanbul-lib-coverage": "*" } @@ -8181,95 +9806,485 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, "requires": { "@types/istanbul-lib-report": "*" } }, "@types/jest": { - "version": "29.4.0", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.4.0.tgz", - "integrity": "sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.0.tgz", + "integrity": "sha512-3Emr5VOl/aoBwnWcH/EFQvlSAmjV+XtV9GGu5mwdYew5vhQh0IUZx/60x0TzHDu09Bi7HMx10t/namdJw5QIcg==", "requires": { "expect": "^29.0.0", "pretty-format": "^29.0.0" } }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" + }, "@types/keyv": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "dev": true, "requires": { "@types/node": "*" } }, "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" + }, + "@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" }, "@types/node": { - "version": "18.14.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.0.tgz", - "integrity": "sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==", - "dev": true + "version": "18.15.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.5.tgz", + "integrity": "sha512-Ark2WDjjZO7GmvsyFFf81MXuGTA/d6oP38anyxWOL6EREyBKAxKoFHwBhaZxCfLRLpO8JgVXwqOwSwa7jRcjew==" }, "@types/normalize-package-data": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" }, "@types/prettier": { "version": "2.7.2", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", - "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", - "dev": true + "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==" }, "@types/resolve": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==" + }, + "@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "requires": { + "@types/node": "*" + } + }, + "@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==" + }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + }, + "@types/yargs": { + "version": "17.0.23", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.23.tgz", + "integrity": "sha512-yuogunc04OnzGQCrfHx+Kk883Q4X0aSwmYZhKjI21m+SVYzjIbrWl8dOOwSv5hf2Um2pdCOXWo9isteZTNXUZQ==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.56.0.tgz", + "integrity": "sha512-ZNW37Ccl3oMZkzxrYDUX4o7cnuPgU+YrcaYXzsRtLB16I1FR5SHMqga3zGsaSliZADCWo2v8qHWqAYIj8nWCCg==", + "requires": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.56.0", + "@typescript-eslint/type-utils": "5.56.0", + "@typescript-eslint/utils": "5.56.0", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.56.0.tgz", + "integrity": "sha512-jGYKyt+iBakD0SA5Ww8vFqGpoV2asSjwt60Gl6YcO8ksQ8s2HlUEyHBMSa38bdLopYqGf7EYQMUIGdT/Luw+sw==", + "requires": { + "@typescript-eslint/types": "5.56.0", + "@typescript-eslint/visitor-keys": "5.56.0" + } + }, + "@typescript-eslint/types": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.56.0.tgz", + "integrity": "sha512-JyAzbTJcIyhuUhogmiu+t79AkdnqgPUEsxMTMc/dCZczGMJQh1MK2wgrju++yMN6AWroVAy2jxyPcPr3SWCq5w==" + }, + "@typescript-eslint/visitor-keys": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.56.0.tgz", + "integrity": "sha512-1mFdED7u5bZpX6Xxf5N9U2c18sb+8EvU3tyOIj6LQZ5OOvnmj8BVeNNP603OFPm5KkS1a7IvCIcwrdHXaEMG/Q==", + "requires": { + "@typescript-eslint/types": "5.56.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/experimental-utils": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", + "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", + "requires": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "dependencies": { + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "requires": { + "eslint-visitor-keys": "^2.0.0" + } + }, + "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==" + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + } + } + }, + "@typescript-eslint/parser": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.56.0.tgz", + "integrity": "sha512-sn1OZmBxUsgxMmR8a8U5QM/Wl+tyqlH//jTqCg8daTAmhAk26L2PFhcqPLlYBhYUJMZJK276qLXlHN3a83o2cg==", + "peer": true, + "requires": { + "@typescript-eslint/scope-manager": "5.56.0", + "@typescript-eslint/types": "5.56.0", + "@typescript-eslint/typescript-estree": "5.56.0", + "debug": "^4.3.4" + }, + "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.56.0.tgz", + "integrity": "sha512-jGYKyt+iBakD0SA5Ww8vFqGpoV2asSjwt60Gl6YcO8ksQ8s2HlUEyHBMSa38bdLopYqGf7EYQMUIGdT/Luw+sw==", + "peer": true, + "requires": { + "@typescript-eslint/types": "5.56.0", + "@typescript-eslint/visitor-keys": "5.56.0" + } + }, + "@typescript-eslint/types": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.56.0.tgz", + "integrity": "sha512-JyAzbTJcIyhuUhogmiu+t79AkdnqgPUEsxMTMc/dCZczGMJQh1MK2wgrju++yMN6AWroVAy2jxyPcPr3SWCq5w==", + "peer": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.56.0.tgz", + "integrity": "sha512-41CH/GncsLXOJi0jb74SnC7jVPWeVJ0pxQj8bOjH1h2O26jXN3YHKDT1ejkVz5YeTEQPeLCCRY0U2r68tfNOcg==", + "peer": true, + "requires": { + "@typescript-eslint/types": "5.56.0", + "@typescript-eslint/visitor-keys": "5.56.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.56.0.tgz", + "integrity": "sha512-1mFdED7u5bZpX6Xxf5N9U2c18sb+8EvU3tyOIj6LQZ5OOvnmj8BVeNNP603OFPm5KkS1a7IvCIcwrdHXaEMG/Q==", + "peer": true, + "requires": { + "@typescript-eslint/types": "5.56.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "peer": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "peer": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/scope-manager": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", + "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", + "requires": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.56.0.tgz", + "integrity": "sha512-8WxgOgJjWRy6m4xg9KoSHPzBNZeQbGlQOH7l2QEhQID/+YseaFxg5J/DLwWSsi9Axj4e/cCiKx7PVzOq38tY4A==", + "requires": { + "@typescript-eslint/typescript-estree": "5.56.0", + "@typescript-eslint/utils": "5.56.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "dependencies": { + "@typescript-eslint/types": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.56.0.tgz", + "integrity": "sha512-JyAzbTJcIyhuUhogmiu+t79AkdnqgPUEsxMTMc/dCZczGMJQh1MK2wgrju++yMN6AWroVAy2jxyPcPr3SWCq5w==" + }, + "@typescript-eslint/typescript-estree": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.56.0.tgz", + "integrity": "sha512-41CH/GncsLXOJi0jb74SnC7jVPWeVJ0pxQj8bOjH1h2O26jXN3YHKDT1ejkVz5YeTEQPeLCCRY0U2r68tfNOcg==", + "requires": { + "@typescript-eslint/types": "5.56.0", + "@typescript-eslint/visitor-keys": "5.56.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.56.0.tgz", + "integrity": "sha512-1mFdED7u5bZpX6Xxf5N9U2c18sb+8EvU3tyOIj6LQZ5OOvnmj8BVeNNP603OFPm5KkS1a7IvCIcwrdHXaEMG/Q==", + "requires": { + "@typescript-eslint/types": "5.56.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/types": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", + "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==" }, - "@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dev": true, + "@typescript-eslint/typescript-estree": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", + "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", "requires": { - "@types/node": "*" + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "dependencies": { + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "requires": { + "lru-cache": "^6.0.0" + } + } } }, - "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "@types/yargs": { - "version": "17.0.22", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz", - "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==", - "dev": true, + "@typescript-eslint/utils": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.56.0.tgz", + "integrity": "sha512-XhZDVdLnUJNtbzaJeDSCIYaM+Tgr59gZGbFuELgF7m0IY03PlciidS7UQNKLE0+WpUTn1GlycEr6Ivb/afjbhA==", "requires": { - "@types/yargs-parser": "*" + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.56.0", + "@typescript-eslint/types": "5.56.0", + "@typescript-eslint/typescript-estree": "5.56.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.56.0.tgz", + "integrity": "sha512-jGYKyt+iBakD0SA5Ww8vFqGpoV2asSjwt60Gl6YcO8ksQ8s2HlUEyHBMSa38bdLopYqGf7EYQMUIGdT/Luw+sw==", + "requires": { + "@typescript-eslint/types": "5.56.0", + "@typescript-eslint/visitor-keys": "5.56.0" + } + }, + "@typescript-eslint/types": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.56.0.tgz", + "integrity": "sha512-JyAzbTJcIyhuUhogmiu+t79AkdnqgPUEsxMTMc/dCZczGMJQh1MK2wgrju++yMN6AWroVAy2jxyPcPr3SWCq5w==" + }, + "@typescript-eslint/typescript-estree": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.56.0.tgz", + "integrity": "sha512-41CH/GncsLXOJi0jb74SnC7jVPWeVJ0pxQj8bOjH1h2O26jXN3YHKDT1ejkVz5YeTEQPeLCCRY0U2r68tfNOcg==", + "requires": { + "@typescript-eslint/types": "5.56.0", + "@typescript-eslint/visitor-keys": "5.56.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.56.0.tgz", + "integrity": "sha512-1mFdED7u5bZpX6Xxf5N9U2c18sb+8EvU3tyOIj6LQZ5OOvnmj8BVeNNP603OFPm5KkS1a7IvCIcwrdHXaEMG/Q==", + "requires": { + "@typescript-eslint/types": "5.56.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "requires": { + "lru-cache": "^6.0.0" + } + } } }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true + "@typescript-eslint/visitor-keys": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", + "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", + "requires": { + "@typescript-eslint/types": "4.33.0", + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "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==" + } + } }, "abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, "requires": { "event-target-shim": "^5.0.0" } @@ -8277,21 +10292,18 @@ "acorn": { "version": "8.8.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==" }, "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, "requires": {} }, "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==", - "dev": true, "requires": { "debug": "4" } @@ -8300,7 +10312,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", - "dev": true, "requires": { "clean-stack": "^4.0.0", "indent-string": "^5.0.0" @@ -8310,7 +10321,6 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -8318,26 +10328,35 @@ "uri-js": "^4.2.2" } }, + "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==" + }, "ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, "requires": { "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + } } }, "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 + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -8346,55 +10365,50 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "array-differ": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", - "dev": true + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==" }, "array-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", - "dev": true + "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==" }, "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" }, "arrify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" }, "babel-jest": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.4.3.tgz", - "integrity": "sha512-o45Wyn32svZE+LnMVWv/Z4x0SwtLbh4FyGcYtR20kIWd+rdrDZ9Fzq8Ml3MYLD+mZvEdzCjZsCnYZ2jpJyQ+Nw==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.5.0.tgz", + "integrity": "sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==", "requires": { - "@jest/transform": "^29.4.3", + "@jest/transform": "^29.5.0", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.4.3", + "babel-preset-jest": "^29.5.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" @@ -8404,7 +10418,6 @@ "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", @@ -8414,10 +10427,9 @@ } }, "babel-plugin-jest-hoist": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.4.3.tgz", - "integrity": "sha512-mB6q2q3oahKphy5V7CpnNqZOCkxxZ9aokf1eh82Dy3jQmg4xvM1tGrh5y6BQUJh4a3Pj9+eLfwvAZ7VNKg7H8Q==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", + "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", "requires": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -8429,7 +10441,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, "requires": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", @@ -8446,55 +10457,68 @@ } }, "babel-preset-jest": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.4.3.tgz", - "integrity": "sha512-gWx6COtSuma6n9bw+8/F+2PCXrIgxV/D1TJFnp6OyBK2cxPWg0K9p/sriNYeifKjpUkMViWQ09DSWtzJQRETsw==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", + "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", "requires": { - "babel-plugin-jest-hoist": "^29.4.3", + "babel-plugin-jest-hoist": "^29.5.0", "babel-preset-current-node-syntax": "^1.0.0" } }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, "bignumber.js": { "version": "9.1.1", "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz", - "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==", - "dev": true + "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==" }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, "bl": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", - "dev": true, "requires": { "buffer": "^6.0.3", "inherits": "^2.0.4", "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "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==", + "requires": { + "safe-buffer": "~5.2.0" + } + } } }, "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, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -8504,7 +10528,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, "requires": { "fill-range": "^7.0.1" } @@ -8513,7 +10536,6 @@ "version": "4.21.5", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", - "dev": true, "requires": { "caniuse-lite": "^1.0.30001449", "electron-to-chromium": "^1.4.284", @@ -8525,7 +10547,6 @@ "version": "0.2.6", "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, "requires": { "fast-json-stable-stringify": "2.x" } @@ -8534,7 +10555,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, "requires": { "node-int64": "^0.4.0" } @@ -8543,7 +10563,6 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -8552,32 +10571,27 @@ "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==", - "dev": true + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "builtin-modules": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==" }, "cacheable-lookup": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "dev": true + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==" }, "cacheable-request": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", - "dev": true, "requires": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -8592,7 +10606,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, "requires": { "pump": "^3.0.0" } @@ -8603,7 +10616,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -8612,26 +10624,39 @@ "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "dependencies": { + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==" + } + } }, "caniuse-lite": { - "version": "1.0.30001457", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001457.tgz", - "integrity": "sha512-SDIV6bgE1aVbK6XyxdURbUE89zY7+k1BBBaOwYwkNCglXlel/E7mELiHC64HQ+W0xSKlqWhV9Wh7iHxUjMs4fA==", - "dev": true + "version": "1.0.30001469", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001469.tgz", + "integrity": "sha512-Rcp7221ScNqQPP3W+lVOYDyjdR6dC+neEQCttoNr5bAyz54AboB4iwpnWgyi8P4YUsPybVzT4LgWiBbI3drL4g==" }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -8640,20 +10665,17 @@ "char-regex": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" }, "chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, "chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -8663,36 +10685,22 @@ "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } } }, "ci-info": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==" }, "cjs-module-lexer": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==" }, "clean-stack": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", - "dev": true, "requires": { "escape-string-regexp": "5.0.0" }, @@ -8700,8 +10708,7 @@ "escape-string-regexp": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==" } } }, @@ -8709,7 +10716,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, "requires": { "restore-cursor": "^3.1.0" } @@ -8717,81 +10723,31 @@ "cli-spinners": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", - "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", - "dev": true + "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==" }, "cli-truncate": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", - "dev": true, "requires": { "slice-ansi": "^5.0.0", "string-width": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true - }, - "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 - }, - "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, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - } } }, "cli-width": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true - }, - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" }, "clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" }, "clone-response": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "dev": true, "requires": { "mimic-response": "^1.0.0" } @@ -8799,20 +10755,17 @@ "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==" }, "collect-v8-coverage": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "requires": { "color-name": "~1.1.4" } @@ -8820,32 +10773,32 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "commander": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" + }, + "commenting": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/commenting/-/commenting-1.1.0.tgz", + "integrity": "sha512-YeNK4tavZwtH7jEgK1ZINXzLKm6DZdEMfsaaieOsCAN0S8vsY7UeuO3Q7d/M018EFgE+IeUAuBOKkFccBZsUZA==" }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "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 + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -8856,7 +10809,6 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", - "dev": true, "requires": { "array-find-index": "^1.0.1" } @@ -8864,23 +10816,41 @@ "debounce": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", - "dev": true + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==" }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "requires": { "ms": "2.1.2" } }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" + }, + "decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==" + } + } + }, "decompress-response": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, "requires": { "mimic-response": "^3.1.0" }, @@ -8888,34 +10858,29 @@ "mimic-response": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" } } }, "dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" }, "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 + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "deepmerge": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", - "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==", - "dev": true + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==" }, "defaults": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, "requires": { "clone": "^1.0.2" } @@ -8923,32 +10888,35 @@ "defer-to-connect": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==" }, "define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" }, "detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==" }, "diff-sequences": { "version": "29.4.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", - "dev": true + "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==" + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "requires": { + "path-type": "^4.0.0" + } }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, "requires": { "esutils": "^2.0.2" } @@ -8957,7 +10925,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/dotf/-/dotf-2.0.2.tgz", "integrity": "sha512-4cN2fwEqHimE11jVc8uMNiEB2A2YOL5Fdyd1p14UbAvRh/5vAxjEaiVPx45zD5IQcwc/uQIxI9Jh18skB/uYFQ==", - "dev": true, "requires": { "graceful-fs": "^4.2.8", "jsonfile": "^6.1.0" @@ -8966,50 +10933,51 @@ "eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, "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==", - "dev": true, "requires": { "safe-buffer": "^5.0.1" } }, "electron-to-chromium": { - "version": "1.4.305", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.305.tgz", - "integrity": "sha512-WETy6tG0CT5gm1O+xCbyapWNsCcmIvrn4NHViIGYo2AT8FV2qUCXdaB+WqYxSv/vS5mFqhBYnfZAAkVArjBmUg==", - "dev": true + "version": "1.4.334", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.334.tgz", + "integrity": "sha512-laZ1odk+TRen6q0GeyQx/JEkpD3iSZT7ewopCpKqg9bTjP1l8XRfU3Bg20CFjNPZkp5+NDBl3iqd4o/kPO+Vew==" }, "emittery": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==" }, "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 + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, "requires": { "once": "^1.4.0" } }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "requires": { + "ansi-colors": "^4.1.1" + } + }, "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, "requires": { "is-arrayish": "^0.2.1" } @@ -9017,22 +10985,22 @@ "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, "eslint": { - "version": "8.34.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.34.0.tgz", - "integrity": "sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.4.1", + "version": "8.36.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz", + "integrity": "sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==", + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.1", + "@eslint/js": "8.36.0", "@humanwhocodes/config-array": "^0.11.8", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -9043,10 +11011,9 @@ "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", + "espree": "^9.5.0", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", @@ -9067,57 +11034,32 @@ "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", - "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" }, "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "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 - }, "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, "requires": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, - "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "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, + "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==", "requires": { - "argparse": "^2.0.1" + "is-glob": "^4.0.3" } }, "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, "requires": { "p-locate": "^5.0.0" } @@ -9126,16 +11068,14 @@ "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, "requires": { "p-limit": "^3.0.2" } }, - "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 + "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==" } } }, @@ -9143,21 +11083,40 @@ "version": "0.14.0", "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz", "integrity": "sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==", - "dev": true, "requires": {} }, "eslint-config-prettier": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.6.0.tgz", - "integrity": "sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==", - "dev": true, + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", + "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", "requires": {} }, + "eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "requires": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + } + }, + "eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "requires": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + } + }, "eslint-plugin-prettier": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", - "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" } @@ -9166,40 +11125,35 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "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, + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "requires": { - "eslint-visitor-keys": "^2.0.0" + "eslint-visitor-keys": "^1.1.0" }, "dependencies": { "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 + "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==" } } }, "eslint-visitor-keys": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==" }, "espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", - "dev": true, + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.0.tgz", + "integrity": "sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==", "requires": { "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", @@ -9209,14 +11163,12 @@ "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esquery": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.2.tgz", - "integrity": "sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==", - "dev": true, + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "requires": { "estraverse": "^5.1.0" } @@ -9225,7 +11177,6 @@ "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, "requires": { "estraverse": "^5.2.0" } @@ -9233,32 +11184,27 @@ "estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" }, "estree-walker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" }, "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "event-target-shim": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" }, "execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, "requires": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -9274,33 +11220,29 @@ "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==" }, "expect": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.4.3.tgz", - "integrity": "sha512-uC05+Q7eXECFpgDrHdXA4k2rpMyStAYPItEDLyQDo5Ta7fVkJnNA/4zh/OIVkVVNZ1oOK1PipQoyNjuZ6sz6Dg==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", + "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", "requires": { - "@jest/expect-utils": "^29.4.3", + "@jest/expect-utils": "^29.5.0", "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.4.3", - "jest-message-util": "^29.4.3", - "jest-util": "^29.4.3" + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0" } }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, "requires": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -9310,38 +11252,44 @@ "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==", - "dev": true + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-diff": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==" + }, + "fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } }, "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==", - "dev": true + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "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 + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, "fast-text-encoding": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", - "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==", - "dev": true + "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==" }, "fastq": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, "requires": { "reusify": "^1.0.4" } @@ -9350,7 +11298,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, "requires": { "bser": "2.1.1" } @@ -9359,7 +11306,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, "requires": { "escape-string-regexp": "^1.0.5" }, @@ -9367,8 +11313,7 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" } } }, @@ -9376,7 +11321,6 @@ "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, "requires": { "flat-cache": "^3.0.4" } @@ -9385,42 +11329,47 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, "requires": { "to-regex-range": "^5.0.1" } }, "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, + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" } }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, "requires": { "flatted": "^3.1.0", "rimraf": "^3.0.2" + }, + "dependencies": { + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + } } }, "flatted": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" }, "fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, "requires": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -9430,33 +11379,33 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, "optional": true }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" }, "fuzzy": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/fuzzy/-/fuzzy-0.1.3.tgz", - "integrity": "sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w==", - "dev": true + "integrity": "sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w==" }, "gaxios": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", - "dev": true, "requires": { "abort-controller": "^3.0.0", "extend": "^3.0.2", @@ -9469,7 +11418,6 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz", "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==", - "dev": true, "requires": { "gaxios": "^4.0.0", "json-bigint": "^1.0.0" @@ -9478,20 +11426,17 @@ "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 + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" }, "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 + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-intrinsic": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", - "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -9501,20 +11446,22 @@ "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 + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" }, "get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + }, + "gitignore-to-glob": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/gitignore-to-glob/-/gitignore-to-glob-0.3.0.tgz", + "integrity": "sha512-mk74BdnK7lIwDHnotHddx1wsjMOFIThpLY3cPNniJ/2fA/tlLzHnFxIdR+4sLOu5KGgQJdij4kjJ2RoUNnCNMA==" }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -9524,26 +11471,41 @@ "path-is-absolute": "^1.0.0" } }, - "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, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "requires": { - "is-glob": "^4.0.3" + "type-fest": "^0.20.2" } }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true + "globby": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + } }, "google-auth-library": { "version": "7.14.1", "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.14.1.tgz", "integrity": "sha512-5Rk7iLNDFhFeBYc3s8l1CqzbEBcdhwR193RlD4vSNFajIcINKI8W8P0JLmBpwymHqqWbX34pJDQu39cSy/6RsA==", - "dev": true, "requires": { "arrify": "^2.0.0", "base64-js": "^1.3.0", @@ -9554,30 +11516,12 @@ "gtoken": "^5.0.4", "jws": "^4.0.0", "lru-cache": "^6.0.0" - }, - "dependencies": { - "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==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } } }, "google-p12-pem": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.4.tgz", "integrity": "sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg==", - "dev": true, "requires": { "node-forge": "^1.3.1" } @@ -9586,7 +11530,6 @@ "version": "84.0.0", "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-84.0.0.tgz", "integrity": "sha512-5WWLwmraulw3p55lu0gNpLz2FME1gcuR7QxgmUdAVHMiVN4LEasYjJV9p36gxcf2TMe6bn6+PgQ/63+CvBEgoQ==", - "dev": true, "requires": { "google-auth-library": "^7.0.2", "googleapis-common": "^5.0.2" @@ -9596,7 +11539,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-5.1.0.tgz", "integrity": "sha512-RXrif+Gzhq1QAzfjxulbGvAY3FPj8zq/CYcvgjzDbaBNCD6bUl+86I7mUs4DKWHGruuK26ijjR/eDpWIDgNROA==", - "dev": true, "requires": { "extend": "^3.0.2", "gaxios": "^4.0.0", @@ -9610,7 +11552,6 @@ "version": "11.8.6", "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", - "dev": true, "requires": { "@sindresorhus/is": "^4.0.0", "@szmarczak/http-timer": "^4.0.5", @@ -9626,33 +11567,320 @@ } }, "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true + "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==" }, "grapheme-splitter": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" }, "gtoken": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.2.tgz", "integrity": "sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==", - "dev": true, "requires": { "gaxios": "^4.0.0", "google-p12-pem": "^3.1.3", "jws": "^4.0.0" } }, + "gts": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/gts/-/gts-3.1.1.tgz", + "integrity": "sha512-Jw44aBbzMnd1vtZs7tZt3LMstKQukCBg7N4CKVGzviIQ45Cz5b9lxDJGXVKj/9ySuGv6TYEeijZJGbiiVcM27w==", + "requires": { + "@typescript-eslint/eslint-plugin": "^4.2.0", + "@typescript-eslint/parser": "^4.2.0", + "chalk": "^4.1.0", + "eslint": "^7.10.0", + "eslint-config-prettier": "^7.0.0", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-prettier": "^3.1.4", + "execa": "^5.0.0", + "inquirer": "^7.3.3", + "json5": "^2.1.3", + "meow": "^9.0.0", + "ncp": "^2.0.0", + "prettier": "^2.1.2", + "rimraf": "^3.0.2", + "write-file-atomic": "^3.0.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", + "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", + "requires": { + "@typescript-eslint/experimental-utils": "4.33.0", + "@typescript-eslint/scope-manager": "4.33.0", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/parser": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", + "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", + "requires": { + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "debug": "^4.3.1" + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "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==" + }, + "eslint": { + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + } + } + }, + "eslint-config-prettier": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-7.2.0.tgz", + "integrity": "sha512-rV4Qu0C3nfJKPOAhFujFxB7RMP+URFyQqqOZW9DMRD7ZDTFyjaIlETU3xzHELt++4ugC0+Jm084HQYkkJe+Ivg==", + "requires": {} + }, + "eslint-plugin-prettier": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", + "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "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==" + }, + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "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==" + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + } + }, + "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==" + }, + "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==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "requires": { + "tslib": "^1.9.0" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "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==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==" + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -9660,58 +11888,35 @@ "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, "hosted-git-info": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, "requires": { "lru-cache": "^6.0.0" - }, - "dependencies": { - "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==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } } }, "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 + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" }, "http-cache-semantics": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" }, "http2-wrapper": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "dev": true, "requires": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.0.0" @@ -9721,7 +11926,6 @@ "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==", - "dev": true, "requires": { "agent-base": "6", "debug": "4" @@ -9730,14 +11934,12 @@ "human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -9745,38 +11947,26 @@ "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" - }, - "dependencies": { - "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 - } } }, "import-local": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, "requires": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -9785,20 +11975,17 @@ "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" }, "indent-string": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "dev": true + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==" }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -9807,14 +11994,12 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "inquirer": { "version": "8.2.5", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", - "dev": true, "requires": { "ansi-escapes": "^4.2.1", "chalk": "^4.1.1", @@ -9837,7 +12022,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, "requires": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -9848,29 +12032,35 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, + "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==" + }, + "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==" + }, "is-interactive": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" }, "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 + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" }, "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, "requires": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -9880,7 +12070,6 @@ "version": "5.4.1", "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, "requires": { "bl": "^4.1.0", "chalk": "^4.1.0", @@ -9892,6 +12081,34 @@ "strip-ansi": "^6.0.0", "wcwidth": "^1.0.1" } + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "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==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "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==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } } } }, @@ -9899,7 +12116,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/inquirer-autocomplete-prompt-ipt/-/inquirer-autocomplete-prompt-ipt-2.0.0.tgz", "integrity": "sha512-2qkl1lWeXbFN/O3+xdqJUdMfnNirvWKqgsgmhOjpOiVCcnJf+XYSEjFfdTgk+MDTtVt5AZiWR9Ji+f4YsWBdUw==", - "dev": true, "requires": { "ansi-escapes": "^4.2.1", "chalk": "^2.4.2", @@ -9912,7 +12128,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -9921,7 +12136,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -9932,7 +12146,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "requires": { "color-name": "1.1.3" } @@ -9940,26 +12153,22 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "rxjs": { "version": "6.6.7", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, "requires": { "tslib": "^1.9.0" } @@ -9968,7 +12177,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -9976,22 +12184,19 @@ "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" } } }, "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 + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, "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, "requires": { "binary-extensions": "^2.0.0" } @@ -10000,7 +12205,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", - "dev": true, "requires": { "builtin-modules": "^3.3.0" } @@ -10009,7 +12213,6 @@ "version": "2.11.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, "requires": { "has": "^1.0.3" } @@ -10017,32 +12220,27 @@ "is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" }, "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 + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==" }, "is-generator-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" }, "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, "requires": { "is-extglob": "^2.1.1" } @@ -10050,38 +12248,37 @@ "is-interactive": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", - "dev": true + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==" }, "is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" }, "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 + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "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 + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==" }, "is-port-reachable": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-port-reachable/-/is-port-reachable-3.1.0.tgz", - "integrity": "sha512-vjc0SSRNZ32s9SbZBzGaiP6YVB+xglLShhgZD/FHMZUXBvQWaV9CtzgeVhjccFJrI6RAMV+LX7NYxueW/A8W5A==", - "dev": true + "integrity": "sha512-vjc0SSRNZ32s9SbZBzGaiP6YVB+xglLShhgZD/FHMZUXBvQWaV9CtzgeVhjccFJrI6RAMV+LX7NYxueW/A8W5A==" }, "is-reachable": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/is-reachable/-/is-reachable-5.2.1.tgz", "integrity": "sha512-ViPrrlmt9FTTclYbz6mL/PFyF1TXSpJ9y/zw9QMVJxbhU/7DFkvk/5cTv7S0sXtqbJj32zZ+jKpNAjrYTUZBPQ==", - "dev": true, "requires": { "arrify": "^2.0.1", "got": "^11.7.0", @@ -10096,20 +12293,22 @@ "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, "is-unicode-supported": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", - "dev": true + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==" }, "is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, "requires": { "is-docker": "^2.0.0" } @@ -10117,20 +12316,17 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==" }, "istanbul-lib-instrument": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, "requires": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -10143,7 +12339,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, "requires": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^3.0.0", @@ -10154,7 +12349,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, "requires": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -10165,172 +12359,212 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, "requires": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" } }, "jest": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.4.3.tgz", - "integrity": "sha512-XvK65feuEFGZT8OO0fB/QAQS+LGHvQpaadkH5p47/j3Ocqq3xf2pK9R+G0GzgfuhXVxEv76qCOOcMb5efLk6PA==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.5.0.tgz", + "integrity": "sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==", "requires": { - "@jest/core": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/core": "^29.5.0", + "@jest/types": "^29.5.0", "import-local": "^3.0.2", - "jest-cli": "^29.4.3" + "jest-cli": "^29.5.0" } }, "jest-changed-files": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.4.3.tgz", - "integrity": "sha512-Vn5cLuWuwmi2GNNbokPOEcvrXGSGrqVnPEZV7rC6P7ck07Dyw9RFnvWglnupSh+hGys0ajGtw/bc2ZgweljQoQ==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", + "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", "requires": { "execa": "^5.0.0", "p-limit": "^3.1.0" } }, "jest-circus": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.4.3.tgz", - "integrity": "sha512-Vw/bVvcexmdJ7MLmgdT3ZjkJ3LKu8IlpefYokxiqoZy6OCQ2VAm6Vk3t/qHiAGUXbdbJKJWnc8gH3ypTbB/OBw==", - "dev": true, - "requires": { - "@jest/environment": "^29.4.3", - "@jest/expect": "^29.4.3", - "@jest/test-result": "^29.4.3", - "@jest/types": "^29.4.3", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.5.0.tgz", + "integrity": "sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==", + "requires": { + "@jest/environment": "^29.5.0", + "@jest/expect": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", "is-generator-fn": "^2.0.0", - "jest-each": "^29.4.3", - "jest-matcher-utils": "^29.4.3", - "jest-message-util": "^29.4.3", - "jest-runtime": "^29.4.3", - "jest-snapshot": "^29.4.3", - "jest-util": "^29.4.3", + "jest-each": "^29.5.0", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-runtime": "^29.5.0", + "jest-snapshot": "^29.5.0", + "jest-util": "^29.5.0", "p-limit": "^3.1.0", - "pretty-format": "^29.4.3", + "pretty-format": "^29.5.0", + "pure-rand": "^6.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" } }, "jest-cli": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.4.3.tgz", - "integrity": "sha512-PiiAPuFNfWWolCE6t3ZrDXQc6OsAuM3/tVW0u27UWc1KE+n/HSn5dSE6B2juqN7WP+PP0jAcnKtGmI4u8GMYCg==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.5.0.tgz", + "integrity": "sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==", "requires": { - "@jest/core": "^29.4.3", - "@jest/test-result": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/core": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/types": "^29.5.0", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^29.4.3", - "jest-util": "^29.4.3", - "jest-validate": "^29.4.3", + "jest-config": "^29.5.0", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", "prompts": "^2.0.1", "yargs": "^17.3.1" + }, + "dependencies": { + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "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==" + }, + "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==" + }, + "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==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "yargs": { + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "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==" + } } }, "jest-config": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.4.3.tgz", - "integrity": "sha512-eCIpqhGnIjdUCXGtLhz4gdDoxKSWXKjzNcc5r+0S1GKOp2fwOipx5mRcwa9GB/ArsxJ1jlj2lmlD9bZAsBxaWQ==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.5.0.tgz", + "integrity": "sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==", "requires": { "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.4.3", - "@jest/types": "^29.4.3", - "babel-jest": "^29.4.3", + "@jest/test-sequencer": "^29.5.0", + "@jest/types": "^29.5.0", + "babel-jest": "^29.5.0", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^29.4.3", - "jest-environment-node": "^29.4.3", + "jest-circus": "^29.5.0", + "jest-environment-node": "^29.5.0", "jest-get-type": "^29.4.3", "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.4.3", - "jest-runner": "^29.4.3", - "jest-util": "^29.4.3", - "jest-validate": "^29.4.3", + "jest-resolve": "^29.5.0", + "jest-runner": "^29.5.0", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^29.4.3", + "pretty-format": "^29.5.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" } }, "jest-diff": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.4.3.tgz", - "integrity": "sha512-YB+ocenx7FZ3T5O9lMVMeLYV4265socJKtkwgk/6YUz/VsEzYDkiMuMhWzZmxm3wDRQvayJu/PjkjjSkjoHsCA==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", + "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", "requires": { "chalk": "^4.0.0", "diff-sequences": "^29.4.3", "jest-get-type": "^29.4.3", - "pretty-format": "^29.4.3" + "pretty-format": "^29.5.0" } }, "jest-docblock": { "version": "29.4.3", "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", - "dev": true, "requires": { "detect-newline": "^3.0.0" } }, "jest-each": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.4.3.tgz", - "integrity": "sha512-1ElHNAnKcbJb/b+L+7j0/w7bDvljw4gTv1wL9fYOczeJrbTbkMGQ5iQPFJ3eFQH19VPTx1IyfePdqSpePKss7Q==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.5.0.tgz", + "integrity": "sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==", "requires": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "chalk": "^4.0.0", "jest-get-type": "^29.4.3", - "jest-util": "^29.4.3", - "pretty-format": "^29.4.3" + "jest-util": "^29.5.0", + "pretty-format": "^29.5.0" } }, "jest-environment-node": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.4.3.tgz", - "integrity": "sha512-gAiEnSKF104fsGDXNkwk49jD/0N0Bqu2K9+aMQXA6avzsA9H3Fiv1PW2D+gzbOSR705bWd2wJZRFEFpV0tXISg==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.5.0.tgz", + "integrity": "sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==", "requires": { - "@jest/environment": "^29.4.3", - "@jest/fake-timers": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/environment": "^29.5.0", + "@jest/fake-timers": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", - "jest-mock": "^29.4.3", - "jest-util": "^29.4.3" + "jest-mock": "^29.5.0", + "jest-util": "^29.5.0" } }, "jest-get-type": { "version": "29.4.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", - "dev": true + "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==" }, "jest-haste-map": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.4.3.tgz", - "integrity": "sha512-eZIgAS8tvm5IZMtKlR8Y+feEOMfo2pSQkmNbufdbMzMSn9nitgGxF1waM/+LbryO3OkMcKS98SUb+j/cQxp/vQ==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.5.0.tgz", + "integrity": "sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==", "requires": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", @@ -10338,166 +12572,162 @@ "fsevents": "^2.3.2", "graceful-fs": "^4.2.9", "jest-regex-util": "^29.4.3", - "jest-util": "^29.4.3", - "jest-worker": "^29.4.3", + "jest-util": "^29.5.0", + "jest-worker": "^29.5.0", "micromatch": "^4.0.4", "walker": "^1.0.8" } }, "jest-leak-detector": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.4.3.tgz", - "integrity": "sha512-9yw4VC1v2NspMMeV3daQ1yXPNxMgCzwq9BocCwYrRgXe4uaEJPAN0ZK37nFBhcy3cUwEVstFecFLaTHpF7NiGA==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz", + "integrity": "sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==", "requires": { "jest-get-type": "^29.4.3", - "pretty-format": "^29.4.3" + "pretty-format": "^29.5.0" } }, "jest-matcher-utils": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.4.3.tgz", - "integrity": "sha512-TTciiXEONycZ03h6R6pYiZlSkvYgT0l8aa49z/DLSGYjex4orMUcafuLXYyyEDWB1RKglq00jzwY00Ei7yFNVg==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz", + "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==", "requires": { "chalk": "^4.0.0", - "jest-diff": "^29.4.3", + "jest-diff": "^29.5.0", "jest-get-type": "^29.4.3", - "pretty-format": "^29.4.3" + "pretty-format": "^29.5.0" } }, "jest-message-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.4.3.tgz", - "integrity": "sha512-1Y8Zd4ZCN7o/QnWdMmT76If8LuDv23Z1DRovBj/vcSFNlGCJGoO8D1nJDw1AdyAGUk0myDLFGN5RbNeJyCRGCw==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", + "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", "requires": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^29.4.3", + "pretty-format": "^29.5.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" } }, "jest-mock": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.4.3.tgz", - "integrity": "sha512-LjFgMg+xed9BdkPMyIJh+r3KeHt1klXPJYBULXVVAkbTaaKjPX1o1uVCAZADMEp/kOxGTwy/Ot8XbvgItOrHEg==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.5.0.tgz", + "integrity": "sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==", "requires": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "@types/node": "*", - "jest-util": "^29.4.3" + "jest-util": "^29.5.0" } }, "jest-pnp-resolver": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, "requires": {} }, "jest-regex-util": { "version": "29.4.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", - "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", - "dev": true + "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==" }, "jest-resolve": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.4.3.tgz", - "integrity": "sha512-GPokE1tzguRyT7dkxBim4wSx6E45S3bOQ7ZdKEG+Qj0Oac9+6AwJPCk0TZh5Vu0xzeX4afpb+eDmgbmZFFwpOw==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.5.0.tgz", + "integrity": "sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==", "requires": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.4.3", + "jest-haste-map": "^29.5.0", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.4.3", - "jest-validate": "^29.4.3", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", "resolve": "^1.20.0", "resolve.exports": "^2.0.0", "slash": "^3.0.0" } }, "jest-resolve-dependencies": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.4.3.tgz", - "integrity": "sha512-uvKMZAQ3nmXLH7O8WAOhS5l0iWyT3WmnJBdmIHiV5tBbdaDZ1wqtNX04FONGoaFvSOSHBJxnwAVnSn1WHdGVaw==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz", + "integrity": "sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==", "requires": { "jest-regex-util": "^29.4.3", - "jest-snapshot": "^29.4.3" + "jest-snapshot": "^29.5.0" } }, "jest-runner": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.4.3.tgz", - "integrity": "sha512-GWPTEiGmtHZv1KKeWlTX9SIFuK19uLXlRQU43ceOQ2hIfA5yPEJC7AMkvFKpdCHx6pNEdOD+2+8zbniEi3v3gA==", - "dev": true, - "requires": { - "@jest/console": "^29.4.3", - "@jest/environment": "^29.4.3", - "@jest/test-result": "^29.4.3", - "@jest/transform": "^29.4.3", - "@jest/types": "^29.4.3", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.5.0.tgz", + "integrity": "sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==", + "requires": { + "@jest/console": "^29.5.0", + "@jest/environment": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.13.1", "graceful-fs": "^4.2.9", "jest-docblock": "^29.4.3", - "jest-environment-node": "^29.4.3", - "jest-haste-map": "^29.4.3", - "jest-leak-detector": "^29.4.3", - "jest-message-util": "^29.4.3", - "jest-resolve": "^29.4.3", - "jest-runtime": "^29.4.3", - "jest-util": "^29.4.3", - "jest-watcher": "^29.4.3", - "jest-worker": "^29.4.3", + "jest-environment-node": "^29.5.0", + "jest-haste-map": "^29.5.0", + "jest-leak-detector": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-resolve": "^29.5.0", + "jest-runtime": "^29.5.0", + "jest-util": "^29.5.0", + "jest-watcher": "^29.5.0", + "jest-worker": "^29.5.0", "p-limit": "^3.1.0", "source-map-support": "0.5.13" } }, "jest-runtime": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.4.3.tgz", - "integrity": "sha512-F5bHvxSH+LvLV24vVB3L8K467dt3y3dio6V3W89dUz9nzvTpqd/HcT9zfYKL2aZPvD63vQFgLvaUX/UpUhrP6Q==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.5.0.tgz", + "integrity": "sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==", "requires": { - "@jest/environment": "^29.4.3", - "@jest/fake-timers": "^29.4.3", - "@jest/globals": "^29.4.3", + "@jest/environment": "^29.5.0", + "@jest/fake-timers": "^29.5.0", + "@jest/globals": "^29.5.0", "@jest/source-map": "^29.4.3", - "@jest/test-result": "^29.4.3", - "@jest/transform": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.4.3", - "jest-message-util": "^29.4.3", - "jest-mock": "^29.4.3", + "jest-haste-map": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-mock": "^29.5.0", "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.4.3", - "jest-snapshot": "^29.4.3", - "jest-util": "^29.4.3", + "jest-resolve": "^29.5.0", + "jest-snapshot": "^29.5.0", + "jest-util": "^29.5.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" + } } }, "jest-snapshot": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.4.3.tgz", - "integrity": "sha512-NGlsqL0jLPDW91dz304QTM/SNO99lpcSYYAjNiX0Ou+sSGgkanKBcSjCfp/pqmiiO1nQaOyLp6XQddAzRcx3Xw==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz", + "integrity": "sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==", "requires": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", @@ -10505,59 +12735,41 @@ "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.4.3", - "@jest/transform": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/expect-utils": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", "@types/babel__traverse": "^7.0.6", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^29.4.3", + "expect": "^29.5.0", "graceful-fs": "^4.2.9", - "jest-diff": "^29.4.3", + "jest-diff": "^29.5.0", "jest-get-type": "^29.4.3", - "jest-haste-map": "^29.4.3", - "jest-matcher-utils": "^29.4.3", - "jest-message-util": "^29.4.3", - "jest-util": "^29.4.3", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0", "natural-compare": "^1.4.0", - "pretty-format": "^29.4.3", + "pretty-format": "^29.5.0", "semver": "^7.3.5" }, "dependencies": { - "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==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, "semver": { "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, "requires": { "lru-cache": "^6.0.0" } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true } } }, "jest-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.4.3.tgz", - "integrity": "sha512-ToSGORAz4SSSoqxDSylWX8JzkOQR7zoBtNRsA7e+1WUX5F8jrOwaNpuh1YfJHJKDHXLHmObv5eOjejUd+/Ws+Q==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", + "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==", "requires": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -10566,51 +12778,47 @@ } }, "jest-validate": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.4.3.tgz", - "integrity": "sha512-J3u5v7aPQoXPzaar6GndAVhdQcZr/3osWSgTeKg5v574I9ybX/dTyH0AJFb5XgXIB7faVhf+rS7t4p3lL9qFaw==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz", + "integrity": "sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==", "requires": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "camelcase": "^6.2.0", "chalk": "^4.0.0", "jest-get-type": "^29.4.3", "leven": "^3.1.0", - "pretty-format": "^29.4.3" + "pretty-format": "^29.5.0" }, "dependencies": { "camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" } } }, "jest-watcher": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.4.3.tgz", - "integrity": "sha512-zwlXH3DN3iksoIZNk73etl1HzKyi5FuQdYLnkQKm5BW4n8HpoG59xSwpVdFrnh60iRRaRBGw0gcymIxjJENPcA==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.5.0.tgz", + "integrity": "sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==", "requires": { - "@jest/test-result": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/test-result": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.13.1", - "jest-util": "^29.4.3", + "jest-util": "^29.5.0", "string-length": "^4.0.1" } }, "jest-worker": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.4.3.tgz", - "integrity": "sha512-GLHN/GTAAMEy5BFdvpUfzr9Dr80zQqBrh0fz1mtRMe05hqP45+HfQltu7oTBfduD0UeZs09d+maFtFYAXFWvAA==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz", + "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==", "requires": { "@types/node": "*", - "jest-util": "^29.4.3", + "jest-util": "^29.5.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, @@ -10619,7 +12827,6 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -10630,7 +12837,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/js-cleanup/-/js-cleanup-1.2.0.tgz", "integrity": "sha512-JeDD0yiiSt80fXzAVa/crrS0JDPQljyBG/RpOtaSbyDq03VHa9szJWMaWOYU/bcTn412uMN2MxApXq8v79cUiQ==", - "dev": true, "requires": { "magic-string": "^0.25.7", "perf-regexes": "^1.0.1", @@ -10640,36 +12846,30 @@ "js-sdsl": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", - "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", - "dev": true + "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==" }, "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 + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "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, + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" } }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" }, "json-bigint": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "dev": true, "requires": { "bignumber.js": "^9.0.0" } @@ -10677,38 +12877,32 @@ "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 + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "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==", - "dev": true + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "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 + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" }, "json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" }, "jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, "requires": { "graceful-fs": "^4.1.6", "universalify": "^2.0.0" @@ -10718,7 +12912,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", - "dev": true, "requires": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", @@ -10729,7 +12922,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", - "dev": true, "requires": { "jwa": "^2.0.0", "safe-buffer": "^5.0.1" @@ -10739,71 +12931,251 @@ "version": "4.5.2", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", - "dev": true, "requires": { "json-buffer": "3.0.1" } }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, "kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" }, "leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" }, "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, "requires": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, + "license-check-and-add": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/license-check-and-add/-/license-check-and-add-4.0.5.tgz", + "integrity": "sha512-FySnMi3Kf/vO5jka8tcbVF1FhDFb8PWsQ8pg5Y7U/zkQgta+fIrJGcGHO58WFjfKlgvhneG1uQ00Fpxzhau3QA==", + "requires": { + "fs-extra": "^8.1.0", + "gitignore-to-glob": "^0.3.0", + "globby": "^10.0.1", + "ignore": "^5.1.2", + "yargs": "^13.3.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "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==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "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==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "requires": { + "cliui": "^5.0.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": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, "lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "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, + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", "requires": { - "p-locate": "^4.1.0" + "p-locate": "^6.0.0" } }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" }, "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 + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==" }, "log-symbols": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", - "dev": true, "requires": { "chalk": "^5.0.0", "is-unicode-supported": "^1.1.0" @@ -10812,8 +13184,7 @@ "chalk": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", - "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", - "dev": true + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==" } } }, @@ -10821,7 +13192,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-2.2.0.tgz", "integrity": "sha512-S0FayMXku80toa5sZ6Ro4C+s+EtFDCsyJNG/AzFMfX3AxD5Si4dZsgzm/kKnbOxHl5Cv8jBlno8+3XYIh2pNjQ==", - "dev": true, "requires": { "currently-unhandled": "^0.4.1", "signal-exit": "^3.0.2" @@ -10830,23 +13200,20 @@ "lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" }, "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, + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "requires": { - "yallist": "^3.0.2" + "yallist": "^4.0.0" } }, "magic-string": { "version": "0.25.9", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, "requires": { "sourcemap-codec": "^1.4.8" } @@ -10855,7 +13222,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, "requires": { "semver": "^6.0.0" } @@ -10863,29 +13229,155 @@ "make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" }, "makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, "requires": { "tmpl": "1.0.5" } }, + "map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==" + }, + "meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "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==" + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + } + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==" + } + } + }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" }, "micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, "requires": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -10894,60 +13386,106 @@ "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, "mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==" }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, + "minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "dependencies": { + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==" + } + } + }, + "minipass": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.5.tgz", + "integrity": "sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q==" + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, + "moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "multimatch": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", - "dev": true, "requires": { "@types/minimatch": "^3.0.3", "array-differ": "^3.0.0", "array-union": "^2.1.0", "arrify": "^2.0.1", "minimatch": "^3.0.4" + }, + "dependencies": { + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" + } } }, "mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==" + }, + "ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==" }, "node-fetch": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", - "dev": true, "requires": { "whatwg-url": "^5.0.0" } @@ -10955,26 +13493,22 @@ "node-forge": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" }, "node-releases": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", - "dev": true + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" }, "normalize-newline": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/normalize-newline/-/normalize-newline-4.1.0.tgz", "integrity": "sha512-ff4jKqMI8Xl50/4Mms/9jPobzAV/UK+kXG2XJ/7AqOmxIx8mqfqTIHYxuAnEgJ2AQeBbLnlbmZ5+38Y9A0w/YA==", - "dev": true, "requires": { "replace-buffer": "^1.2.1" } @@ -10983,7 +13517,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, "requires": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", @@ -10991,49 +13524,30 @@ "validate-npm-package-license": "^3.0.1" }, "dependencies": { - "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==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, "semver": { "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, "requires": { "lru-cache": "^6.0.0" } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true } } }, "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 + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, "normalize-url": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" }, "npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, "requires": { "path-key": "^3.0.0" } @@ -11041,14 +13555,12 @@ "object-inspect": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "requires": { "wrappy": "1" } @@ -11057,7 +13569,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, "requires": { "mimic-fn": "^2.1.0" } @@ -11066,7 +13577,6 @@ "version": "8.4.2", "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dev": true, "requires": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", @@ -11077,7 +13587,6 @@ "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, "requires": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -11088,18 +13597,17 @@ } }, "ora": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/ora/-/ora-6.1.2.tgz", - "integrity": "sha512-EJQ3NiP5Xo94wJXIzAyOtSb0QEIAUu7m8t6UZ9krbz0vAJqr92JpcK/lEXg91q6B9pEGqrykkd2EQplnifDSBw==", - "dev": true, + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-6.2.0.tgz", + "integrity": "sha512-c1qb/1rdE+EFDYiLXh10VY459uMh7DN9zlgd8mZJLoeiPpYllN8eAOiih2Rkah5ywxRm5tHN5C9zPheDq8d1MA==", "requires": { - "bl": "^5.0.0", "chalk": "^5.0.0", "cli-cursor": "^4.0.0", "cli-spinners": "^2.6.1", "is-interactive": "^2.0.0", "is-unicode-supported": "^1.1.0", "log-symbols": "^5.1.0", + "stdin-discarder": "^0.1.0", "strip-ansi": "^7.0.1", "wcwidth": "^1.0.1" }, @@ -11107,20 +13615,17 @@ "ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" }, "chalk": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", - "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", - "dev": true + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==" }, "cli-cursor": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", - "dev": true, "requires": { "restore-cursor": "^4.0.0" } @@ -11129,7 +13634,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", - "dev": true, "requires": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -11139,7 +13643,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dev": true, "requires": { "ansi-regex": "^6.0.1" } @@ -11149,14 +13652,12 @@ "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" }, "p-any": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-any/-/p-any-3.0.0.tgz", "integrity": "sha512-5rqbqfsRWNb0sukt0awwgJMlaep+8jV45S15SKKB34z4UuzjcofIfnriCBhWjZP2jbVtjt9yRl7buB6RlKsu9w==", - "dev": true, "requires": { "p-cancelable": "^2.0.0", "p-some": "^5.0.0" @@ -11165,41 +13666,41 @@ "p-cancelable": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "dev": true + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==" }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "dev": true + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==" }, "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, "requires": { "yocto-queue": "^0.1.0" } }, "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "requires": { - "p-limit": "^2.2.0" + "p-limit": "^4.0.0" }, "dependencies": { "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, + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "requires": { - "p-try": "^2.0.0" + "yocto-queue": "^1.0.0" } + }, + "yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==" } } }, @@ -11207,7 +13708,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", - "dev": true, "requires": { "aggregate-error": "^4.0.0" } @@ -11216,7 +13716,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-some/-/p-some-5.0.0.tgz", "integrity": "sha512-Js5XZxo6vHjB9NOYAzWDYAIyyiPvva0DWESAIWIK7uhSpGsyg5FwUPxipU/SOQx5x9EqhOh545d1jo6cVkitig==", - "dev": true, "requires": { "aggregate-error": "^3.0.0", "p-cancelable": "^2.0.0" @@ -11226,7 +13725,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, "requires": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -11235,14 +13733,12 @@ "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 + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" }, "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 + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" } } }, @@ -11250,7 +13746,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, "requires": { "p-finally": "^1.0.0" } @@ -11258,14 +13753,17 @@ "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 + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "package-name-regex": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/package-name-regex/-/package-name-regex-2.0.6.tgz", + "integrity": "sha512-gFL35q7kbE/zBaPA3UKhp2vSzcPYx2ecbYuwv1ucE9Il6IIgBDweBlH8D68UFGZic2MkllKa2KHCfC1IQBQUYA==" }, "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, "requires": { "callsites": "^3.0.0" } @@ -11274,7 +13772,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -11283,94 +13780,141 @@ } }, "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 + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==" }, "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==", - "dev": true + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" }, "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 + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, "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 + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "path-scurry": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.6.1.tgz", + "integrity": "sha512-OW+5s+7cw6253Q4E+8qQ/u1fVvcJQCJo/VFD8pje+dbJCF1n5ZRMV2AEHbGp+5Q7jxQIYJxkHopnj6nzdGeZLA==", + "requires": { + "lru-cache": "^7.14.1", + "minipass": "^4.0.2" + }, + "dependencies": { + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==" + } + } + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, "perf-regexes": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/perf-regexes/-/perf-regexes-1.0.1.tgz", - "integrity": "sha512-L7MXxUDtqr4PUaLFCDCXBfGV/6KLIuSEccizDI7JxT+c9x1G1v04BQ4+4oag84SHaCdrBgQAIs/Cqn+flwFPng==", - "dev": true + "integrity": "sha512-L7MXxUDtqr4PUaLFCDCXBfGV/6KLIuSEccizDI7JxT+c9x1G1v04BQ4+4oag84SHaCdrBgQAIs/Cqn+flwFPng==" }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, "pirates": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==" }, "pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, "requires": { "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "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==" + } } }, "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 + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" }, "prepend-http": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-3.0.1.tgz", - "integrity": "sha512-BLxfZh+m6UiAiCPZFJ4+vYoL7NrRs5XgCTRrjseATAggXhdZKKxn+JUNmuVYWY23bDHgaEHodxw8mnmtVEDtHw==", - "dev": true + "integrity": "sha512-BLxfZh+m6UiAiCPZFJ4+vYoL7NrRs5XgCTRrjseATAggXhdZKKxn+JUNmuVYWY23bDHgaEHodxw8mnmtVEDtHw==" }, "prettier": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", - "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", - "dev": true + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.5.tgz", + "integrity": "sha512-3gzuxrHbKUePRBB4ZeU08VNkUcqEHaUaouNt0m7LGP4Hti/NuB07C7PPTM/LkWqXoJYJn2McEo5+kxPNrtQkLQ==" }, "prettier-linter-helpers": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, "requires": { "fast-diff": "^1.1.2" } }, "pretty-format": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", - "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==", - "dev": true, + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", + "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", "requires": { "@jest/schemas": "^29.4.3", "ansi-styles": "^5.0.0", @@ -11380,16 +13924,19 @@ "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" } } }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + }, "prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, "requires": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -11399,7 +13946,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -11408,14 +13954,17 @@ "punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==" + }, + "pure-rand": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.1.tgz", + "integrity": "sha512-t+x1zEHDjBwkDGY5v5ApnZ/utcd4XYDiJsaQQoptTXgUXX95sDg1elCdJghzicm7n2mbCBJ3uYWr6M22SO19rg==" }, "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.1.tgz", + "integrity": "sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==", "requires": { "side-channel": "^1.0.4" } @@ -11423,32 +13972,27 @@ "querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, "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 + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" }, "quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" }, "react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, "read-pkg": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", - "dev": true, "requires": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^3.0.2", @@ -11459,8 +14003,7 @@ "type-fest": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==" } } }, @@ -11468,7 +14011,6 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", - "dev": true, "requires": { "find-up": "^5.0.0", "read-pkg": "^6.0.0", @@ -11479,7 +14021,6 @@ "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, "requires": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -11489,7 +14030,6 @@ "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, "requires": { "p-locate": "^5.0.0" } @@ -11498,35 +14038,26 @@ "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, "requires": { "p-limit": "^3.0.2" } }, + "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==" + }, "type-fest": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==" } } }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, "requires": { "picomatch": "^2.2.1" } @@ -11535,40 +14066,60 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "dev": true, "requires": { "minimatch": "^3.0.5" } }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "dependencies": { + "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==" + } + } + }, "regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" }, "replace-buffer": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/replace-buffer/-/replace-buffer-1.2.1.tgz", - "integrity": "sha512-ly3OKwKu+3T55DjP5PjIMzxgz9lFx6dQnBmAIxryZyRKl8f22juy12ShOyuq8WrQE5UlFOseZgQZDua0iF9DHw==", - "dev": true + "integrity": "sha512-ly3OKwKu+3T55DjP5PjIMzxgz9lFx6dQnBmAIxryZyRKl8f22juy12ShOyuq8WrQE5UlFOseZgQZDua0iF9DHw==" }, "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 + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + }, + "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==" }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, "requires": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", @@ -11578,35 +14129,37 @@ "resolve-alpn": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" }, "resolve-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, "requires": { "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + } } }, "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 + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" }, "resolve.exports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.0.tgz", - "integrity": "sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg==", - "dev": true + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.1.tgz", + "integrity": "sha512-OEJWVeimw8mgQuj3HfkNl4KqRevH7lzeQNaWRPfx0PPse7Jk6ozcsG4FKVgtzDsC1KUF+YlTHh17NcgHOPykLw==" }, "responselike": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", - "dev": true, "requires": { "lowercase-keys": "^2.0.0" } @@ -11615,7 +14168,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, "requires": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -11624,23 +14176,49 @@ "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" }, "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.0.tgz", + "integrity": "sha512-X36S+qpCUR0HjXlkDe4NAOhS//aHH0Z+h8Ckf2auGJk3PTnx5rLmrHkwNdbVQuCSUhOyFrlRvFEllZOYE+yZGQ==", "requires": { - "glob": "^7.1.3" + "glob": "^9.2.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.1.tgz", + "integrity": "sha512-qERvJb7IGsnkx6YYmaaGvDpf77c951hICMdWaFXyH3PlVob8sbPJJyJX0kWkiCWyXUzoy9UOTNjGg0RbD8bYIw==", + "requires": { + "fs.realpath": "^1.0.0", + "minimatch": "^7.4.1", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + } + }, + "minimatch": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.2.tgz", + "integrity": "sha512-xy4q7wou3vUoC9k1xGTXc+awNdGaGVHtFUaey8tiX4H1QRc04DZ/rmDFwNm2EBsuYEhAZ6SgMmYf3InGY6OauA==", + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, "rollup": { - "version": "3.17.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.17.2.tgz", - "integrity": "sha512-qMNZdlQPCkWodrAZ3qnJtvCAl4vpQ8q77uEujVCCbC/6CLB7Lcmvjq7HyiOSnf4fxTT9XgsE36oLHJBH49xjqA==", - "dev": true, + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.20.0.tgz", + "integrity": "sha512-YsIfrk80NqUDrxrjWPXUa7PWvAfegZEXHuPsEZg58fGCdjL1I9C1i/NaG+L+27kxxwkrG/QEDEQc8s/ynXWWGQ==", "requires": { "fsevents": "~2.3.2" } @@ -11649,17 +14227,41 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/rollup-plugin-cleanup/-/rollup-plugin-cleanup-3.2.1.tgz", "integrity": "sha512-zuv8EhoO3TpnrU8MX8W7YxSbO4gmOR0ny06Lm3nkFfq0IVKdBUtHwhVzY1OAJyNCIAdLiyPnOrU0KnO0Fri1GQ==", - "dev": true, "requires": { "js-cleanup": "^1.2.0", "rollup-pluginutils": "^2.8.2" } }, + "rollup-plugin-license": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-license/-/rollup-plugin-license-3.0.1.tgz", + "integrity": "sha512-/lec6Y94Y3wMfTDeYTO/jSXII0GQ/XkDZCiqkMKxyU5D5nGPaxr/2JNYvAgYsoCYuOLGOanKDPjCCQiTT96p7A==", + "requires": { + "commenting": "~1.1.0", + "glob": "~7.2.0", + "lodash": "~4.17.21", + "magic-string": "~0.26.2", + "mkdirp": "~1.0.4", + "moment": "~2.29.3", + "package-name-regex": "~2.0.6", + "spdx-expression-validate": "~2.0.0", + "spdx-satisfies": "~5.0.1" + }, + "dependencies": { + "magic-string": { + "version": "0.26.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz", + "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==", + "requires": { + "sourcemap-codec": "^1.4.8" + } + } + } + }, "rollup-pluginutils": { "version": "2.8.2", "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", - "dev": true, "requires": { "estree-walker": "^0.6.1" }, @@ -11667,28 +14269,24 @@ "estree-walker": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" } } }, "router-ips": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/router-ips/-/router-ips-1.0.0.tgz", - "integrity": "sha512-yBo6F52Un/WYioXbedBGvrKIiofbwt+4cUhdqDb9fNMJBI4D4jOy7jlxxaRVEvICPKU7xMmJDtDFR6YswX/sFQ==", - "dev": true + "integrity": "sha512-yBo6F52Un/WYioXbedBGvrKIiofbwt+4cUhdqDb9fNMJBI4D4jOy7jlxxaRVEvICPKU7xMmJDtDFR6YswX/sFQ==" }, "run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" }, "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, "requires": { "queue-microtask": "^1.2.2" } @@ -11697,7 +14295,6 @@ "version": "7.8.0", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", - "dev": true, "requires": { "tslib": "^2.1.0" } @@ -11705,32 +14302,32 @@ "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==", - "dev": true + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, "server-destroy": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", - "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==", - "dev": true + "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==" + }, + "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==" }, "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, "requires": { "shebang-regex": "^3.0.0" } @@ -11738,14 +14335,12 @@ "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 + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, "side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -11755,32 +14350,27 @@ "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 + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, "skip-regex": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/skip-regex/-/skip-regex-1.0.2.tgz", - "integrity": "sha512-pEjMUbwJ5Pl/6Vn6FsamXHXItJXSRftcibixDmNCWbWhic0hzHrwkMZo0IZ7fMRH9KxcWDFSkzhccB4285PutA==", - "dev": true + "integrity": "sha512-pEjMUbwJ5Pl/6Vn6FsamXHXItJXSRftcibixDmNCWbWhic0hzHrwkMZo0IZ7fMRH9KxcWDFSkzhccB4285PutA==" }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" }, "slice-ansi": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "dev": true, "requires": { "ansi-styles": "^6.0.0", "is-fullwidth-code-point": "^4.0.0" @@ -11789,28 +14379,19 @@ "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 - }, - "is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" } } }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-support": { "version": "0.5.13", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -11819,14 +14400,22 @@ "sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "spdx-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/spdx-compare/-/spdx-compare-1.0.0.tgz", + "integrity": "sha512-C1mDZOX0hnu0ep9dfmuoi03+eOdDoz2yvK79RxbcrVEG1NO1Ph35yW102DHWKN4pk80nwCgeMmSY5L25VE4D9A==", + "requires": { + "array-find-index": "^1.0.2", + "spdx-expression-parse": "^3.0.0", + "spdx-ranges": "^2.0.0" + } }, "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -11835,108 +14424,147 @@ "spdx-exceptions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" }, "spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, + "spdx-expression-validate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-validate/-/spdx-expression-validate-2.0.0.tgz", + "integrity": "sha512-b3wydZLM+Tc6CFvaRDBOF9d76oGIHNCLYFeHbftFXUWjnfZWganmDmvtM5sm1cRwJc/VDBMLyGGrsLFd1vOxbg==", + "requires": { + "spdx-expression-parse": "^3.0.0" + } + }, "spdx-license-ids": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", - "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", - "dev": true + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==" + }, + "spdx-ranges": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/spdx-ranges/-/spdx-ranges-2.1.1.tgz", + "integrity": "sha512-mcdpQFV7UDAgLpXEE/jOMqvK4LBoO0uTQg0uvXUewmEFhpiZx5yJSZITHB8w1ZahKdhfZqP5GPEOKLyEq5p8XA==" + }, + "spdx-satisfies": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/spdx-satisfies/-/spdx-satisfies-5.0.1.tgz", + "integrity": "sha512-Nwor6W6gzFp8XX4neaKQ7ChV4wmpSh2sSDemMFSzHxpTw460jxFYeOn+jq4ybnSSw/5sc3pjka9MQPouksQNpw==", + "requires": { + "spdx-compare": "^1.0.0", + "spdx-expression-parse": "^3.0.0", + "spdx-ranges": "^2.0.0" + } }, "split-lines": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/split-lines/-/split-lines-3.0.0.tgz", - "integrity": "sha512-d0TpRBL/VfKDXsk8JxPF7zgF5pCUDdBMSlEL36xBgVeaX448t+yGXcJaikUyzkoKOJ0l6KpMfygzJU9naIuivw==", - "dev": true + "integrity": "sha512-d0TpRBL/VfKDXsk8JxPF7zgF5pCUDdBMSlEL36xBgVeaX448t+yGXcJaikUyzkoKOJ0l6KpMfygzJU9naIuivw==" }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, "requires": { "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + } } }, - "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==", - "dev": true, + "stdin-discarder": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", + "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==", "requires": { - "safe-buffer": "~5.2.0" + "bl": "^5.0.0" } }, "string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, "requires": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" } }, "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, + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "requires": { + "ansi-regex": "^6.0.1" + } + } } }, "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, "requires": { "ansi-regex": "^5.0.1" } }, "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 + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-5.0.0.tgz", + "integrity": "sha512-p+byADHF7SzEcVnLvc/r3uognM1hUhObuHXxJcgLCfD194XAkaLbjq3Wzb0N5G2tgIjH0dgT708Z51QxMeu60A==" }, "strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "requires": { + "min-indent": "^1.0.0" + } }, "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 + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" }, "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, "requires": { "has-flag": "^4.0.0" } @@ -11944,14 +14572,72 @@ "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 + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "table": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "requires": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "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==" + }, + "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==" + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "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==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + } + } }, "test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, "requires": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -11961,20 +14647,17 @@ "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 + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, "requires": { "os-tmpdir": "~1.0.2" } @@ -11982,20 +14665,17 @@ "tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "requires": { "is-number": "^7.0.0" } @@ -12003,14 +14683,17 @@ "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==" }, "ts-jest": { "version": "29.0.5", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.0.5.tgz", "integrity": "sha512-PL3UciSgIpQ7f6XjVOmbi96vmDHUqAyqDr8YxzopDqX3kfgYtX1cuNeBjP+L9sFXi6nzsGGA6R3fP3DDDJyrxA==", - "dev": true, "requires": { "bs-logger": "0.x", "fast-json-stable-stringify": "2.x", @@ -12022,29 +14705,18 @@ "yargs-parser": "^21.0.1" }, "dependencies": { - "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==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, "semver": { "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, "requires": { "lru-cache": "^6.0.0" } }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "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==" } } }, @@ -12052,7 +14724,6 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/ts2gas/-/ts2gas-4.2.0.tgz", "integrity": "sha512-5xZugaeM3wKQPj/vrWnrtYjNh4xnIz6cGSW/smCe9OTmkh1+KvHpm7M7HLq/OnBaljf4+yKctC4AYimBi4T1/Q==", - "dev": true, "requires": { "type-fest": "^2.1.0", "typescript": "^4.4.2" @@ -12061,22 +14732,34 @@ "type-fest": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==" } } }, "tslib": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } }, "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, "requires": { "prelude-ls": "^1.2.1" } @@ -12084,32 +14767,35 @@ "type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" }, "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true + "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==" + }, + "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==", + "requires": { + "is-typedarray": "^1.0.0" + } }, "typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==" }, "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" }, "update-browserslist-db": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "dev": true, "requires": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -12119,7 +14805,6 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, "requires": { "punycode": "^2.1.0" } @@ -12128,7 +14813,6 @@ "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, "requires": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -12137,26 +14821,27 @@ "url-template": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", - "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==", - "dev": true + "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==" }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "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 + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" }, "v8-to-istanbul": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", - "dev": true, "requires": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -12166,8 +14851,7 @@ "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 + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" } } }, @@ -12175,7 +14859,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -12185,7 +14868,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, "requires": { "makeerror": "1.0.12" } @@ -12194,7 +14876,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, "requires": { "defaults": "^1.0.3" } @@ -12202,14 +14883,12 @@ "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, "requires": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -12219,82 +14898,87 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "requires": { "isexe": "^2.0.0" } }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, "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, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" + }, + "dependencies": { + "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==" + }, + "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==" + }, + "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==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + } } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, + "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==", "requires": { "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", - "dev": true, - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "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 + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" }, "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 + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" } } } diff --git a/package.json b/package.json index 7d6a91e..40c60a1 100644 --- a/package.json +++ b/package.json @@ -4,28 +4,37 @@ "description": "", "main": "src/index.ts", "scripts": { - "clean": "rm -rf build dist", - "build:compile": "npx tsc", - "build:bundle": "npx rollup -c rollup.config.mjs", + "clean": "npx rimraf build dist", + "build:compile": "tsc", + "build:bundle": "rollup --no-treeshake -c rollup.config.mjs", "build": "npm run clean && npm run build:compile && npm run build:bundle", - "test": "npx jest src/ --passWithNoTests", - "deploy": "npm run test && npm run build && cp appsscript.json dist && cp .clasp-dev.json .clasp.json && clasp push", - "deploy-prod": "npm run test && npm run build && cp appsscript.json dist && cp .clasp-prod.json .clasp.json && clasp push" + "test": "jest src/ --passWithNoTests", + "deploy": "npm run license:add && npm run lint && npm run test && npm run build && ncp appsscript.json dist/appsscript.json && ncp .clasp-dev.json .clasp.json && clasp push", + "deploy-prod": "npm run license:add && npm run lint && npm run test && npm run build && ncp appsscript.json dist/appsscript.json && ncp .clasp-prod.json .clasp.json && clasp push", + "lint": "npm run license:check && eslint --fix src/", + "license:check": "license-check-and-add check -f license-config.json", + "license:add": "license-check-and-add add -f license-config.json" }, - "devDependencies": { + "dependencies": { "@google/clasp": "^2.4.2", "@rollup/plugin-node-resolve": "^15.0.1", - "@types/google-apps-script": "^1.0.57", + "@types/google-apps-script": "^1.0.59", "@types/google-apps-script-oauth2": "^38.0.0", - "@types/jest": "^29.4.0", - "eslint": "^8.34.0", + "@types/jest": "^29.5.0", + "@typescript-eslint/eslint-plugin": "^5.56.0", + "eslint": "^8.36.0", "eslint-config-google": "^0.14.0", - "eslint-config-prettier": "^8.6.0", + "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^4.2.1", - "jest": "^29.4.3", - "prettier": "^2.8.4", - "rollup": "^3.17.2", + "gts": "^3.1.1", + "jest": "^29.5.0", + "license-check-and-add": "^4.0.5", + "ncp": "^2.0.0", + "prettier": "^2.8.5", + "rimraf": "^4.4.0", + "rollup": "^3.20.0", "rollup-plugin-cleanup": "^3.2.1", + "rollup-plugin-license": "^3.0.1", "ts-jest": "^29.0.5", "typescript": "^4.9.5" } diff --git a/rollup.config.mjs b/rollup.config.mjs index a6a1ccb..d1fb9bd 100644 --- a/rollup.config.mjs +++ b/rollup.config.mjs @@ -1,5 +1,22 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ import { nodeResolve } from '@rollup/plugin-node-resolve'; import cleanup from 'rollup-plugin-cleanup'; +import license from 'rollup-plugin-license'; +import { fileURLToPath } from 'url'; const extensions = ['.js']; @@ -18,31 +35,22 @@ const preventTreeShakingPlugin = () => { }; export default { - input: './build/index.js', + input: './build/src/index.js', output: { dir: 'dist', format: 'esm', - banner: `/** - * @license - * Copyright 2023 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */`, }, plugins: [ preventTreeShakingPlugin(), nodeResolve({ extensions }), cleanup({ comments: 'none' }), + license({ + banner: { + content: { + file: fileURLToPath(new URL('license-header.txt', import.meta.url)), + }, + }, + }), ], context: 'this', }; diff --git a/tsconfig.json b/tsconfig.json index 08ea316..a13e7e0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,103 +1,19 @@ { "compilerOptions": { - /* Visit https://aka.ms/tsconfig to read more about this file */ - - /* Projects */ - // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - - /* Language and Environment */ - "target": "es2020", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ - "lib": ["es2020"], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ - // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ - - /* Modules */ - "module": "es2020", /* Specify what module code is generated. */ - "rootDir": "src/", /* Specify the root folder within your source files. */ - // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - // "resolveJsonModule": true, /* Enable importing .json files. */ - // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ - - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ - - /* Emit */ - // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ - "outDir": "./build", /* Specify an output folder for all emitted files. */ - "removeComments": false, /* Disable emitting comments. */ - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ - - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ - - /* Type Checking */ - "strict": true, /* Enable all strict type-checking options. */ - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ - // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */ - } + "target": "es2020", + "module": "ES2020", + "lib": ["es2020"], + "moduleResolution": "node", + "outDir": "build", + "rootDir": ".", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "allowUnreachableCode": false, + "allowUnusedLabels": false + }, + "include": ["src/**/*.ts", "rollup.config.mjs"], + "exclude": ["test/**/*.*"] } From ddb4addb4ddbdcb53213a9f1542a2acef7c749ae Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 21 Mar 2023 09:13:31 +0100 Subject: [PATCH 40/84] Applied new configurations --- src/config.ts | 4 ++-- src/external/ads-script/README.md | 15 +++++++++++++++ src/external/ads-script/agent.js | 11 +++++------ src/external/ads-script/config.js | 3 +-- src/external/ads-script/index.js | 3 +-- src/external/ads-script/sheets.js | 3 +-- src/helpers/api.ts | 9 ++++----- src/helpers/auth.ts | 3 +-- src/helpers/dynamic-column-headers.ts | 7 +++---- src/helpers/jpath.ts | 13 ++++++------- src/helpers/sheets.ts | 3 +-- src/helpers/utils.ts | 3 +-- src/index.ts | 11 +++++------ src/target-agents/agent.sample.ts | 3 +-- src/target-agents/base.ts | 5 ++--- src/target-agents/dv360.ts | 9 ++++----- src/target-agents/google-ads.ts | 13 ++++++------- src/target-agents/index.ts | 3 +-- src/test/api.test.ts | 3 +-- src/test/dv360.test.ts | 15 +++++++++++++++ src/test/dynamic-column-headers.test.ts | 3 +-- src/test/google-ads.test.ts | 15 +++++++++++++++ src/test/jpath.test.ts | 3 +-- 23 files changed, 93 insertions(+), 67 deletions(-) diff --git a/src/config.ts b/src/config.ts index 9e6e35c..08ffee2 100644 --- a/src/config.ts +++ b/src/config.ts @@ -1,12 +1,11 @@ /** - * @license * Copyright 2023 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -15,6 +14,7 @@ * limitations under the License. */ +// eslint-disable-next-line @typescript-eslint/no-this-alias export const GLOBALCTX = this; export const CONFIG = { diff --git a/src/external/ads-script/README.md b/src/external/ads-script/README.md index 31bdcfe..ac41abe 100644 --- a/src/external/ads-script/README.md +++ b/src/external/ads-script/README.md @@ -1,3 +1,18 @@ + # If This Then Ad - Ads Scripts Extension This extension is meant to be used if you don't have a Google Ads Developer Token (yet). diff --git a/src/external/ads-script/agent.js b/src/external/ads-script/agent.js index b31a04f..3123c42 100644 --- a/src/external/ads-script/agent.js +++ b/src/external/ads-script/agent.js @@ -1,12 +1,11 @@ /** - * @license * Copyright 2023 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -29,18 +28,18 @@ class GoogleAds { if (type === 'AD_ID') { const adIds = identifier .split(';') - .map((pair) => pair.split(',').map((id) => parseInt(id, 10))); + .map(pair => pair.split(',').map(id => parseInt(id, 10))); entities = entities.concat(this.getAdsByIds(adIds)); } else if (type === 'AD_LABEL') { entities = entities.concat(getAdsByLabel(identifier)); } else if (type === 'AD_GROUP_ID') { - const adGroupIds = identifier.split(',').map((id) => Number(id)); + const adGroupIds = identifier.split(',').map(id => Number(id)); entities = entities.concat(this.getAdGroupsByIds(adGroupIds)); } else if (type === 'AD_GROUP_LABEL') { entities = entities.concat(getAdGroupsByLabel(identifier)); } - entities.forEach((entity) => { + entities.forEach(entity => { this.setEntityStatus(entity, evaluation); }); } @@ -96,7 +95,7 @@ class GoogleAds { const adGroups = []; - for (var i = 0; i < selectors.length; i++) { + for (let i = 0; i < selectors.length; i++) { const adGroupsIterator = selectors[i].adGroups().withIds(ids).get(); while (adGroupsIterator.hasNext()) { diff --git a/src/external/ads-script/config.js b/src/external/ads-script/config.js index 68c7b9a..34d3307 100644 --- a/src/external/ads-script/config.js +++ b/src/external/ads-script/config.js @@ -1,12 +1,11 @@ /** - * @license * Copyright 2023 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/src/external/ads-script/index.js b/src/external/ads-script/index.js index e16b5b5..6764a04 100644 --- a/src/external/ads-script/index.js +++ b/src/external/ads-script/index.js @@ -1,12 +1,11 @@ /** - * @license * Copyright 2023 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/src/external/ads-script/sheets.js b/src/external/ads-script/sheets.js index 4cb7b45..9024f19 100644 --- a/src/external/ads-script/sheets.js +++ b/src/external/ads-script/sheets.js @@ -1,12 +1,11 @@ /** - * @license * Copyright 2023 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/src/helpers/api.ts b/src/helpers/api.ts index 3da5a0d..afdb57d 100644 --- a/src/helpers/api.ts +++ b/src/helpers/api.ts @@ -1,12 +1,11 @@ /** - * @license * Copyright 2023 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -78,7 +77,7 @@ export class ApiHelper { const resRaw = UrlFetchApp.fetch(url, params); - if (200 != resRaw.getResponseCode() && 204 != resRaw.getResponseCode()) { + if (200 !== resRaw.getResponseCode() && 204 !== resRaw.getResponseCode()) { Logger.log('HTTP code: ' + resRaw.getResponseCode()); Logger.log('API error: ' + resRaw.getContentText()); Logger.log('URL: ' + url); @@ -129,14 +128,14 @@ export class ApiHelper { return prefix.concat( Object.keys(obj) - .map((key) => { + .map(key => { if ((obj as any)[key] instanceof Array) { const joined = (obj as any)[key].join(`&${key}=`); return joined.length ? `${key}=${joined}` : null; } return `${key}=${(obj as any)[key]}`; }) - .filter((param) => param) + .filter(param => param) .join('&') ); } diff --git a/src/helpers/auth.ts b/src/helpers/auth.ts index e1c7973..03d55b7 100644 --- a/src/helpers/auth.ts +++ b/src/helpers/auth.ts @@ -1,12 +1,11 @@ /** - * @license * Copyright 2023 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/src/helpers/dynamic-column-headers.ts b/src/helpers/dynamic-column-headers.ts index ed6abeb..d47ef75 100644 --- a/src/helpers/dynamic-column-headers.ts +++ b/src/helpers/dynamic-column-headers.ts @@ -1,12 +1,11 @@ /** - * @license * Copyright 2023 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -47,7 +46,7 @@ export class DynamicColumnHeaders { getMappedValues( row: string[], namespace: string | undefined = undefined, - includeGroup: boolean = true + includeGroup = true ): Record { let res = {}; @@ -89,6 +88,6 @@ export class DynamicColumnHeaders { DynamicColumnHeaders.namespaceSeparator }` ); - return this.headers.findIndex((header) => exp.test(header)); + return this.headers.findIndex(header => exp.test(header)); } } diff --git a/src/helpers/jpath.ts b/src/helpers/jpath.ts index 153764e..a75f3c2 100644 --- a/src/helpers/jpath.ts +++ b/src/helpers/jpath.ts @@ -1,12 +1,11 @@ /** - * @license * Copyright 2023 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -25,7 +24,7 @@ export class JPath { */ static getValue(path: string, json: Object) { let tmpJson: Record = json; - let val = null; + const val = null; for (const part of path.split('.')) { if (part.startsWith('!')) { @@ -36,14 +35,14 @@ export class JPath { const intVal = parseInt(part); if (intVal && intVal in tmpJson) { tmpVal = tmpJson[intVal]; - } else if (tmpJson.hasOwnProperty(part)) { + } else if (Object.prototype.hasOwnProperty.call(tmpJson, part)) { tmpVal = tmpJson[part]; } else { break; } const typeOf = typeof tmpVal; - if ('string' == typeOf || 'number' == typeOf) { + if ('string' === typeOf || 'number' === typeOf) { return tmpVal; } else { tmpJson = tmpVal; @@ -63,10 +62,10 @@ export class JPath { static getAgregatedValue(aggFunction: string, json: Object) { switch (aggFunction.toLowerCase()) { case 'min': - return Math.min.apply(Math, Object.values(json)); + return Math.min(...Object.values(json)); case 'max': - return Math.max.apply(Math, Object.values(json)); + return Math.max(...Object.values(json)); default: throw `Aggregation function "${aggFunction}" is not supported`; diff --git a/src/helpers/sheets.ts b/src/helpers/sheets.ts index 3c903b4..9b5e9cf 100644 --- a/src/helpers/sheets.ts +++ b/src/helpers/sheets.ts @@ -1,12 +1,11 @@ /** - * @license * Copyright 2023 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/src/helpers/utils.ts b/src/helpers/utils.ts index b7e1b46..cd5bdb4 100644 --- a/src/helpers/utils.ts +++ b/src/helpers/utils.ts @@ -1,12 +1,11 @@ /** - * @license * Copyright 2023 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/src/index.ts b/src/index.ts index 0b23ac4..9ba36d6 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,12 +1,11 @@ /** - * @license * Copyright 2023 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -34,7 +33,7 @@ enum MODE { let sheetsService: SheetsService; /** @type {Record} */ -let targetAgents: Record = {}; +const targetAgents: Record = {}; /** * Add custom menu item into the Spreadsheet menu. @@ -95,7 +94,7 @@ function main(mode: MODE) { console.log(`Processing row ${index + 1}/${rows.length}`); // Check if update is due - let lastUpdate = Number(row[CONFIG.rules.cols.lastUpdate]); + const lastUpdate = Number(row[CONFIG.rules.cols.lastUpdate]); const updateInterval = Number(row[CONFIG.rules.cols.updateInterval]); let status = ''; @@ -247,7 +246,7 @@ function validate() { console.log(); console.log('Result details:'); - errors.forEach((error) => console.log(error)); + errors.forEach(error => console.log(error)); } } @@ -318,7 +317,7 @@ function getTargetAgent(agentName: string) { } const agent = AVAILABLE_AGENTS.find( - (agent) => agent.friendlyName === agentName + agent => agent.friendlyName === agentName ); if (!agent) { diff --git a/src/target-agents/agent.sample.ts b/src/target-agents/agent.sample.ts index 4d815c9..821f1ea 100644 --- a/src/target-agents/agent.sample.ts +++ b/src/target-agents/agent.sample.ts @@ -1,12 +1,11 @@ /** - * @license * Copyright 2023 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/src/target-agents/base.ts b/src/target-agents/base.ts index 79ce4fe..b9a6834 100644 --- a/src/target-agents/base.ts +++ b/src/target-agents/base.ts @@ -1,12 +1,11 @@ /** - * @license * Copyright 2023 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -51,7 +50,7 @@ export class TargetAgent extends ApiHelper { private findMissingRequiredParameter(params: Object) { const keys = Object.keys(params); - return this.requiredParameters.find((param) => !keys.includes(param)); + return this.requiredParameters.find(param => !keys.includes(param)); } /** diff --git a/src/target-agents/dv360.ts b/src/target-agents/dv360.ts index b99b21f..7e4eda1 100644 --- a/src/target-agents/dv360.ts +++ b/src/target-agents/dv360.ts @@ -1,12 +1,11 @@ /** - * @license * Copyright 2023 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -108,7 +107,7 @@ export class DV360 extends TargetAgent { this.authToken = auth.getAuthToken(); let status; - const errors = []; + const errors: string[] = []; if (type === DV360_ENTITY_TYPE.LINE_ITEM) { status = this.isLineItemActive(params.advertiserId, identifier); @@ -242,7 +241,7 @@ export class DV360 extends TargetAgent { private isLineItemActive(advertiserId: string, lineItemId: string) { const entity = this.getEntity(advertiserId, lineItemId, 'lineItems'); - return DV360_ENTITY_STATUS.ACTIVE == entity.entityStatus; + return DV360_ENTITY_STATUS.ACTIVE === entity.entityStatus; } /** @@ -262,6 +261,6 @@ export class DV360 extends TargetAgent { 'insertionOrders' ); - return DV360_ENTITY_STATUS.ACTIVE == entity.entityStatus; + return DV360_ENTITY_STATUS.ACTIVE === entity.entityStatus; } } diff --git a/src/target-agents/google-ads.ts b/src/target-agents/google-ads.ts index 3bad74e..d0a52d1 100644 --- a/src/target-agents/google-ads.ts +++ b/src/target-agents/google-ads.ts @@ -1,12 +1,11 @@ /** - * @license * Copyright 2023 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -87,7 +86,7 @@ export class GoogleAds extends TargetAgent { console.log(`Updating status of Ad ${identifier} to '${status}'`); this.updateAdStatusById( params.customerId, - identifier.split(';').map((id) => String(id)), + identifier.split(';').map(id => String(id)), status ); } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_LABEL) { @@ -95,7 +94,7 @@ export class GoogleAds extends TargetAgent { } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_GROUP_ID) { this.updateAdGroupStatusById( params.customerId, - identifier.split(';').map((id) => String(id)), + identifier.split(';').map(id => String(id)), status ); } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_GROUP_LABEL) { @@ -136,7 +135,7 @@ export class GoogleAds extends TargetAgent { entitiesToBeChecked = entitiesToBeChecked.concat( this.getAdsById( params.customerId, - identifier.split(',').map((id) => String(id)) + identifier.split(',').map(id => String(id)) ) ); } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_LABEL) { @@ -147,7 +146,7 @@ export class GoogleAds extends TargetAgent { entitiesToBeChecked = entitiesToBeChecked.concat( this.getAdGroupsById( params.customerId, - identifier.split(',').map((id) => String(id)) + identifier.split(',').map(id => String(id)) ) ); } else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_GROUP_LABEL) { @@ -203,7 +202,7 @@ export class GoogleAds extends TargetAgent { path: string, method = 'get', payload: Object, - forceCache: boolean = false + forceCache = false ) { const headers = { Authorization: `Bearer ${this.authToken}`, diff --git a/src/target-agents/index.ts b/src/target-agents/index.ts index cb49b4e..6a72ac7 100644 --- a/src/target-agents/index.ts +++ b/src/target-agents/index.ts @@ -1,12 +1,11 @@ /** - * @license * Copyright 2023 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/src/test/api.test.ts b/src/test/api.test.ts index bfd3d13..ab78b71 100644 --- a/src/test/api.test.ts +++ b/src/test/api.test.ts @@ -1,12 +1,11 @@ /** - * @license * Copyright 2023 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/src/test/dv360.test.ts b/src/test/dv360.test.ts index 6e731d2..d6c4bc4 100644 --- a/src/test/dv360.test.ts +++ b/src/test/dv360.test.ts @@ -1,3 +1,18 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ import { Auth } from '../helpers/auth'; import { DV360, DV360_ENTITY_TYPE } from '../target-agents/dv360'; diff --git a/src/test/dynamic-column-headers.test.ts b/src/test/dynamic-column-headers.test.ts index 26dacd9..08d6481 100644 --- a/src/test/dynamic-column-headers.test.ts +++ b/src/test/dynamic-column-headers.test.ts @@ -1,12 +1,11 @@ /** - * @license * Copyright 2023 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/src/test/google-ads.test.ts b/src/test/google-ads.test.ts index f5c5ec5..4b8842f 100644 --- a/src/test/google-ads.test.ts +++ b/src/test/google-ads.test.ts @@ -1,3 +1,18 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ import { ApiHelper } from '../helpers/api'; import { Auth } from '../helpers/auth'; import { diff --git a/src/test/jpath.test.ts b/src/test/jpath.test.ts index f38622d..abae89a 100644 --- a/src/test/jpath.test.ts +++ b/src/test/jpath.test.ts @@ -1,12 +1,11 @@ /** - * @license * Copyright 2023 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, From 2dabe7edf7e1518e2953aa14b3fa4b6f1605c220 Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 21 Mar 2023 09:14:15 +0100 Subject: [PATCH 41/84] Updated README with ToC and improved 'Getting started' guide --- README.md | 73 ++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 59 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 17ae00a..17ad1f6 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,49 @@ +Copyright 2023 Google LLC + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +--> + +# If This Then Ad (IFTTA) [![build](https://img.shields.io/badge/build-passing-brightgreen?style=flat&logo=github)](https://github.com/google/if-this-then-ad) [![GitHub tag (latest SemVer)](https://img.shields.io/github/v/tag/google/if-this-then-ad?label=release&logo=github)](https://github.com/google/if-this-then-ad) [![GitHub last commit](https://img.shields.io/github/last-commit/google/if-this-then-ad)](https://github.com/google/if-this-then-ad/commits) -# If This Then Ad (IFTTA) +## Table of contents + +- [Overview](#overview) +- [Getting Started](#getting-started) +- [How it works](#how-it-works) +- [How to run](#how-to-run) +- [Dynamic Column Notation](#dynamic-column-notation) + - [Request Headers](#request-headers) + - [Query Parameters](#query-parameters) + - [API Result](#api-result) +- [Supported Target Agents](#supported-target-agents) + - [DV360](#dv360) + - [Google Ads](#google-ads) +- [Advanced use cases](#advanced-use-cases) + - [Custom Evaluators](#custom-evaluators) + - [Querying Multiple Sources](#querying-multiple-sources) + - [Custom Result Parser](#custom-result-parser) +- [Developer Guide](#developer-guide) + - [How to work with the code](#how-to-work-with-the-code) + - [Application Flow](#application-flow) + - [How to add a new Target Agent](#how-to-add-a-new-target-agent) +- [FAQ](#faq) + +## Overview IFTTA enables automatic management of marketing campaigns based on real world events. @@ -38,13 +66,30 @@ Why would you want to do this? * Show ads as targeted as possible to reach the right audience at the right time * Manage ad campaigns in response to real-time events like weather, pollen data or air quality! This can be challenging or even impossible (imagine manually switching hundreds of ad groups every day - not only time consuming but also highly error-prone) -## Prerequisites +## Getting started - A copy of the [Google Sheets Template](https://docs.google.com/spreadsheets/d/1EKcPGQ1Vr6LyyQYeYE0-T2gPzNhemVTxsvpSNC5arhE) - Google Cloud Project with DV360 API and Ads API enabled - Any JSON API to be used as data source - An account for activation (see [Supported Target Agents](#supported-target-agents) below) +1. Create a [Google Cloud](https://console.cloud.google.com) project or re-use an existing one + +1. Create an [OAuth Consent Screen](https://console.cloud.google.com/apis/credentials/consent) + - Follow the instructions in the setup wizard + +1. Enable the following APIs: + - [Display & Video 360](https://console.cloud.google.com/apis/library/displayvideo.googleapis.com) + - [Google Ads](https://console.cloud.google.com/apis/library/googleads.googleapis.com) + +1. Make a copy of the [IFTTA Template](https://docs.google.com/spreadsheets/d/1EKcPGQ1Vr6LyyQYeYE0-T2gPzNhemVTxsvpSNC5arhE) + +1. Choose a JSON API to be used as data source + +1. Set up an account for activation (see [Supported Target Agents](#supported-target-agents) below) + +1. Get creative with coming up with rules that suit your marketing needs ([guide](#how-it-works)) + ## How it works The tool works with "Rules" which describe which source to check how often and which target to manage. @@ -103,7 +148,7 @@ A rule consists of the following elements: ## How to run -You can trigger the tool either manually using the Sheets menu or schedule an Apps Script Trigger to do it automatically. +You can trigger the tool either manually using the "IFTTA" Sheets menu or schedule an Apps Script Trigger to call `fetch()`, `sync()` or `fetchAndSync()` automatically, depending on your requirements. ## Dynamic Column Notation From 5765ae5990d598669c8824d85caeb17d2aeabb39 Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 21 Mar 2023 09:18:16 +0100 Subject: [PATCH 42/84] Removed obsolete section from README --- README.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/README.md b/README.md index 17ad1f6..ae563f2 100644 --- a/README.md +++ b/README.md @@ -68,11 +68,6 @@ Why would you want to do this? ## Getting started -- A copy of the [Google Sheets Template](https://docs.google.com/spreadsheets/d/1EKcPGQ1Vr6LyyQYeYE0-T2gPzNhemVTxsvpSNC5arhE) -- Google Cloud Project with DV360 API and Ads API enabled -- Any JSON API to be used as data source -- An account for activation (see [Supported Target Agents](#supported-target-agents) below) - 1. Create a [Google Cloud](https://console.cloud.google.com) project or re-use an existing one 1. Create an [OAuth Consent Screen](https://console.cloud.google.com/apis/credentials/consent) From 7e72a88cecc16f354019e23e583564ca9feeb6f0 Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 21 Mar 2023 09:36:40 +0100 Subject: [PATCH 43/84] Added Disclaimer and GCP Project Number instructions --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index ae563f2..401100d 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ limitations under the License. [![build](https://img.shields.io/badge/build-passing-brightgreen?style=flat&logo=github)](https://github.com/google/if-this-then-ad) [![GitHub tag (latest SemVer)](https://img.shields.io/github/v/tag/google/if-this-then-ad?label=release&logo=github)](https://github.com/google/if-this-then-ad) [![GitHub last commit](https://img.shields.io/github/last-commit/google/if-this-then-ad)](https://github.com/google/if-this-then-ad/commits) +[![Code Style: Google](https://img.shields.io/badge/code%20style-google-blueviolet.svg)](https://github.com/google/gts) ## Table of contents @@ -79,6 +80,8 @@ Why would you want to do this? 1. Make a copy of the [IFTTA Template](https://docs.google.com/spreadsheets/d/1EKcPGQ1Vr6LyyQYeYE0-T2gPzNhemVTxsvpSNC5arhE) +1. Set your GCP Project Number at Extensions > Apps Script > Project Settings > Google Cloud Platform (GCP) Project + 1. Choose a JSON API to be used as data source 1. Set up an account for activation (see [Supported Target Agents](#supported-target-agents) below) @@ -420,3 +423,7 @@ Here's what you need to include a new Target Agent: While we recommend applying for a Developer Token for the integration to work "natively", it is also possible to separate the fetching and activation part so that you only query the API with IFTTA to then read and process the results using an Ads Script in your Ads account. For more information please refer to the [Google Ads Scripts Extension Documentation](src/external/ads-script/README.md) + +## Disclaimer + +This is not an officially supported Google product. From 8b7728b153eb184025154b30efa43fda418b1e80 Mon Sep 17 00:00:00 2001 From: paranerd Date: Fri, 24 Mar 2023 10:48:30 +0100 Subject: [PATCH 44/84] Updated DV360 API version from v1 to v2 because of deprecation --- src/target-agents/dv360.ts | 7 +------ src/test/dv360.test.ts | 2 +- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/src/target-agents/dv360.ts b/src/target-agents/dv360.ts index 7e4eda1..cba52e6 100644 --- a/src/target-agents/dv360.ts +++ b/src/target-agents/dv360.ts @@ -53,9 +53,8 @@ export class DV360 extends TargetAgent { /** * DV360 Write API Endpoint Prefix - * See more: https://developers.google.com/display-video/api/reference/rest */ - this.baseUrl = 'https://displayvideo.googleapis.com/v1'; + this.baseUrl = 'https://displayvideo.googleapis.com/v2'; } /** @@ -143,8 +142,6 @@ export class DV360 extends TargetAgent { /** * Change DV360 entity status (Active/Paused) for the specified ID. - * See more: https://developers.google.com/display-video/api/reference/rest/v1/advertisers.lineItems - * See more: https://developers.google.com/display-video/api/reference/rest/v1/advertisers.insertionOrders * * @param {string} advertiserId DV360 Advertiser ID * @param {string} entityId DV360 Line Item/Insertion Order ID @@ -213,8 +210,6 @@ export class DV360 extends TargetAgent { /** * Get DV360 entity for the specified ID. - * See more: https://developers.google.com/display-video/api/reference/rest/v1/advertisers.lineItems - * See more: https://developers.google.com/display-video/api/reference/rest/v1/advertisers.insertionOrders * * @param {string} advertiserId DV360 Advertiser ID * @param {string} entityId DV360 Line Item/Insertion Order ID diff --git a/src/test/dv360.test.ts b/src/test/dv360.test.ts index d6c4bc4..51fd96e 100644 --- a/src/test/dv360.test.ts +++ b/src/test/dv360.test.ts @@ -80,7 +80,7 @@ describe('DV360 Target Agent', () => { expect(isLIActiveSpy).toHaveBeenCalledWith('1', '1234'); expect(getEntitySpy).toHaveBeenCalledWith('1', '1234', 'lineItems'); expect(fetchUrlSpy).toHaveBeenCalledWith( - 'https://displayvideo.googleapis.com/v1/advertisers/1/lineItems/1234' + 'https://displayvideo.googleapis.com/v2/advertisers/1/lineItems/1234' ); }); }); From d6794128a4eb8837e895abcd2519d801d4930e96 Mon Sep 17 00:00:00 2001 From: paranerd Date: Fri, 24 Mar 2023 10:50:06 +0100 Subject: [PATCH 45/84] Updated README overview section --- README.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 401100d..a98bd6f 100644 --- a/README.md +++ b/README.md @@ -60,12 +60,11 @@ You can get very creative when using this tool and it's capabilities are only li Why would you want to do this? -- Control ads to reach their audience at the right time under the right circumstances -- Automate campaign management in response to real-time events -- Personalize ads and create a "WOW" effect for the end user side +- Control ads to reach the right audiences at the right time under the right circumstances -* Show ads as targeted as possible to reach the right audience at the right time -* Manage ad campaigns in response to real-time events like weather, pollen data or air quality! This can be challenging or even impossible (imagine manually switching hundreds of ad groups every day - not only time consuming but also highly error-prone) +- Automate campaign management in response to real-time events like weather, pollen data, air quality and more! This can be challenging or even impossible (imagine manually switching hundreds of ad groups every day - not only time consuming but also highly error-prone) + +- Personalize ads and create a "WOW" effect for the end user ## Getting started From 8d1e96b17e2b018e24b9bd003382e3469b097f05 Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 28 Mar 2023 09:24:26 +0200 Subject: [PATCH 46/84] Fixed LICENSE format --- LICENSE | 403 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 202 insertions(+), 201 deletions(-) diff --git a/LICENSE b/LICENSE index cd482d8..d645695 100644 --- a/LICENSE +++ b/LICENSE @@ -1,201 +1,202 @@ -Apache License -Version 2.0, January 2004 -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, -and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by -the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all -other entities that control, are controlled by, or are under common -control with that entity. For the purposes of this definition, -"control" means (i) the power, direct or indirect, to cause the -direction or management of such entity, whether by contract or -otherwise, or (ii) ownership of fifty percent (50%) or more of the -outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity -exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, -including but not limited to software source code, documentation -source, and configuration files. - -"Object" form shall mean any form resulting from mechanical -transformation or translation of a Source form, including but -not limited to compiled object code, generated documentation, -and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or -Object form, made available under the License, as indicated by a -copyright notice that is included in or attached to the work -(an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object -form, that is based on (or derived from) the Work and for which the -editorial revisions, annotations, elaborations, or other modifications -represent, as a whole, an original work of authorship. For the purposes -of this License, Derivative Works shall not include works that remain -separable from, or merely link (or bind by name) to the interfaces of, -the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including -the original version of the Work and any modifications or additions -to that Work or Derivative Works thereof, that is intentionally -submitted to Licensor for inclusion in the Work by the copyright owner -or by an individual or Legal Entity authorized to submit on behalf of -the copyright owner. For the purposes of this definition, "submitted" -means any form of electronic, verbal, or written communication sent -to the Licensor or its representatives, including but not limited to -communication on electronic mailing lists, source code control systems, -and issue tracking systems that are managed by, or on behalf of, the -Licensor for the purpose of discussing and improving the Work, but -excluding communication that is conspicuously marked or otherwise -designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity -on behalf of whom a Contribution has been received by Licensor and -subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of -this License, each Contributor hereby grants to You a perpetual, -worldwide, non-exclusive, no-charge, royalty-free, irrevocable -copyright license to reproduce, prepare Derivative Works of, -publicly display, publicly perform, sublicense, and distribute the -Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of -this License, each Contributor hereby grants to You a perpetual, -worldwide, non-exclusive, no-charge, royalty-free, irrevocable -(except as stated in this section) patent license to make, have made, -use, offer to sell, sell, import, and otherwise transfer the Work, -where such license applies only to those patent claims licensable -by such Contributor that are necessarily infringed by their -Contribution(s) alone or by combination of their Contribution(s) -with the Work to which such Contribution(s) was submitted. If You -institute patent litigation against any entity (including a -cross-claim or counterclaim in a lawsuit) alleging that the Work -or a Contribution incorporated within the Work constitutes direct -or contributory patent infringement, then any patent licenses -granted to You under this License for that Work shall terminate -as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the -Work or Derivative Works thereof in any medium, with or without -modifications, and in Source or Object form, provided that You -meet the following conditions: - -(a) You must give any other recipients of the Work or -Derivative Works a copy of this License; and - -(b) You must cause any modified files to carry prominent notices -stating that You changed the files; and - -(c) You must retain, in the Source form of any Derivative Works -that You distribute, all copyright, patent, trademark, and -attribution notices from the Source form of the Work, -excluding those notices that do not pertain to any part of -the Derivative Works; and - -(d) If the Work includes a "NOTICE" text file as part of its -distribution, then any Derivative Works that You distribute must -include a readable copy of the attribution notices contained -within such NOTICE file, excluding those notices that do not -pertain to any part of the Derivative Works, in at least one -of the following places: within a NOTICE text file distributed -as part of the Derivative Works; within the Source form or -documentation, if provided along with the Derivative Works; or, -within a display generated by the Derivative Works, if and -wherever such third-party notices normally appear. The contents -of the NOTICE file are for informational purposes only and -do not modify the License. You may add Your own attribution -notices within Derivative Works that You distribute, alongside -or as an addendum to the NOTICE text from the Work, provided -that such additional attribution notices cannot be construed -as modifying the License. - -You may add Your own copyright statement to Your modifications and -may provide additional or different license terms and conditions -for use, reproduction, or distribution of Your modifications, or -for any such Derivative Works as a whole, provided Your use, -reproduction, and distribution of the Work otherwise complies with -the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, -any Contribution intentionally submitted for inclusion in the Work -by You to the Licensor shall be under the terms and conditions of -this License, without any additional terms or conditions. -Notwithstanding the above, nothing herein shall supersede or modify -the terms of any separate license agreement you may have executed -with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade -names, trademarks, service marks, or product names of the Licensor, -except as required for reasonable and customary use in describing the -origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or -agreed to in writing, Licensor provides the Work (and each -Contributor provides its Contributions) on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -implied, including, without limitation, any warranties or conditions -of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A -PARTICULAR PURPOSE. You are solely responsible for determining the -appropriateness of using or redistributing the Work and assume any -risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, -whether in tort (including negligence), contract, or otherwise, -unless required by applicable law (such as deliberate and grossly -negligent acts) or agreed to in writing, shall any Contributor be -liable to You for damages, including any direct, indirect, special, -incidental, or consequential damages of any character arising as a -result of this License or out of the use or inability to use the -Work (including but not limited to damages for loss of goodwill, -work stoppage, computer failure or malfunction, or any and all -other commercial damages or losses), even if such Contributor -has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing -the Work or Derivative Works thereof, You may choose to offer, -and charge a fee for, acceptance of support, warranty, indemnity, -or other liability obligations and/or rights consistent with this -License. However, in accepting such obligations, You may act only -on Your own behalf and on Your sole responsibility, not on behalf -of any other Contributor, and only if You agree to indemnify, -defend, and hold each Contributor harmless for any liability -incurred by, or claims asserted against, such Contributor by reason -of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - -To apply the Apache License to your work, attach the following -boilerplate notice, with the fields enclosed by brackets "[]" -replaced with your own identifying information. (Don't include -the brackets!) The text should be enclosed in the appropriate -comment syntax for the file format. We also recommend that a -file or class name and description of purpose be included on the -same "printed page" as the copyright notice for easier -identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. From a42b5ddf98c0d0e5f1408b19a2277b6d45ae2116 Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 28 Mar 2023 09:24:54 +0200 Subject: [PATCH 47/84] Added license header format for bash scripts --- license-config.json | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/license-config.json b/license-config.json index 2fcc868..a07c047 100644 --- a/license-config.json +++ b/license-config.json @@ -6,10 +6,10 @@ ".gitignore", ".prettierignore", "*.txt", + ".github", "CONTRIBUTING", "build", - "dist", - "test" + "dist" ], "license": "license-header.txt", "licenseFormats": { @@ -23,6 +23,11 @@ "html|md": { "prepend": "" + }, + "sh|^pre-commit": { + "eachLine": { + "prepend": "# " + } } }, "trailingWhitespace": "TRIM" From 6e9887438117c22c4d53df26651e75fdd131838c Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 28 Mar 2023 09:25:43 +0200 Subject: [PATCH 48/84] Use rollup directly with TypeScript --- package-lock.json | 268 +++++++++++++++++++--------------------------- package.json | 21 ++-- rollup.config.mjs | 25 +---- tsconfig.json | 7 +- 4 files changed, 132 insertions(+), 189 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6c60df3..2a3532c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,13 +9,11 @@ "version": "0.0.1", "dependencies": { "@google/clasp": "^2.4.2", - "@rollup/plugin-node-resolve": "^15.0.1", "@types/google-apps-script": "^1.0.59", "@types/google-apps-script-oauth2": "^38.0.0", "@types/jest": "^29.5.0", "@typescript-eslint/eslint-plugin": "^5.56.0", "eslint": "^8.36.0", - "eslint-config-google": "^0.14.0", "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^4.2.1", "gts": "^3.1.1", @@ -27,8 +25,12 @@ "rollup": "^3.20.0", "rollup-plugin-cleanup": "^3.2.1", "rollup-plugin-license": "^3.0.1", + "rollup-plugin-typescript2": "^0.34.1", "ts-jest": "^29.0.5", "typescript": "^4.9.5" + }, + "engines": { + "node": ">=14" } }, "node_modules/@ampproject/remapping": { @@ -1173,51 +1175,6 @@ "node": ">= 8" } }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.1.tgz", - "integrity": "sha512-ReY88T7JhJjeRVbfCyNj+NXAG3IIsVMsX9b5/9jC98dRP8/yxlZdz7mHZbHk5zHr24wZZICS5AcXsFZAXYUQEg==", - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "@types/resolve": "1.20.2", - "deepmerge": "^4.2.2", - "is-builtin-module": "^3.2.0", - "is-module": "^1.0.0", - "resolve": "^1.22.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.78.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, "node_modules/@sinclair/typebox": { "version": "0.25.24", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", @@ -1309,11 +1266,6 @@ "@types/responselike": "^1.0.0" } }, - "node_modules/@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" - }, "node_modules/@types/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", @@ -1417,11 +1369,6 @@ "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==" }, - "node_modules/@types/resolve": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==" - }, "node_modules/@types/responselike": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", @@ -2559,17 +2506,6 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/cacheable-lookup": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", @@ -2881,6 +2817,11 @@ "resolved": "https://registry.npmjs.org/commenting/-/commenting-1.1.0.tgz", "integrity": "sha512-YeNK4tavZwtH7jEgK1ZINXzLKm6DZdEMfsaaieOsCAN0S8vsY7UeuO3Q7d/M018EFgE+IeUAuBOKkFccBZsUZA==" }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -3223,17 +3164,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-config-google": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz", - "integrity": "sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==", - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "eslint": ">=5.16.0" - } - }, "node_modules/eslint-config-prettier": { "version": "8.8.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", @@ -3648,6 +3578,22 @@ "node": ">=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==", + "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": "6.3.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", @@ -4870,20 +4816,6 @@ "node": ">=8" } }, - "node_modules/is-builtin-module": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", - "dependencies": { - "builtin-modules": "^3.3.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-core-module": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", @@ -4958,11 +4890,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -7779,6 +7706,48 @@ "node": ">=12" } }, + "node_modules/rollup-plugin-typescript2": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.34.1.tgz", + "integrity": "sha512-P4cHLtGikESmqi1CA+tdMDUv8WbQV48mzPYt77TSTOPJpERyZ9TXdDgjSDix8Fkqce6soYz3+fa4lrC93IEkcw==", + "dependencies": { + "@rollup/pluginutils": "^4.1.2", + "find-cache-dir": "^3.3.2", + "fs-extra": "^10.0.0", + "semver": "^7.3.7", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "rollup": ">=1.26.3", + "typescript": ">=2.4.0" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/rollup-pluginutils": { "version": "2.8.2", "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", @@ -9644,29 +9613,6 @@ "fastq": "^1.6.0" } }, - "@rollup/plugin-node-resolve": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.1.tgz", - "integrity": "sha512-ReY88T7JhJjeRVbfCyNj+NXAG3IIsVMsX9b5/9jC98dRP8/yxlZdz7mHZbHk5zHr24wZZICS5AcXsFZAXYUQEg==", - "requires": { - "@rollup/pluginutils": "^5.0.1", - "@types/resolve": "1.20.2", - "deepmerge": "^4.2.2", - "is-builtin-module": "^3.2.0", - "is-module": "^1.0.0", - "resolve": "^1.22.1" - } - }, - "@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", - "requires": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - } - }, "@sinclair/typebox": { "version": "0.25.24", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", @@ -9749,11 +9695,6 @@ "@types/responselike": "^1.0.0" } }, - "@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" - }, "@types/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", @@ -9857,11 +9798,6 @@ "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==" }, - "@types/resolve": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==" - }, "@types/responselike": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", @@ -10578,11 +10514,6 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, - "builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==" - }, "cacheable-lookup": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", @@ -10785,6 +10716,11 @@ "resolved": "https://registry.npmjs.org/commenting/-/commenting-1.1.0.tgz", "integrity": "sha512-YeNK4tavZwtH7jEgK1ZINXzLKm6DZdEMfsaaieOsCAN0S8vsY7UeuO3Q7d/M018EFgE+IeUAuBOKkFccBZsUZA==" }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -11079,12 +11015,6 @@ } } }, - "eslint-config-google": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz", - "integrity": "sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==", - "requires": {} - }, "eslint-config-prettier": { "version": "8.8.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", @@ -11333,6 +11263,16 @@ "to-regex-range": "^5.0.1" } }, + "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==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, "find-up": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", @@ -12201,14 +12141,6 @@ "binary-extensions": "^2.0.0" } }, - "is-builtin-module": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", - "requires": { - "builtin-modules": "^3.3.0" - } - }, "is-core-module": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", @@ -12250,11 +12182,6 @@ "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==" }, - "is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" - }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -14258,6 +14185,37 @@ } } }, + "rollup-plugin-typescript2": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.34.1.tgz", + "integrity": "sha512-P4cHLtGikESmqi1CA+tdMDUv8WbQV48mzPYt77TSTOPJpERyZ9TXdDgjSDix8Fkqce6soYz3+fa4lrC93IEkcw==", + "requires": { + "@rollup/pluginutils": "^4.1.2", + "find-cache-dir": "^3.3.2", + "fs-extra": "^10.0.0", + "semver": "^7.3.7", + "tslib": "^2.4.0" + }, + "dependencies": { + "@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "requires": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, "rollup-pluginutils": { "version": "2.8.2", "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", diff --git a/package.json b/package.json index 40c60a1..853955f 100644 --- a/package.json +++ b/package.json @@ -4,26 +4,25 @@ "description": "", "main": "src/index.ts", "scripts": { - "clean": "npx rimraf build dist", + "clean": "rimraf build dist", "build:compile": "tsc", "build:bundle": "rollup --no-treeshake -c rollup.config.mjs", - "build": "npm run clean && npm run build:compile && npm run build:bundle", - "test": "jest src/ --passWithNoTests", - "deploy": "npm run license:add && npm run lint && npm run test && npm run build && ncp appsscript.json dist/appsscript.json && ncp .clasp-dev.json .clasp.json && clasp push", - "deploy-prod": "npm run license:add && npm run lint && npm run test && npm run build && ncp appsscript.json dist/appsscript.json && ncp .clasp-prod.json .clasp.json && clasp push", - "lint": "npm run license:check && eslint --fix src/", + "build": "npm run clean && npm run bundle", + "test": "jest test/ --passWithNoTests", + "deploy": "npm run lint && npm run test && npm run build && ncp appsscript.json dist/appsscript.json && ncp .clasp-dev.json .clasp.json && clasp push", + "deploy-prod": "npm run lint && npm run test && npm run build && ncp appsscript.json dist/appsscript.json && ncp .clasp-prod.json .clasp.json && clasp push", + "lint": "npm run license:add && eslint --fix src/", "license:check": "license-check-and-add check -f license-config.json", - "license:add": "license-check-and-add add -f license-config.json" + "license:add": "license-check-and-add add -f license-config.json", + "bundle": "rollup --no-treeshake -c rollup.config.mjs" }, "dependencies": { "@google/clasp": "^2.4.2", - "@rollup/plugin-node-resolve": "^15.0.1", "@types/google-apps-script": "^1.0.59", "@types/google-apps-script-oauth2": "^38.0.0", "@types/jest": "^29.5.0", "@typescript-eslint/eslint-plugin": "^5.56.0", "eslint": "^8.36.0", - "eslint-config-google": "^0.14.0", "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^4.2.1", "gts": "^3.1.1", @@ -35,7 +34,11 @@ "rollup": "^3.20.0", "rollup-plugin-cleanup": "^3.2.1", "rollup-plugin-license": "^3.0.1", + "rollup-plugin-typescript2": "^0.34.1", "ts-jest": "^29.0.5", "typescript": "^4.9.5" + }, + "engines": { + "node": ">=14" } } diff --git a/rollup.config.mjs b/rollup.config.mjs index d1fb9bd..56b8a63 100644 --- a/rollup.config.mjs +++ b/rollup.config.mjs @@ -13,37 +13,19 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { nodeResolve } from '@rollup/plugin-node-resolve'; +import typescript from 'rollup-plugin-typescript2'; import cleanup from 'rollup-plugin-cleanup'; import license from 'rollup-plugin-license'; import { fileURLToPath } from 'url'; -const extensions = ['.js']; - -const preventTreeShakingPlugin = () => { - return { - name: 'no-treeshaking', - resolveId(id, importer) { - if (!importer) { - // no treeshaking entry points, as we're not exporting anything - // in Apps Script files - return { id, moduleSideEffects: 'no-treeshake' }; - } - return null; - }, - }; -}; - export default { - input: './build/src/index.js', + input: 'src/index.ts', output: { dir: 'dist', format: 'esm', }, plugins: [ - preventTreeShakingPlugin(), - nodeResolve({ extensions }), - cleanup({ comments: 'none' }), + cleanup({ comments: 'none', extensions: ['.ts'] }), license({ banner: { content: { @@ -51,6 +33,7 @@ export default { }, }, }), + typescript(), ], context: 'this', }; diff --git a/tsconfig.json b/tsconfig.json index a13e7e0..86b027a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,10 +1,10 @@ { "compilerOptions": { "target": "es2020", - "module": "ES2020", + "module": "es2020", "lib": ["es2020"], "moduleResolution": "node", - "outDir": "build", + "outDir": "dist", "rootDir": ".", "strict": true, "esModuleInterop": true, @@ -14,6 +14,5 @@ "allowUnreachableCode": false, "allowUnusedLabels": false }, - "include": ["src/**/*.ts", "rollup.config.mjs"], - "exclude": ["test/**/*.*"] + "include": ["src/**/*", "test/**/*", "rollup.config.mjs"] } From a6089bf65cdb7f40037ba5c65b605781d21471b9 Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 28 Mar 2023 09:26:16 +0200 Subject: [PATCH 49/84] Moved tests out of src into test --- {src/test => test/helpers}/api.test.ts | 0 {src/test => test/helpers}/dynamic-column-headers.test.ts | 0 {src/test => test/helpers}/jpath.test.ts | 0 {src/test => test/target-agents}/dv360.test.ts | 0 {src/test => test/target-agents}/google-ads.test.ts | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename {src/test => test/helpers}/api.test.ts (100%) rename {src/test => test/helpers}/dynamic-column-headers.test.ts (100%) rename {src/test => test/helpers}/jpath.test.ts (100%) rename {src/test => test/target-agents}/dv360.test.ts (100%) rename {src/test => test/target-agents}/google-ads.test.ts (100%) diff --git a/src/test/api.test.ts b/test/helpers/api.test.ts similarity index 100% rename from src/test/api.test.ts rename to test/helpers/api.test.ts diff --git a/src/test/dynamic-column-headers.test.ts b/test/helpers/dynamic-column-headers.test.ts similarity index 100% rename from src/test/dynamic-column-headers.test.ts rename to test/helpers/dynamic-column-headers.test.ts diff --git a/src/test/jpath.test.ts b/test/helpers/jpath.test.ts similarity index 100% rename from src/test/jpath.test.ts rename to test/helpers/jpath.test.ts diff --git a/src/test/dv360.test.ts b/test/target-agents/dv360.test.ts similarity index 100% rename from src/test/dv360.test.ts rename to test/target-agents/dv360.test.ts diff --git a/src/test/google-ads.test.ts b/test/target-agents/google-ads.test.ts similarity index 100% rename from src/test/google-ads.test.ts rename to test/target-agents/google-ads.test.ts From 05c0feac3cc1bcd4dfe51c74d8b3e0f7aa46041d Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 28 Mar 2023 09:27:22 +0200 Subject: [PATCH 50/84] Fixed package name, version and description --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 853955f..98713cc 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { - "name": "event-based-marketing", - "version": "0.0.1", - "description": "", + "name": "if-this-then-ad", + "version": "2.0.0", + "description": "Automatic management of marketing campaigns based on real world events", "main": "src/index.ts", "scripts": { "clean": "rimraf build dist", From a7716082159e8eb35ff99d2582069afbd9d98151 Mon Sep 17 00:00:00 2001 From: paranerd Date: Thu, 13 Apr 2023 12:18:04 +0200 Subject: [PATCH 51/84] Added optional login-customer-id parameter to Ads Agent --- README.md | 1 + src/target-agents/google-ads.ts | 15 ++++++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index a98bd6f..a8f66e2 100644 --- a/README.md +++ b/README.md @@ -217,6 +217,7 @@ Given the above JSON source we could add the following to our Sheet: **Optional parameters** +- `target:loginCustomerId` - `target:serviceAccount` ## Advanced use cases diff --git a/src/target-agents/google-ads.ts b/src/target-agents/google-ads.ts index d0a52d1..5bb3e39 100644 --- a/src/target-agents/google-ads.ts +++ b/src/target-agents/google-ads.ts @@ -32,6 +32,7 @@ export enum GOOGLE_ADS_ENTITY_STATUS { interface Parameters { customerId: string; developerToken: string; + loginCustomerId?: string; serviceAccount?: ServiceAccount; } @@ -43,7 +44,7 @@ interface Entity { export class GoogleAds extends TargetAgent { static friendlyName = 'Google Ads'; authToken?: string; - developerToken?: string; + parameters: Parameters = {} as Parameters; baseUrl: string; requiredParameters: Array = [ 'customerId', @@ -76,7 +77,7 @@ export class GoogleAds extends TargetAgent { const auth = new Auth(params.serviceAccount ?? undefined); this.authToken = auth.getAuthToken(); - this.developerToken = params.developerToken; + this.parameters = params; const status = evaluation ? GOOGLE_ADS_ENTITY_STATUS.ENABLED @@ -123,7 +124,7 @@ export class GoogleAds extends TargetAgent { const auth = new Auth(params.serviceAccount ?? undefined); this.authToken = auth.getAuthToken(); - this.developerToken = params.developerToken; + this.parameters = params; const expectedStatus = evaluation ? GOOGLE_ADS_ENTITY_STATUS.ENABLED @@ -204,12 +205,16 @@ export class GoogleAds extends TargetAgent { payload: Object, forceCache = false ) { - const headers = { + const headers: GoogleAppsScript.URL_Fetch.HttpHeaders = { Authorization: `Bearer ${this.authToken}`, Accept: '*/*', - 'developer-token': this.developerToken ?? '', + 'developer-token': this.parameters.developerToken ?? '', }; + if (this.parameters.loginCustomerId) { + headers['login-customer-id'] = this.parameters.loginCustomerId; + } + const url = `${this.baseUrl}/${path}`; return this.callApi( url, From 3fbb1d8a83ce80ba5b890728098e6fde4ce98259 Mon Sep 17 00:00:00 2001 From: paranerd Date: Thu, 13 Apr 2023 14:42:30 +0200 Subject: [PATCH 52/84] Updated relative paths --- test/helpers/api.test.ts | 2 +- test/helpers/dynamic-column-headers.test.ts | 2 +- test/helpers/jpath.test.ts | 2 +- test/target-agents/dv360.test.ts | 4 ++-- test/target-agents/google-ads.test.ts | 6 +++--- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/test/helpers/api.test.ts b/test/helpers/api.test.ts index ab78b71..3823a93 100644 --- a/test/helpers/api.test.ts +++ b/test/helpers/api.test.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { ApiHelper } from '../helpers/api'; +import { ApiHelper } from '../../src/helpers/api'; test('Convert object into correct URL query string', () => { const params = { diff --git a/test/helpers/dynamic-column-headers.test.ts b/test/helpers/dynamic-column-headers.test.ts index 08d6481..590e36b 100644 --- a/test/helpers/dynamic-column-headers.test.ts +++ b/test/helpers/dynamic-column-headers.test.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { DynamicColumnHeaders } from '../helpers/dynamic-column-headers'; +import { DynamicColumnHeaders } from '../../src/helpers/dynamic-column-headers'; const headers = [ 'One', diff --git a/test/helpers/jpath.test.ts b/test/helpers/jpath.test.ts index abae89a..575964d 100644 --- a/test/helpers/jpath.test.ts +++ b/test/helpers/jpath.test.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { JPath } from '../helpers/jpath'; +import { JPath } from '../../src/helpers/jpath'; test('Set value in correct location in empty object', () => { const path = 'header.api-key'; diff --git a/test/target-agents/dv360.test.ts b/test/target-agents/dv360.test.ts index 51fd96e..4d84105 100644 --- a/test/target-agents/dv360.test.ts +++ b/test/target-agents/dv360.test.ts @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { Auth } from '../helpers/auth'; -import { DV360, DV360_ENTITY_TYPE } from '../target-agents/dv360'; +import { Auth } from '../../src/helpers/auth'; +import { DV360, DV360_ENTITY_TYPE } from '../../src/target-agents/dv360'; describe('DV360 Target Agent', () => { const params = { diff --git a/test/target-agents/google-ads.test.ts b/test/target-agents/google-ads.test.ts index 4b8842f..8afb3da 100644 --- a/test/target-agents/google-ads.test.ts +++ b/test/target-agents/google-ads.test.ts @@ -13,13 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { ApiHelper } from '../helpers/api'; -import { Auth } from '../helpers/auth'; +import { ApiHelper } from '../../src/helpers/api'; +import { Auth } from '../../src/helpers/auth'; import { GoogleAds, GOOGLE_ADS_ENTITY_STATUS, GOOGLE_ADS_SELECTOR_TYPE, -} from '../target-agents/google-ads'; +} from '../../src/target-agents/google-ads'; describe('Google Ads Target Agent', () => { const params = { From b653269672c26f2cef6a5740b4e87ed51c1eed8c Mon Sep 17 00:00:00 2001 From: paranerd Date: Thu, 13 Apr 2023 14:44:01 +0200 Subject: [PATCH 53/84] Added setup function to enable headless runs --- src/helpers/sheets.ts | 15 ++++++++++++++- src/index.ts | 11 +++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/helpers/sheets.ts b/src/helpers/sheets.ts index 9b5e9cf..4ce5ecc 100644 --- a/src/helpers/sheets.ts +++ b/src/helpers/sheets.ts @@ -40,8 +40,21 @@ export class SheetsService { `Unable to identify spreadsheet with provided ID: ${spreadsheetId}!` ); } - } else { + } else if (SpreadsheetApp.getActiveSpreadsheet() !== null) { spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); + } else if ( + PropertiesService.getScriptProperties() + .getKeys() + .includes('spreadsheetId') + ) { + spreadsheet = SpreadsheetApp.openById( + PropertiesService.getScriptProperties().getProperty('spreadsheetId') ?? + '' + ); + } + + if (!spreadsheet) { + throw new Error('Unable to connect to spreadsheet'); } /** @private @const {?SpreadsheetApp.Spreadsheet} */ diff --git a/src/index.ts b/src/index.ts index 9ba36d6..3116a33 100644 --- a/src/index.ts +++ b/src/index.ts @@ -41,6 +41,7 @@ const targetAgents: Record = {}; function onOpen() { const ui = SpreadsheetApp.getUi(); ui.createMenu('IFTTA') + .addItem('Setup', 'setup') .addItem('Fetch', 'fetch') .addItem('Sync', 'sync') .addItem('FetchAndSync', 'fetchAndSync') @@ -48,6 +49,16 @@ function onOpen() { .addToUi(); } +/** + * Set spreadsheetId to Script Properties. + * This is required because when running 'headless' (e.g. via a trigger), + * the SpreadsheetApp.getActiveSpreadsheet() method returns null. + */ +function setup() { + const ssId = SpreadsheetApp.getActiveSpreadsheet().getId(); + PropertiesService.getScriptProperties().setProperty('spreadsheetId', ssId); +} + /** * Call main() with mode 'FETCH'. */ From 2c8670dd9656f22b5211704c417285d47ba35e27 Mon Sep 17 00:00:00 2001 From: paranerd Date: Thu, 13 Apr 2023 14:44:46 +0200 Subject: [PATCH 54/84] Updated README to include setup --- README.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a8f66e2..928f449 100644 --- a/README.md +++ b/README.md @@ -145,7 +145,15 @@ A rule consists of the following elements: ## How to run -You can trigger the tool either manually using the "IFTTA" Sheets menu or schedule an Apps Script Trigger to call `fetch()`, `sync()` or `fetchAndSync()` automatically, depending on your requirements. +### Manually +You can run the tool manually using the "IFTTA" Sheets menu + +### Automatically (via Trigger) +To run IFTTA automatically in the background, you need to first run the Setup from the "IFTTA" Sheets menu: + +Setup + +You would then set up an Apps Script Trigger to call `fetch()`, `sync()` or `fetchAndSync()` automatically, depending on your requirements. ## Dynamic Column Notation From 005c22be2bc6bf42d7184c014402725e9f659c34 Mon Sep 17 00:00:00 2001 From: paranerd Date: Thu, 13 Apr 2023 14:48:47 +0200 Subject: [PATCH 55/84] Added screenshot to show setup menu --- img/setup.png | Bin 0 -> 25637 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 img/setup.png diff --git a/img/setup.png b/img/setup.png new file mode 100644 index 0000000000000000000000000000000000000000..50a2e430e3d2fa442f513b1ed99782a3c7f8ab31 GIT binary patch literal 25637 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 z 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 Date: Thu, 13 Apr 2023 14:49:51 +0200 Subject: [PATCH 56/84] Commit bundle for easier updates of existing deployments --- .gitignore | 1 - dist/index.js | 793 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 793 insertions(+), 1 deletion(-) create mode 100644 dist/index.js diff --git a/.gitignore b/.gitignore index 3ab1411..7727c85 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ node_modules -dist/ build/ .DS_Store .clasp*.json diff --git a/dist/index.js b/dist/index.js new file mode 100644 index 0000000..5e9deb6 --- /dev/null +++ b/dist/index.js @@ -0,0 +1,793 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +const GLOBALCTX = this; +const CONFIG = { + spreadsheetId: null, + sourceNamespace: 'source', + targetNamespace: 'target', + resultNamespace: 'result', + rules: { + sheetName: 'Rules', + startRow: 1, + cols: { + ruleName: 0, + lastUpdate: 1, + status: 2, + activationFormula: 3, + updateInterval: 4, + targetAgent: 5, + targetId: 6, + targetIdType: 7, + }, + }, +}; + +class ApiHelper { + constructor() { + this.cache = {}; + } + callApi(url, headers, queryParams, body, method = 'get', contentType = 'application/json', forceCache = false) { + if (queryParams) { + url = `${url}${this.objectToUrlQuery(url, queryParams)}`; + } + const params = { + headers: headers ?? {}, + method: method, + muteHttpExceptions: true, + contentType: contentType, + }; + if (body) { + if (contentType === 'application/json') { + body = JSON.stringify(body); + } + params.payload = body; + } + const cacheKey = `${url}-${JSON.stringify(params)}`; + if (cacheKey in this.cache && this.cache[cacheKey]) { + console.log('Returning cached result', JSON.stringify(this.cache[cacheKey])); + return this.cache[cacheKey]; + } + const resRaw = UrlFetchApp.fetch(url, params); + if (200 !== resRaw.getResponseCode() && 204 !== resRaw.getResponseCode()) { + Logger.log('HTTP code: ' + resRaw.getResponseCode()); + Logger.log('API error: ' + resRaw.getContentText()); + Logger.log('URL: ' + url); + Logger.log('Parameters: ' + JSON.stringify(params)); + throw new Error(resRaw.getContentText()); + } + const res = resRaw.getContentText() + ? JSON.parse(resRaw.getContentText()) + : {}; + if (method.toLowerCase() === 'get' || forceCache) { + this.cache[cacheKey] = res; + } + return res; + } + objectToUrlQuery(url, obj) { + if (!obj || (obj && Object.keys(obj).length === 0)) + return ''; + const prefix = url.includes('?') ? '&' : '?'; + return prefix.concat(Object.keys(obj) + .map(key => { + if (obj[key] instanceof Array) { + const joined = obj[key].join(`&${key}=`); + return joined.length ? `${key}=${joined}` : null; + } + return `${key}=${obj[key]}`; + }) + .filter(param => param) + .join('&')); + } +} + +class JPath { + static getValue(path, json) { + let tmpJson = json; + const val = null; + for (const part of path.split('.')) { + if (part.startsWith('!')) { + return this.getAgregatedValue(part.substring(1), tmpJson); + } + let tmpVal; + const intVal = parseInt(part); + if (intVal && intVal in tmpJson) { + tmpVal = tmpJson[intVal]; + } + else if (Object.prototype.hasOwnProperty.call(tmpJson, part)) { + tmpVal = tmpJson[part]; + } + else { + break; + } + const typeOf = typeof tmpVal; + if ('string' === typeOf || 'number' === typeOf) { + return tmpVal; + } + else { + tmpJson = tmpVal; + } + } + return val; + } + static getAgregatedValue(aggFunction, json) { + switch (aggFunction.toLowerCase()) { + case 'min': + return Math.min(...Object.values(json)); + case 'max': + return Math.max(...Object.values(json)); + default: + throw `Aggregation function "${aggFunction}" is not supported`; + } + } + static setValue(obj, pathString, value) { + let curr = obj; + const path = pathString.split('.'); + path.forEach((key, index) => { + if (index + 1 === path.length) { + curr[key] = value; + } + else { + if (!(key in curr)) { + curr[key] = {}; + } + curr = curr[key]; + } + }); + return obj; + } +} + +class DynamicColumnHeaders { + constructor(headers) { + this.headers = headers; + } + getMappedValues(row, namespace = undefined, includeGroup = true) { + let res = {}; + row.forEach((cell, index) => { + const exp = new RegExp(`^${namespace ?? '\\w+'}(?:\\.\\d)*${DynamicColumnHeaders.namespaceSeparator}`); + if (exp.test(this.headers[index])) { + const prefixAndPath = this.headers[index].split(DynamicColumnHeaders.namespaceSeparator); + const namespaceAndGroupArr = prefixAndPath[0].split('.'); + const group = namespaceAndGroupArr[1] ?? '0'; + const path = `${namespace ? '' : `${namespaceAndGroupArr[0]}.`}${includeGroup ? `${group}.` : ''}${prefixAndPath[1]}`; + res = JPath.setValue(res, path, cell); + } + }); + return res; + } + getFirstColWithNamespace(namespace) { + const exp = new RegExp(`^${namespace ?? '\\w+'}(?:\\.\\d)*${DynamicColumnHeaders.namespaceSeparator}`); + return this.headers.findIndex(header => exp.test(header)); + } +} +DynamicColumnHeaders.namespaceSeparator = ':'; + +class SheetsService { + constructor(spreadsheetId) { + let spreadsheet; + if (spreadsheetId) { + try { + spreadsheet = SpreadsheetApp.openById(spreadsheetId); + } + catch (e) { + console.error(e); + throw new Error(`Unable to identify spreadsheet with provided ID: ${spreadsheetId}!`); + } + } + else if (SpreadsheetApp.getActiveSpreadsheet() !== null) { + spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); + } + else if (PropertiesService.getScriptProperties() + .getKeys() + .includes('spreadsheetId')) { + spreadsheet = SpreadsheetApp.openById(PropertiesService.getScriptProperties().getProperty('spreadsheetId') ?? + ''); + } + if (!spreadsheet) { + throw new Error('Unable to connect to spreadsheet'); + } + this.spreadsheet = spreadsheet; + this.defaultMode = 'FORMULA'; + } + setValuesInDefinedRange(sheetName, row, col, values) { + const sheet = this.getSpreadsheet().getSheetByName(sheetName); + if (!sheet) + return; + if (values[0]) { + sheet + .getRange(row, col, values.length, values[0].length) + .setValues(values); + } + } + getRangeData(sheetName, startRow, startCol, numRows = 0, numCols = 0) { + const sheet = this.getSpreadsheet().getSheetByName(sheetName); + if (!sheet || numRows + sheet.getLastRow() - startRow + 1 === 0) { + return [[]]; + } + return sheet + .getRange(startRow, startCol, numRows || sheet.getLastRow() - startRow + 1, numCols || sheet.getLastColumn() - startCol + 1) + .getValues(); + } + getCellValue(sheetName, row, col) { + const sheet = this.getSpreadsheet().getSheetByName(sheetName); + return sheet ? sheet.getRange(row, col).getValue() : null; + } + setCellValue(row, col, val, sheetName) { + const sheet = sheetName + ? this.getSpreadsheet().getSheetByName(sheetName) + : this.getSpreadsheet().getActiveSheet(); + if (!sheet) + return; + sheet.getRange(row, col).setValue(val); + } + getWaitTimeInSeconds(i) { + return (i > 3 ? 10 : 5) * (i + 1); + } + getSpreadsheet() { + return this.spreadsheet; + } +} + +class Utils { + static getCurrentDateString() { + return new Date() + .toISOString() + .replace('T', ' ') + .replace('Z', '') + .replace(/\.\d*/, ''); + } +} + +var AUTH_MODE; +(function (AUTH_MODE) { + AUTH_MODE["USER"] = "USER"; + AUTH_MODE["SERVICE_ACCOUNT"] = "SERVICE_ACCOUNT"; +})(AUTH_MODE || (AUTH_MODE = {})); +class Auth { + constructor(account) { + this.authMode = account ? AUTH_MODE.SERVICE_ACCOUNT : AUTH_MODE.USER; + this.serviceAccount = account; + } + getAuthToken() { + if (this.authMode === AUTH_MODE.USER) { + return ScriptApp.getOAuthToken(); + } + else if (!this.serviceAccount || + !('private_key' in this.serviceAccount)) { + throw new Error('No or invalid service account provided'); + } + const service = OAuth2.createService('Service Account') + .setTokenUrl('https://accounts.google.com/o/oauth2/token') + .setPrivateKey(this.serviceAccount.private_key) + .setIssuer(this.serviceAccount.client_email) + .setSubject(this.serviceAccount.user_email) + .setPropertyStore(PropertiesService.getScriptProperties()) + .setParam('access_type', 'offline') + .setScope('https://www.googleapis.com/auth/display-video'); + service.reset(); + return service.getAccessToken(); + } +} + +class TargetAgent extends ApiHelper { + constructor() { + super(); + this.requiredParameters = []; + } + process(identifier, type, evaluation, params) { } + validate(identifier, type, evaluation, params) { + throw new Error('Method not implemented.'); + } + findMissingRequiredParameter(params) { + const keys = Object.keys(params); + return this.requiredParameters.find(param => !keys.includes(param)); + } + ensureRequiredParameters(params) { + const missingParameter = this.findMissingRequiredParameter(params); + if (missingParameter) { + throw new Error(`Missing parameter: '${missingParameter}'`); + } + } + static getInstance() { + if (!this.instance) { + this.instance = new this(); + } + return this.instance; + } +} +TargetAgent.friendlyName = ''; + +var DV360_ENTITY_STATUS; +(function (DV360_ENTITY_STATUS) { + DV360_ENTITY_STATUS["ACTIVE"] = "ENTITY_STATUS_ACTIVE"; + DV360_ENTITY_STATUS["PAUSED"] = "ENTITY_STATUS_PAUSED"; +})(DV360_ENTITY_STATUS || (DV360_ENTITY_STATUS = {})); +var DV360_ENTITY_TYPE; +(function (DV360_ENTITY_TYPE) { + DV360_ENTITY_TYPE["LINE_ITEM"] = "LINE_ITEM"; + DV360_ENTITY_TYPE["INSERTION_ORDER"] = "INSERTION_ORDER"; +})(DV360_ENTITY_TYPE || (DV360_ENTITY_TYPE = {})); +class DV360 extends TargetAgent { + constructor() { + super(); + this.requiredParameters = ['advertiserId']; + this.baseUrl = 'https://displayvideo.googleapis.com/v2'; + } + process(identifier, type, evaluation, params) { + this.ensureRequiredParameters(params); + const auth = new Auth(params.serviceAccount ?? undefined); + this.authToken = auth.getAuthToken(); + if (type === DV360_ENTITY_TYPE.LINE_ITEM) { + this.setLineItemStatus(params.advertiserId, identifier, evaluation); + } + else if (type === DV360_ENTITY_TYPE.INSERTION_ORDER) { + this.setInsertionOrderStatus(params.advertiserId, identifier, evaluation); + } + } + validate(identifier, type, evaluation, params) { + this.ensureRequiredParameters(params); + const auth = new Auth(params.serviceAccount ?? undefined); + this.authToken = auth.getAuthToken(); + let status; + const errors = []; + if (type === DV360_ENTITY_TYPE.LINE_ITEM) { + status = this.isLineItemActive(params.advertiserId, identifier); + } + else if (type === DV360_ENTITY_TYPE.INSERTION_ORDER) { + status = this.isInsertionOrderActive(params.advertiserId, identifier); + } + if (evaluation !== status) { + errors.push(`Status for ${identifier} (${type}) should be ${evaluation} but is ${status}`); + } + return errors; + } + fetchUrl(url, method = 'get', payload) { + const headers = { + Authorization: `Bearer ${this.authToken}`, + Accept: '*/*', + }; + return this.callApi(url, headers, undefined, payload, method); + } + setEntityStatus(advertiserId, entityId, status, entity) { + const newStatus = status + ? DV360_ENTITY_STATUS.ACTIVE + : DV360_ENTITY_STATUS.PAUSED; + const updateMask = { + entityStatus: newStatus, + }; + console.log(`Setting status of ${entityId} to ${newStatus}`); + const url = `${this.baseUrl}/advertisers/${advertiserId}/${entity}/${entityId}?updateMask=entityStatus`; + this.fetchUrl(url, 'patch', updateMask); + } + setLineItemStatus(advertiserId, lineItemId, status) { + const newStatus = this.setEntityStatus(advertiserId, lineItemId, status, 'lineItems'); + } + setInsertionOrderStatus(advertiserId, insertionOrderId, status) { + this.setEntityStatus(advertiserId, insertionOrderId, status, 'insertionOrders'); + } + getEntity(advertiserId, entityId, entity) { + const url = `${this.baseUrl}/advertisers/${advertiserId}/${entity}/${entityId}`; + return this.fetchUrl(url); + } + isLineItemActive(advertiserId, lineItemId) { + const entity = this.getEntity(advertiserId, lineItemId, 'lineItems'); + return DV360_ENTITY_STATUS.ACTIVE === entity.entityStatus; + } + isInsertionOrderActive(advertiserId, insertionOrderId) { + const entity = this.getEntity(advertiserId, insertionOrderId, 'insertionOrders'); + return DV360_ENTITY_STATUS.ACTIVE === entity.entityStatus; + } +} +DV360.friendlyName = 'DV360'; + +var GOOGLE_ADS_SELECTOR_TYPE; +(function (GOOGLE_ADS_SELECTOR_TYPE) { + GOOGLE_ADS_SELECTOR_TYPE["AD_ID"] = "AD_ID"; + GOOGLE_ADS_SELECTOR_TYPE["AD_LABEL"] = "AD_LABEL"; + GOOGLE_ADS_SELECTOR_TYPE["AD_GROUP_ID"] = "AD_GROUP_ID"; + GOOGLE_ADS_SELECTOR_TYPE["AD_GROUP_LABEL"] = "AD_GROUP_LABEL"; +})(GOOGLE_ADS_SELECTOR_TYPE || (GOOGLE_ADS_SELECTOR_TYPE = {})); +var GOOGLE_ADS_ENTITY_STATUS; +(function (GOOGLE_ADS_ENTITY_STATUS) { + GOOGLE_ADS_ENTITY_STATUS["ENABLED"] = "ENABLED"; + GOOGLE_ADS_ENTITY_STATUS["PAUSED"] = "PAUSED"; +})(GOOGLE_ADS_ENTITY_STATUS || (GOOGLE_ADS_ENTITY_STATUS = {})); +class GoogleAds extends TargetAgent { + constructor() { + super(); + this.parameters = {}; + this.requiredParameters = [ + 'customerId', + 'developerToken', + ]; + this.baseUrl = 'https://googleads.googleapis.com/v13'; + } + process(identifier, type, evaluation, params) { + this.ensureRequiredParameters(params); + const auth = new Auth(params.serviceAccount ?? undefined); + this.authToken = auth.getAuthToken(); + this.parameters = params; + const status = evaluation + ? GOOGLE_ADS_ENTITY_STATUS.ENABLED + : GOOGLE_ADS_ENTITY_STATUS.PAUSED; + if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_ID) { + console.log(`Updating status of Ad ${identifier} to '${status}'`); + this.updateAdStatusById(params.customerId, identifier.split(';').map(id => String(id)), status); + } + else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_LABEL) { + this.updateAdStatusByLabel(params.customerId, identifier, status); + } + else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_GROUP_ID) { + this.updateAdGroupStatusById(params.customerId, identifier.split(';').map(id => String(id)), status); + } + else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_GROUP_LABEL) { + console.log(`Updating status of AdGroup by label '${identifier}' to '${status}'`); + this.updateAdGroupStatusByLabel(params.customerId, identifier, status); + } + } + validate(identifier, type, evaluation, params) { + const auth = new Auth(params.serviceAccount ?? undefined); + this.authToken = auth.getAuthToken(); + this.parameters = params; + const expectedStatus = evaluation + ? GOOGLE_ADS_ENTITY_STATUS.ENABLED + : GOOGLE_ADS_ENTITY_STATUS.PAUSED; + let entitiesToBeChecked = []; + const errors = []; + if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_ID) { + entitiesToBeChecked = entitiesToBeChecked.concat(this.getAdsById(params.customerId, identifier.split(',').map(id => String(id)))); + } + else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_LABEL) { + entitiesToBeChecked = entitiesToBeChecked.concat(this.getAdsByLabel(params.customerId, identifier)); + } + else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_GROUP_ID) { + entitiesToBeChecked = entitiesToBeChecked.concat(this.getAdGroupsById(params.customerId, identifier.split(',').map(id => String(id)))); + } + else if (type === GOOGLE_ADS_SELECTOR_TYPE.AD_GROUP_LABEL) { + entitiesToBeChecked = entitiesToBeChecked.concat(this.getAdGroupsByLabel(params.customerId, identifier)); + } + for (const entity of entitiesToBeChecked) { + if (entity.status !== expectedStatus) { + errors.push(`Status for ${identifier} (${type}) should be ${expectedStatus} but is ${entity.status}`); + } + } + return errors; + } + updateEntityStatus(path, entity, status) { + const payload = { + operations: [ + { + updateMask: 'status', + update: { + resourceName: entity.resourceName, + status: status, + }, + }, + ], + }; + const res = this.fetchUrl(path, 'POST', payload); + } + fetchUrl(path, method = 'get', payload, forceCache = false) { + const headers = { + Authorization: `Bearer ${this.authToken}`, + Accept: '*/*', + 'developer-token': this.parameters.developerToken ?? '', + }; + if (this.parameters.loginCustomerId) { + headers['login-customer-id'] = this.parameters.loginCustomerId; + } + const url = `${this.baseUrl}/${path}`; + return this.callApi(url, headers, undefined, payload, method, undefined, forceCache); + } + updateAdStatusById(customerId, ids, status) { + const ads = this.getAdsById(customerId, ids); + const path = `customers/${customerId}/adGroupAds:mutate`; + for (const ad of ads) { + this.updateEntityStatus(path, ad, status); + } + } + updateAdGroupStatusById(customerId, ids, status) { + const adGroups = this.getAdGroupsById(customerId, ids); + const path = `customers/${customerId}/adGroup:mutate`; + for (const adGroup of adGroups) { + this.updateEntityStatus(path, adGroup, status); + } + } + updateAdStatusByLabel(customerId, label, status) { + const ads = this.getAdsByLabel(customerId, label); + const path = `customers/${customerId}/adGroupAds:mutate`; + for (const ad of ads) { + this.updateEntityStatus(path, ad, status); + } + } + updateAdGroupStatusByLabel(customerId, label, status) { + const adGroups = this.getAdGroupsByLabel(customerId, label); + const path = `customers/${customerId}/adGroups:mutate`; + for (const adGroup of adGroups) { + this.updateEntityStatus(path, adGroup, status); + } + } + getAdsById(customerId, ids) { + const query = ` + SELECT + ad_group_ad.ad.id, + ad_group_ad.status + FROM ad_group_ad + WHERE + ad_group_ad.ad.id IN (${ids.join(',')}) + `; + const payload = { + query, + }; + const path = `customers/${customerId}/googleAds:search`; + const res = this.fetchUrl(path, 'POST', payload, true); + return res.results.map((result) => { + return { + resourceName: result.adGroupAd.resourceName, + status: result.adGroupAd.status, + }; + }); + } + getAdGroupsById(customerId, ids) { + const query = ` + SELECT + ad_group.id, + ad_group.status + FROM ad_group + WHERE + ad_group.id IN (${ids.join(',')}) + `; + const payload = { + query, + }; + const path = `customers/${customerId}/googleAds:search`; + const res = this.fetchUrl(path, 'POST', payload, true); + return res.results.map((result) => { + return { + resourceName: result.adGroup.resourceName, + status: result.adGroup.status, + }; + }); + } + getAdsByLabel(customerId, label) { + const labelResource = this.getAdLabelByName(customerId, label); + const query = ` + SELECT + ad_group_ad.ad.id, + ad_group_ad.status + FROM ad_group_ad + WHERE + ad_group_ad.labels CONTAINS ANY ('${labelResource}') + `; + const payload = { + query, + }; + const path = `customers/${customerId}/googleAds:search`; + const res = this.fetchUrl(path, 'POST', payload, true); + return res.results.map((result) => { + return { + resourceName: result.adGroupAd.resourceName, + status: result.adGroupAd.status, + }; + }); + } + getAdLabelByName(customerId, labelName) { + const query = ` + SELECT + label.resource_name + FROM ad_group_ad_label + WHERE + label.name = '${labelName}' + `; + const payload = { + query, + }; + const path = `customers/${customerId}/googleAds:search`; + const res = this.fetchUrl(path, 'POST', payload, true); + return res.results[0].label.resourceName; + } + getAdGroupsByLabel(customerId, label) { + const labelResource = this.getAdGroupLabelByName(customerId, label); + const query = ` + SELECT + ad_group.id, + ad_group.status + FROM ad_group + WHERE + ad_group.labels CONTAINS ANY ('${labelResource}') + `; + const payload = { + query, + }; + const path = `customers/${customerId}/googleAds:search`; + const res = this.fetchUrl(path, 'POST', payload, true); + return res.results.map((result) => { + return { + resultName: result.adGroup.resourceName, + status: result.adGroup.status, + }; + }); + } + getAdGroupLabelByName(customerId, labelName) { + const query = ` + SELECT + label.resource_name + FROM ad_group_label + WHERE + label.name = '${labelName}' + `; + const payload = { + query, + }; + const path = `customers/${customerId}/googleAds:search`; + const res = this.fetchUrl(path, 'POST', payload, true); + return res.results[0].label.resourceName; + } +} +GoogleAds.friendlyName = 'Google Ads'; + +const AVAILABLE_AGENTS = [DV360, GoogleAds]; + +var MODE; +(function (MODE) { + MODE[MODE["FETCH"] = 0] = "FETCH"; + MODE[MODE["SYNC"] = 1] = "SYNC"; + MODE[MODE["FETCH_AND_SYNC"] = 2] = "FETCH_AND_SYNC"; +})(MODE || (MODE = {})); +let sheetsService; +const targetAgents = {}; +function onOpen() { + const ui = SpreadsheetApp.getUi(); + ui.createMenu('IFTTA') + .addItem('Setup', 'setup') + .addItem('Fetch', 'fetch') + .addItem('Sync', 'sync') + .addItem('FetchAndSync', 'fetchAndSync') + .addItem('Validate', 'validate') + .addToUi(); +} +function setup() { + const ssId = SpreadsheetApp.getActiveSpreadsheet().getId(); + PropertiesService.getScriptProperties().setProperty('spreadsheetId', ssId); +} +function fetch() { + main(MODE.FETCH); +} +function sync() { + main(MODE.SYNC); +} +function fetchAndSync() { + main(MODE.FETCH_AND_SYNC); +} +function main(mode) { + const rows = getSheetsService().getRangeData(CONFIG.rules.sheetName, 1, 1); + if (rows.length === 0) { + return; + } + const columnHeaders = rows.shift(); + const columnHeaderHelper = new DynamicColumnHeaders(columnHeaders); + const apiHelper = new ApiHelper(); + rows.forEach((row, index) => { + console.log(`Processing row ${index + 1}/${rows.length}`); + const lastUpdate = Number(row[CONFIG.rules.cols.lastUpdate]); + const updateInterval = Number(row[CONFIG.rules.cols.updateInterval]); + let status = ''; + if (updateInterval > 0 && + Date.now() < lastUpdate + updateInterval * 3600 * 1000) { + console.log('Update not due.'); + return; + } + try { + if (mode === MODE.FETCH || mode === MODE.FETCH_AND_SYNC) { + console.log('Fetching data from API...'); + const sourceParams = columnHeaderHelper.getMappedValues(row, CONFIG.sourceNamespace); + for (const group in sourceParams) { + const source = sourceParams[group]; + const res = apiHelper.callApi(source.url, source.headers, source.params); + row = updateRowWithResultData(columnHeaders, row, res, group); + const resultsHeaderStartCol = columnHeaderHelper.getFirstColWithNamespace(CONFIG.resultNamespace); + const results = row.slice(resultsHeaderStartCol); + getSheetsService().setValuesInDefinedRange(CONFIG.rules.sheetName, index + CONFIG.rules.startRow + 1, resultsHeaderStartCol + 1, [results]); + status = `Fetched (${Utils.getCurrentDateString()})`; + } + } + if (mode === MODE.SYNC || mode === MODE.FETCH_AND_SYNC) { + console.log('Synchronizing...'); + const evaluation = getSheetsService().getCellValue(CONFIG.rules.sheetName, index + 1 + CONFIG.rules.startRow, CONFIG.rules.cols.activationFormula + 1); + if (evaluation === '') + return; + const params = columnHeaderHelper.getMappedValues(row, CONFIG.targetNamespace, false); + const targetAgent = getTargetAgent(row[CONFIG.rules.cols.targetAgent]); + targetAgent.process(row[CONFIG.rules.cols.targetId], row[CONFIG.rules.cols.targetIdType], evaluation, params); + status = `Synchronized (${Utils.getCurrentDateString()})`; + getSheetsService().setCellValue(index + CONFIG.rules.startRow + 1, CONFIG.rules.cols.lastUpdate + 1, String(Date.now()), CONFIG.rules.sheetName); + } + } + catch (err) { + status = `Error (${Utils.getCurrentDateString()}): ${err}`; + } + finally { + getSheetsService().setCellValue(index + CONFIG.rules.startRow + 1, CONFIG.rules.cols.status + 1, status, CONFIG.rules.sheetName); + } + }); +} +function validate() { + let errors = []; + const rows = getSheetsService().getRangeData(CONFIG.rules.sheetName, 1, 1); + const columnHeaders = rows.shift(); + const columnHeaderHelper = new DynamicColumnHeaders(columnHeaders); + rows.forEach((row, index) => { + console.log(`Validating row ${index + 1}/${rows.length}`); + try { + const evaluation = getSheetsService().getCellValue(CONFIG.rules.sheetName, index + CONFIG.rules.startRow + 1, CONFIG.rules.cols.activationFormula + 1); + if (evaluation === '') + return; + const params = columnHeaderHelper.getMappedValues(row, CONFIG.targetNamespace, false); + errors = errors.concat(getTargetAgent(row[CONFIG.rules.cols.targetAgent]).validate(row[CONFIG.rules.cols.targetId], row[CONFIG.rules.cols.targetIdType], evaluation, params)); + } + catch (err) { + errors.push(JSON.stringify(err.message)); + } + }); + console.log(); + console.log('### Validation Results ###'); + console.log(`Valid rows: ${rows.length - errors.length}/${rows.length}`); + if (errors.length) { + console.log(); + console.log('Result details:'); + errors.forEach(error => console.log(error)); + } +} +function updateRowWithResultData(headers, row, data, group) { + row = row.map((cell, index) => { + const exp = new RegExp(`^${CONFIG.resultNamespace}(?:\\.${group})*${DynamicColumnHeaders.namespaceSeparator}`); + if (exp.test(headers[index])) { + const path = headers[index].split(DynamicColumnHeaders.namespaceSeparator)[1]; + if (path.startsWith('!CUSTOM')) { + const functionName = path.split('.')[1]; + if (GLOBALCTX && GLOBALCTX[functionName]) { + const columnHeaderHelper = new DynamicColumnHeaders(headers); + const customParams = columnHeaderHelper.getMappedValues(row, functionName, false); + return GLOBALCTX[functionName](data, customParams); + } + } + else { + return JPath.getValue(path, data); + } + } + return cell; + }); + return row; +} +function getTargetAgent(agentName) { + if (agentName in targetAgents) { + return targetAgents[agentName]; + } + const agent = AVAILABLE_AGENTS.find(agent => agent.friendlyName === agentName); + if (!agent) { + throw new Error(`Unknown target agent: '${agentName}'`); + } + targetAgents[agentName] = agent.getInstance(); + return targetAgents[agentName]; +} +function getSheetsService() { + if (sheetsService === undefined) { + const spreadsheetId = CONFIG.spreadsheetId || undefined; + sheetsService = new SheetsService(spreadsheetId); + } + return sheetsService; +} From 5393a2a2be605995171e11d58195ef2af00a4c76 Mon Sep 17 00:00:00 2001 From: paranerd Date: Thu, 13 Apr 2023 14:51:50 +0200 Subject: [PATCH 57/84] Use husky, lint-staged and is-ci for better deployments --- .husky/pre-commit | 19 ++ .lintstagedrc.json | 3 + package-lock.json | 765 ++++++++++++++++++++++++++++++++++++++++++++- package.json | 20 +- 4 files changed, 795 insertions(+), 12 deletions(-) create mode 100755 .husky/pre-commit create mode 100644 .lintstagedrc.json diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 0000000..092034b --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,19 @@ +#!/usr/bin/env sh +# Copyright 2023 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +. "$(dirname -- "$0")/_/husky.sh" + +npm run build +npm run lint:staged +npm test diff --git a/.lintstagedrc.json b/.lintstagedrc.json new file mode 100644 index 0000000..e6335e7 --- /dev/null +++ b/.lintstagedrc.json @@ -0,0 +1,3 @@ +{ + "*.ts": ["prettier --write --list-different", "eslint --fix"] +} diff --git a/package-lock.json b/package-lock.json index 2a3532c..b56452a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { - "name": "event-based-marketing", - "version": "0.0.1", + "name": "if-this-then-ad", + "version": "2.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "event-based-marketing", - "version": "0.0.1", + "name": "if-this-then-ad", + "version": "2.0.0", "dependencies": { "@google/clasp": "^2.4.2", "@types/google-apps-script": "^1.0.59", @@ -29,6 +29,11 @@ "ts-jest": "^29.0.5", "typescript": "^4.9.5" }, + "devDependencies": { + "husky": "^8.0.3", + "is-ci": "^3.0.1", + "lint-staged": "^13.2.1" + }, "engines": { "node": ">=14" } @@ -2804,6 +2809,12 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "dev": true + }, "node_modules/commander": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", @@ -4437,6 +4448,21 @@ "node": ">=10.17.0" } }, + "node_modules/husky": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", + "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", + "dev": true, + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -4816,6 +4842,18 @@ "node": ">=8" } }, + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, "node_modules/is-core-module": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", @@ -6048,11 +6086,313 @@ "decamelize": "^1.2.0" } }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, + "node_modules/lint-staged": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.2.1.tgz", + "integrity": "sha512-8gfzinVXoPfga5Dz/ZOn8I2GOhf81Wvs+KwbEXQn/oWZAvCVS2PivrXfVbFJc93zD16uC0neS47RXHIjXKYZQw==", + "dev": true, + "dependencies": { + "chalk": "5.2.0", + "cli-truncate": "^3.1.0", + "commander": "^10.0.0", + "debug": "^4.3.4", + "execa": "^7.0.0", + "lilconfig": "2.1.0", + "listr2": "^5.0.7", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-inspect": "^1.12.3", + "pidtree": "^0.6.0", + "string-argv": "^0.3.1", + "yaml": "^2.2.1" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/lint-staged/node_modules/chalk": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/commander": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz", + "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/lint-staged/node_modules/execa": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz", + "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/lint-staged/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-5.0.8.tgz", + "integrity": "sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA==", + "dev": true, + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.19", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.8.0", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/listr2/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, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/listr2/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/listr2/node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/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 + }, + "node_modules/listr2/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/listr2/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/listr2/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/listr2/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, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/locate-path": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", @@ -6113,6 +6453,84 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/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 + }, + "node_modules/log-update/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/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, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/loud-rejection": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-2.2.0.tgz", @@ -7060,6 +7478,18 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/pirates": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", @@ -7587,6 +8017,12 @@ "node": ">=0.10.0" } }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, "node_modules/rimraf": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.0.tgz", @@ -8066,6 +8502,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true, + "engines": { + "node": ">=0.6.19" + } + }, "node_modules/string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -8730,6 +9175,15 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, + "node_modules/yaml": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.1.tgz", + "integrity": "sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, "node_modules/yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", @@ -10706,6 +11160,12 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "dev": true + }, "commander": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", @@ -11876,6 +12336,12 @@ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" }, + "husky": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", + "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", + "dev": true + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -12141,6 +12607,15 @@ "binary-extensions": "^2.0.0" } }, + "is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "requires": { + "ci-info": "^3.2.0" + } + }, "is-core-module": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", @@ -13066,11 +13541,210 @@ } } }, + "lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true + }, "lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, + "lint-staged": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.2.1.tgz", + "integrity": "sha512-8gfzinVXoPfga5Dz/ZOn8I2GOhf81Wvs+KwbEXQn/oWZAvCVS2PivrXfVbFJc93zD16uC0neS47RXHIjXKYZQw==", + "dev": true, + "requires": { + "chalk": "5.2.0", + "cli-truncate": "^3.1.0", + "commander": "^10.0.0", + "debug": "^4.3.4", + "execa": "^7.0.0", + "lilconfig": "2.1.0", + "listr2": "^5.0.7", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-inspect": "^1.12.3", + "pidtree": "^0.6.0", + "string-argv": "^0.3.1", + "yaml": "^2.2.1" + }, + "dependencies": { + "chalk": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "dev": true + }, + "commander": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz", + "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==", + "dev": true + }, + "execa": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz", + "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + } + }, + "human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true + }, + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true + }, + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true + }, + "npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "requires": { + "path-key": "^4.0.0" + } + }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "requires": { + "mimic-fn": "^4.0.0" + } + }, + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true + }, + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true + } + } + }, + "listr2": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-5.0.8.tgz", + "integrity": "sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA==", + "dev": true, + "requires": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.19", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.8.0", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "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, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "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 + }, + "cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + } + }, + "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 + }, + "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 + }, + "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 + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "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, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + } + } + }, "locate-path": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", @@ -13115,6 +13789,65 @@ } } }, + "log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "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 + }, + "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 + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "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, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, "loud-rejection": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-2.2.0.tgz", @@ -13762,6 +14495,12 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, + "pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true + }, "pirates": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", @@ -14105,6 +14844,12 @@ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" }, + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, "rimraf": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.0.tgz", @@ -14454,6 +15199,12 @@ "bl": "^5.0.0" } }, + "string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true + }, "string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -14928,6 +15679,12 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, + "yaml": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.1.tgz", + "integrity": "sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==", + "dev": true + }, "yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", diff --git a/package.json b/package.json index 98713cc..e648c6d 100644 --- a/package.json +++ b/package.json @@ -1,20 +1,19 @@ { "name": "if-this-then-ad", - "version": "2.0.0", + "version": "2.0.1", "description": "Automatic management of marketing campaigns based on real world events", "main": "src/index.ts", "scripts": { "clean": "rimraf build dist", - "build:compile": "tsc", - "build:bundle": "rollup --no-treeshake -c rollup.config.mjs", "build": "npm run clean && npm run bundle", "test": "jest test/ --passWithNoTests", "deploy": "npm run lint && npm run test && npm run build && ncp appsscript.json dist/appsscript.json && ncp .clasp-dev.json .clasp.json && clasp push", - "deploy-prod": "npm run lint && npm run test && npm run build && ncp appsscript.json dist/appsscript.json && ncp .clasp-prod.json .clasp.json && clasp push", - "lint": "npm run license:add && eslint --fix src/", - "license:check": "license-check-and-add check -f license-config.json", - "license:add": "license-check-and-add add -f license-config.json", - "bundle": "rollup --no-treeshake -c rollup.config.mjs" + "deploy:prod": "npm run lint && npm run test && npm run build && ncp appsscript.json dist/appsscript.json && ncp .clasp-prod.json .clasp.json && clasp push", + "lint": "npm run license && eslint --fix src/", + "lint:staged": "npm run license && lint-staged", + "license": "license-check-and-add add -f license-config.json", + "bundle": "rollup --no-treeshake -c rollup.config.mjs", + "prepare": "is-ci || husky install" }, "dependencies": { "@google/clasp": "^2.4.2", @@ -40,5 +39,10 @@ }, "engines": { "node": ">=14" + }, + "devDependencies": { + "husky": "^8.0.3", + "is-ci": "^3.0.1", + "lint-staged": "^13.2.1" } } From 330f3107aca0dd54fea87443552d20cdbaa5076d Mon Sep 17 00:00:00 2001 From: paranerd Date: Thu, 13 Apr 2023 15:40:25 +0200 Subject: [PATCH 58/84] Extended instructions for manual and automatic execution --- README.md | 26 +++++++++++++++++++++++--- img/manual.png | Bin 0 -> 42876 bytes img/setup.png | Bin 25637 -> 39160 bytes img/trigger-1.png | Bin 0 -> 37961 bytes img/trigger-2.png | Bin 0 -> 152038 bytes img/trigger-3.png | Bin 0 -> 196366 bytes img/trigger-4.png | Bin 0 -> 207940 bytes package.json | 2 +- 8 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 img/manual.png create mode 100644 img/trigger-1.png create mode 100644 img/trigger-2.png create mode 100644 img/trigger-3.png create mode 100644 img/trigger-4.png diff --git a/README.md b/README.md index 928f449..a063f0d 100644 --- a/README.md +++ b/README.md @@ -146,14 +146,34 @@ A rule consists of the following elements: ## How to run ### Manually -You can run the tool manually using the "IFTTA" Sheets menu +You can run the tool manually using the "IFTTA" Sheets menu: + +Setup ### Automatically (via Trigger) To run IFTTA automatically in the background, you need to first run the Setup from the "IFTTA" Sheets menu: -Setup +Setup + +Next open up Apps Script by going to Extensions -> Apps Script: + +To add a Trigger, first go to Extensions -> Apps Script + +Setup + +From there, go to "Triggers" and click "Add Trigger": + +Setup + +Select a function you would like to run (`fetch` to only fetch data, `sync` to only (de)activate without fresh data or `fetchAndSync` for both): + +Setup + +Select 'Time-driven' as 'Event source' and set the timings as per your requirements: + +Setup -You would then set up an Apps Script Trigger to call `fetch()`, `sync()` or `fetchAndSync()` automatically, depending on your requirements. +Click 'Save' to complete the process. ## Dynamic Column Notation diff --git a/img/manual.png b/img/manual.png new file mode 100644 index 0000000000000000000000000000000000000000..d515dca583ebeada8ea7f5a1d51229b423e6a5d5 GIT binary patch literal 42876 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

      8~QY)3TkLDKR-Qv-EkvAp=fk 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 XHA6kvwyiq72mB26Omtsq+lBoPOsOV& literal 0 HcmV?d00001 diff --git a/img/setup.png b/img/setup.png index 50a2e430e3d2fa442f513b1ed99782a3c7f8ab31..57815b88897135d86925da23ecbf68934a66b8c4 100644 GIT binary patch literal 39160 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

      (Bm*P1-cuj)OKEQz?+* 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 (13OVAP8 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 delta 21849 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 QyvzUup00i_>zopr0PR5gQUCw| literal 0 HcmV?d00001 diff --git a/img/trigger-2.png b/img/trigger-2.png new file mode 100644 index 0000000000000000000000000000000000000000..be821e46111cd02a471aeaf6c66d4bc06bf5f654 GIT binary patch literal 152038 zcmeFYWmufevMxNhJHZ2kySr;}cZURbcXyW%BsjsH;BEneySuyV;2g5nyU$u@fA8M= z{QLf#nd`Zpp6X${<#jPC~qp`41Vmb~qAt|3p;ngO9?hBIv+G z90=jQSO%IV*J^(xy$?!1!M_Nj_5I3Sc={szNedgnbyp7lpry*&uEXx^8I;ZX#_e=A z((VROQUfectTY+8}u&%Nu5(i>{7`2^1fg)MoPjGr>MAWSiQUow_fcmtzudpSYfn1GL zhbBxnYi9hM^X-;%H2Sj~GNl#H@IDExbU+}u5~11BTWai^-qkgks6e@)+8|cgZ>fF6 zYgbk`iSDwM^thGajF)@+YoJ#%Ls74VuhW{-ur(K|gjV z#PDAsKg*|I9Ug-c3wkc)s&~;F~19#2+rtVJ}Z(>#l$uI*ZjxXj6 ze7=V9-e(J}9ZbynKdyyUaZo9VqEy5@nBl!vqO-9{c1MA(^i+`=(S6_GHvZ$Z@~3F010-wy&|j=?H6>=-4SuS z1>2kqcYnEG8z$YodHIIFj4=^o{4gXFB|NkgP3{GL0Wv4z$kz2C*&D3j$N6jcX=XY= zpK-Iro!T0N3e)B7{;FTt8 z==CVx*~6mXaoEYVA^vMEc>^l1f4vc9wbO!9Iod=uRyo{pSFF_K#gQkSj-Ke+mht6| z$j5HMXC!_t3krk`%S_MAj)5om2bF?z^R6_qGzu(Z6YQzfi>R)m+7R9Tug+$aX4ruI zb?k@ZW4ZE^)_?6(b4ZD9DSK#LKuQ<8Jxpa5;RX0jklO}pAdoCLast(-7qVLH1kEfs;GRTS z5)wTuA9yHM?X#PGpY<%HHq%fD7V-$VtKnh5JXaL>3XvWAQ(hf^}B5$x#Rmn z`T2vk*I`uyiMz8lJ{e;CMz4WYfh`Dz|K<9N_?JafiYM%OxL7XoWZD53=nFh^7*}S~ z_oe_%1wP>u5&;tAcu6v!1pdJ=Ou4Oic&UPXm;BXytSJ*^l*6EenuLgiTIHY0r3s29 zVkIILDN_yw!_o>#0^eo_lZ_c2*-|C4#Py}u#BC`I$UyOeDr{79m_*XxE)`ce}1Z8xJS$S>h9#vObyD&pUYHVsJs+u$wH0Vj>G`yhzPa*RYF;v>WO!aLU#G}R3)H>_%kRhEp`WVXzQ*3J@aX&ke9?W`eT;boA=*Rm z25AOSL*paKLBqV!bC^Mh(wEtA4kjM-r^qP zJmK%-RIv!yu2_k%Ub3ToFK4k}_K=@1WIgn_slVay>@4|VQC!mN9A!~-XvS()D^`nM z>sjlyhv^jRQTRY}t$yu`fDt7bg^N{>)kr^>j5usP%$|Ijd|pvrkx+r9$*#>`J6CI} zgRL{Ky3&hRp`@YNQl`#iVQ@kN(XKl88Z-s;KAU8*RhlDyy_)p*zMZxi*@uZ&g*v@Bf^L85BA;- z_s&mKKGQy&Pp(g?j}FhJFNBZjPuI_lPl6^(EKc8BQyC#LzC$CI#KT|*3Y|?CA zZXWj#i7$K#Cru-r9QZkq^wlkoE-zRqW)hh8v7O~nKiXwv=R0Y2@51+mp#@5ZylvCo z`u^!H%HQXaekrK&KiM|rbLDc$s@bLJsp(574t*RAuOfHOs`Gx25qJ^z0YAl0B}z-n zNv~${Ffo{~969h?*jf}=%=hcWW%InQKnB5iV8qI)rVpgL12f~ZGCF8q5Gd1BMsWuW z%~VZpoU~ThSFri~)@bw@*TXsk-`J)poj&c=(q)$?X|*rKBhTpwL0T}@x3Ah3rt|7wu>{jE^`2z@b1`qS#Sc8aR36-H!iJ4PY+-`H#) zEW3#wkRxJtum^)k)^mq)QB)EN3BH#yt8vvErLER|n$E(4!G7cTm_3%c#?#~cdj%K8 zl*P<8HDqMy`z+70_uca%zmv$`Nrp^nIxh%>UX<{G+-{$I+$zhC&2Q{kqBHneS*KK+ zhM~Q>%d5LEoWowmLO^>=ER(*x+iR=mNt5&3Q92K>ijn=Cv zw~NPBYS5~48o288rJkJujhk2EZ!s?E(Hu#3k9Art>5*pDXFupf=tMOLEGE}g zym0=uV_!yUNU?is5pBxzGFusIz>7;u(+h1)p3ALISXx`PXk|QwTbWkfS8OcMFY54S zT%cWi@-}$vIDYB@H4+*U6!V&U{5(QERn&r*VygJj$=q7qN?lNLY`?HMXL`OTDnSr; z!e!}MclG_Qx}cxBf1ilRn%WkZizNL~pgMF^tzcTu_D1ph|Tvp#rg(!E7hm+t%!X*Bm3hi(pmeB_sVq^b}n}Ill0rn zeeF@f=x~tV!`tknU_J^2Q~?QCR^Pswfn&8zYB-p~vN*oPt+F8UZZ} zf}`JebYL9tRyZ)8A=vxkgpglaxv_s|z|ZR~RVD&9`R-CAn`laz%E*F4FE`k;s5WnG8olgG~fV0m<0gxFBkW|*3V?b4 zh5r5o=YanQHB@g7#DAnAYu?KM!YZOtQtxjSBS#YxTPJfnXSR|Lh3^?~_L5po000*G zp9f4znd|}p0AICG)pXXBljSk8vtjsbZ1=^4!QICGPdxxWcb@m8jfwMTpu3H=trL$s zKgmBRc;3^0vKdK${~&R;;wRCRQv{0IIhp`D7?>ECNCe=4Kp>x^u_=$TnD}4t_h0-Z z=FZOcJdBKPZf*>2tPFOJW{k|-+}w;zEQ~BH^zRh(P9C<-pWW$gok;&#$$!)%X5wVz zXkqVcVP^~cQ}5?5b}r8RBqVGVD(0cJK%j=y04x#(}9TK@)RVPg4r=)V>H8}!d0c$7_??5th>Fj39c!dc)Q_IKI; z8KwCz*n2QrT_m)DNqskUkQFd za!l7Rm%f|%29_m&}o|_657Cg`&2>k!NM$y4gH_sWV^GCczYfrMBrBREK0_Ge7oL5tsMWW}S z69_OM(}>^o3}??b8a?#CUpyJaOkTExK2I87YmFUsQO)mQGyE(uM>7c5PoAhhzAL8y zOGq(M-Ac&6U;Q~D#6V+r1m4Z5Rc*AcF4R|w-aksiq z2$&-Q@WZ%YMt#@D0ef-p3T*U^KnCT%P+$n)6NuPKNzpy?#ha9US0=fOw`NnTcEKeN=G{77T%E)u_~o ziSPZ}X%6gifOI9O#H9PfSS-jLyL>GBop|7cEUNiruzNvuLL_Y@bsksL-QHQjiwBH* zYp|>-DHIf>QhG7j5y5<_@)obk7kBUw=nzGJ1OI82aXzkZM`Hcba*1k&x$PFvJc%}{ zb7hDW@Nido!RCHPYYg!`q!m0?%KC~bz5TF!A(aRdiVs7=@Rol&&-y~&+Dr@TkhckV2XMAnr=^ACC zVI*^gxPd?B$PwBl@-)XihPTyTC=@#--J)lWM!PmIVd^?sRr_-xON2kRFmdaTz1yk|_v=#!$QT_f{%Njf6#~Q8PBqB`|iM z-x2C_T2X4QG5DXix|}oEI!O@%W$Lgil*zl1k9D+ODI&IEP+`>|H^jbLQ!c*V;nJbv zpXL72rP9<@Y;kj}4ur$~yfrEAh>Sm|ZO2OyO^2virqcA1>OjQ-k;9rKA?&|MwO9!} zH>| zBuDAS7s1n8mj|S1MHqs&z$jWws}4clIW-Gx%RsK7d~i)x#GP>kdys`{R2;uOvaC_{){c{bX@$I^EcX#k zJi3a%(c4`}klJL#`WEH6q#+WiHw=cj--M*2WpgXx^oljg2v490D3k$Nlvt0c~@*wDy3?-5gWR4|D5mLXnal6{d`fW2au-K>!a7PEq za}N@PaxxqxT@+STQu}1lEIwqW;NTvE?FbwjQ1q)@)<67fO8$o1|1yShD&GZWY1W*j zCe$4)sfIur)hdWmf?S374pG6l8B_9yp{1XuB94nuLYs{C=~NLDQgzO*lkQM&B*3%g0>NczUPh{?hM$y|Zvp-c}S zu}-SuH!Zd47L{}-KfrJ^Q2d#9At&J+y;fJ}(^-wV19@-nHrw@<+hc0ZD%aExdeEF4 zJT50f?Vfk#Uyb_gI#oWIn8dueETZ9{3K{iByMCWl(lZi|%gqrQ7x4VC{(607z~x@+ z%k<%KY`Z_kWkH<4en#FaRZ-ttmw>!pK9{3HN5!5=BEoh0b+s*Zij{@F*%Ndm^^w>4 zr#0u!&=I>;an8l}0%^1TnFPh!Dc!2=Fd|QXv*t@S&X~_nC1zRECzmHjo1_xv%Xc4> zMI2&~2qxBRPLHHrT{&K^j^TOiFHm>)_LN0Lz+H|OzVcl8eBS5+!$c!Ivs9{cTNijO zXvtX13|9L3)p;mq@3X z0(6#DS-7?Pfg3) zudLbG;Zv-)+>mUeh4wG|VO^-J)?l||lCr1*u=sI@C|@#9m0Fn!S9O4J+w>Ks-|zy! zSV_0}5~4apxOtDt_P$YmrYgEII-H@XsgFg40n19Y%jZkxFEO;UyFkCVftJcrGtB2g zF2wB*U{xz)Nu%Z;mkc4FLmA5f+!31j3J0o|P!0ZZ72fsCq>>Wk)O@PX-9t*<;ri%U z!tCMwjni0zOnB$x625%>m|g`F8Ckx%$cmC4u`Ed(k5PWvY*V6bk0Acxp;>m-SC04y zH?!cTJl8p@5mN~&(3|sId=}fKEFPPA&Zts<`nB)Wo^CX|P_F=jLt>-baBRiIRz=W+6%VVq`=` zK@s{99=+Hgdu=99!VTUqjJmooBy`S1~qpnGk-Th+E$(O41Lp=%`io*_~dUj8#T z#<~Q;GF>yFTl20G5uOPCa!UjGP-cun_Gc+p1t(vzYHx7SZfn-@7>bb zI*(!XU$Q)2>gww9i`;XmLNdv(vYUKmReqfvCnrqNk1WCrb8M*QUxVH4h2nE@vow+w zEKW}K^tGg|P^yZYk<%9GHz6sCU#L6zvhPgKf5;|FOllWY2O{qg<>*WC*R_5?x)9Ym zA=b~&u8G}9qis~1+9V(?s6)%(^E>5cQHct>i zM|bzZW1!qVnS)YVhN=qpl(=pgdT_52TPTbWQ%%bn2U zsyzL2C6qy4J`HAjjJ}|evju;!mxCJI6s}R0w|=PLZtB^w45lpYY6>?SQ+$md4Rvc= z(0aGFl+FeGULdW=ety@TfoZzsjv8=&4~;PhW16}b+}^ZHpQjs#r5Hn8fK%jGMzV{Y z_GRoxQk%cbB6DxZjnkJwGlPk=`eR+oXrgPgB|D&3s!*xm!_Bqxm6YgVE)~v!mZ0q2U*i=sL?lERHkXo0by2zQ%R{7!(W zb)C^`ambO5#f%8fbFTy(5EJge7Syxz&Ktwn%=0np)PqDMpOV=_gN{?EnEcfu6DbrdY6-m1lC^Q?STjo0sPe7LxNZ(L|27D;PJFOZ7K)1t zlvu6r4uZZkya5(1sz1NB#-e6(n6NbSFzwgbGm--yURGEYYHgp&>Kvv!hq`Y3Dm#-~ z+>ZAO@Q(GZ9Ubvg&R(EGpm;>Q58{cP52K@w^{aPos3G}0&hJWMrHuZvF!7)Q=#YB_ z_HP?8`{BHh%vX7&9HdWXYhn6o*~pxGh-1L*><=RLclW1bGg}X`W74TuS6tT;E|0*GImwbH97jy8yuz!@r=2SYH!Q0O!4!r`N4;MUqgZtM;#?Y zk5w=N2n_0saoeAdj=dR%ZBU+`IofXS&SYlmF;KqImrs&Yz_MvT268nOs6WE)9ET#| zAFZxtK7%(f&OU-Lv9Nv)dO7aLDe{N+BgIry)v>u&XTz1wjI z11cjklju83bv0)?u!iw2pfmm!@m0rbq?YRvUMhSZNTw(2Ij8Z7nm)nF{cPWpSwL1x zq=_i1JqB2_TPxgmGVFiaT*V*2P!}(@pap-hyZe&@o~9M}q{juX$@J{koU>+E!XRQB z)l84JxlB)t@ShwA4&w~*cEh;DN__Pz)*U7il8RymwH*cHvs?Vh!`;cB|+Y_stz zjC0@*sMe(qo|CKgiMgxIRmn!aRiJLGwUrOO#?Zu#oYtw(pF+N0i#lW(ZYaNJ z0Dm}1HKN6xDQbjdxmsnVpvQnb3iV%UJq}IZ`72^p9MRPs6qcxU94|ey1gF8=+uB5NbnF(v}=xZYnaSu+Rq6SMA^i6*Zjtn#x?VhF|(E}c!Zl5h;b+~ zih)+Yj8^n$4J$6+9nq4yn&_H1+yldgfcC!Cf}RMWKuX7)(eL(tfzFYQba5^Qjpqv% zjqcvhRnK1at41}`ys!kkuF-2AAc#-PsujfXQni=czb7&l87G_+1clw!d=dC>y4r6Z z%NQpsPA)^!%jfJ#4OV(3(;IBQl~|>WE!iqs%Oc*M8?+|ZF$9Hi=9Il{^u+1-zCGDi zhFQgLY4d<5B_*+WOo?Uo15Ece1Qa!B_ZLYzpRdXoo{TA0%StuH%fXNc(dYHNVk*T4 ziW9lQhbmGNhWY&CM5#qY^gPUyMS@IFfox6QSu9aeR`1zubg z&83ROtw;~=t0HSGb{*JE{9&w3K+*=;-GT!z(MOzMoSH&q5DZ?HFUF5_K#=S!`|pY! zH*l+Px5!h;5|5HdhNgtcKEENP-Nf;HcUK32kD~~Abp&rbXj>6<-=;kA9jl?v z$RRc>UYgElN=O3~)ogZ4J1vfOYMp~)JY|!!BsLT%df?$JvIZuu+D?=4lPoyzEJcMz z-)%W+W$Jh`MWh7Ucc*n~kh!?u+aZEl%x%RL!AB4Tv()G(DBKEKaVm`PZDP!#v-sAJ zDx}!CvtvBRL^y!wgrDTNIosmAIPU!Fu|HRmweI_*C&A-(>>8LmAF7FlWCM!>@kRI8 zB;YUrc41!zTJEv_cuprRc#+GfKUS$BEQ9MiI{FqhC#S-qyux^n+?#FXx3jtea4ida z$V5;#bXC0rO|Ny~NV%*DAV)5pBc^aU4yCQFjqj5LMy+^)X4OXs4EjF2BR(M(MtXj| zR5UQTXB=0Gi-yl#a3B#uKf$Ak4*qV3JmwLNvsIjfzS`03%dRIY6%@yHoc$^NOhLY- z*g)`S=P)J$pYj>8)CXwk(c;_?tEi*`hOgHD2$644fI}zCd%ujj-M5pkCty7HM$0hl zaM_q?-dSjL{ix8dm5=ap-RKg|Qp=JW8Zrwc;29?1sx9>g|MKMYh)MBVhnl^YnRt!3 z0U`uClm@#xnWo$<33`5&(mAg*pBpA(%vH*GF(THmKUalYCT6$);$9yI6c zpf~~I3Q-auUsr6w{mb1`cHI_8@L;K|>L)%M2AP+VQZ>4@atPt&%tWk%kwjT*+KS`S zj8xrqUs~42!N8&`?EBVUh2k$4hH56Vtm;|3#F{ba(AmXw6?Y^ieDNB~8}c0ZB^5AE zYBZ@nhqPZ;7$h5*!a}Ss68ei?Hj!xWR0Q5Ia3xO4yfcR?5;-EDL#cwAg)A~q6NA8W z<4n^d>8mT@?m-QdiLQZM=Kj*quU2$FKNY^l0zHyW*q_Nwjfj3-OT~>9+T=BrO4xYJ z&&H3wYu+;TewEMZ!KjU0o3lwXGcPSyPj?P-*O*E%j9h*#Bo7cQlncu$2+kFWNbfPu zVp{N|6Et6*W7VEA1@cRKqJ<74nA@}2;fgOP9|dIN$(4|Te{&`4{K{bfk7Ex_T7rB) zatg|@D85^gZ-x;rWw*A1yIjAA0>v)dspSq@O%Hl*6JH!hu4A$+C?N=icfNH?xT2u! z;o`}~plZCuPB6;WzBmNRot>0<$|1IafI&M zU(TM`wzr}ddQM4Fpos(?4?2_0prE1DM7-g~wbNdP2xu6qaO*w>5q{T-T+jA<{e-RO z4yNaHn}mtEvrApMa{0T-?R=s6n||7hB@()r7aD5{{0D3!I=4+81MjTqsTdf`SIhfV~AOXZ`!a0`H%O& z#yvDRur60?`CfLe^mT9foGwOtAb@$5yce5Z`^#Wl(tB8r8Xc-QkGZ_KI2=Zg)kTfc zsSRLIL$A{~`5wEall#@oWzuUu%%RRxl&=_fwrVkdwmRgCDi1W=44{7ZAE3cEH|ak0 zvLH3C`WD$ji`&=)fbNE6Ek&;Ot0f3a=}VUT|HNo-E-ABHl29Oz{A}A&&sssYcs-!f zLUSY!LiOt2&20q%o0LS?;E&M2wWkeH6QP~%r}GL7;-{gqs>!woL7q~P#`WHyDg)n_ zm@9|3F`X(emnAo&l~#v!zq<$Qj07MJ6;8Bz+ki)o=bcQgF{&C=A@VSzFTePko<2P_ zZrA$n%!EMmkuKO4M{C)7Qe3YXK|eLxv`djRk`m=G8nUQ&R@Es&GBs)IT9coVkdhuA z(K0sj#zzNiq6ob9?(PFRy5nCDDG4jO3qDiOA9Vv7v;~vR$DNa7ZHA!j?7av#V;^@; zZ(@%sZ2YE)dt=_CW?Eei%yA0eu23l6e%|e1XLRKa^tWze_m2$~mG>2@&=HX{U>W4i0cuGBq#) zjZkY}FC83$OH#5}+QPB02vykVm{0kW+x5PD$vs_LSt-F-V`?ssil{-mXBJpvJr&2_ z-umJ)Z2-EQ!If3Bg;lxaQFoT*ri8nMi`J5Dznp6LxFAf5@N!cqkla{BZQ_6XaWx5r_<2wTtq-=Js~IpJ(q%LGlLh- z?UfaSF-~Ad-22sca;rcj+$!MPE%YZK2}wp)_HAw~Vn58v1Tm#DWwIpLgU`hTF}Zn5 zMFvD$E%82JA4UO3QpC&H9b~&|zR~qMwC?@s6ZvtP*(8l?@4(n#wQ5v%fmv310V0n} zHC(xk)J_jAk_(}Iw&!NSA{IBs2XuFbZ2MnukSD)-dZ=h=)9(rjr^Yf{XUK-oYa#rf z@SXG>j`{J$nvxO2c92YoT@NO*O1T)IpfQ*g!#(Rmwcysrp8^>8-uO;!<0?6C+P&6L zt`BGD*M4##lw@|h4d)0$Je*fT$k_BzKfZW@3eoun)gZ*!?4nt zGVA;1wWokDoP1UXS2B#%Cn_2naIuda&qFk$;ddLYil)zHRP19lgQ#2ZXttGKM09=Z z?=K-@3l#1J+b;K?P?;>u>ielfq(x_0V5ni3GN} zy9k)X4L;(IagViIPLF4mMh6F)zooPr2?2jF7=}46*-yYhj)@s6;#4;Jao8%?s-%o% zKJ-|Ho8Z%~wKdr5Gt+C<_k>mG=PiU8;u`o|S9oe_eVK!NeAl5f*kA)NH~XC~YFGJ* z?SjH=ne3OcDUqR|9QD#arzg;}j`cP>p?(}wPei`u%lrWa5^db5g=HflNbVlx8^C;R z-ft0hUeL|qoa>(bB$Pj0mN^2&V$_M|^aU2@nP7FjZj)rzmo+e|*kY)%t(4(g9_blzBgnh4uL22>q zy&hdYrW{@tR_nY$K|zOC!=@8`*m}j14htgCB9EtTYose-YRe5at+{!AySphRt(JNs zzmDtY*X#1T*V2#vJ?U;v3_`e={N=el-N%gqpZt3w}YmPVqk{N!qL*xD?p znLx5$KxbeYCnM}5`1V}Z_Ze^+;Jnub#=f3M2Q?Hqk7mvi%oS+*2t|3tbb3jVJ~XIV z69u}&Ed4o#m9z0;!*$1K6>}`bAOl{05fz)tKlUd~pz9g0Epbzbqe3kB{rN%km$d)U z)q?eRB&Cz;F+zI^U&Yjq-@-T+>C(GbVjAGUF!2w4^<{_|%Ae~UlNe@U@fC;=tqXmUxIq zE$$YakYF%kD(-Y_MfolK${X%fOym zx5e>cy^hWW`V2RbJ2L*&N8R4_hYSsUS1!e16ycTWrA9l2##Lq&59}_F=KEX(0=3QQ zr*$jrOm^6R86C_m9N2iz>5?1tti_^9)tui3x_#t z4dVwNw_l(<$n9V{=Jw2n$ww{6G*t*%{S4;VWdbSiw2PDJM4$lE zB@y~K&D&V_gJICq=E?Rn5U%sXf^rxq`}GwE+L0=MeN5*F=T^u`$PZq8t)WcWCg1vbk$V5 z!Q#7tBngz5D}|^$Rou;EwFU>w@Q79q3)Lq~)Y;64OZQLceX0r4zXMN=8OF;BjQG?? z7_%?1C{@TqET)w9*< zhcVeeWFeGp#!bv&U<>12N)$&v2QBC}JF>s4R!sJEo#7-tIjpblddxFWRs81TYp%mF z>^I3LDW6Tx6UP_7=_%YSE9kr^!?SR4a%MxUWt>u_veY!153+>y+n{s}-#=jMtCPSR zX_vIlbs89i$c9nYTf%xj{*tMp61(BLn<3=NF=#iDMZO;O7_+iF;%k|GB%o(rb-gRA zn!cUaFK|!hmM%K$m*|zLHBf1zn)O*C7dPDW(Kon$tyf#el71}=?K)*WuT=SF*LjP@ zlfn;mWQhZt(L?A_8cV>Y%&a)`wdl*d>HYGI{Adtp!+nm-PO=9$|20qI1G*n!e~v$9 z;2Z<==U=rU-hJ#2?3AsOhnWzhA|NIfELv4Df<_vb{TEf#a>nl%PX(8jI zv)BkNEiqxQ*h6`lj@H0M4LqxjEPYWVO|6J=KQk`U`DGEKO#XGYOx}ohdr{L8OZ?_@ zMCm|%7eu>8zajV}GQPJ6)v5q}R@U=Wvu>2O{!_1z=kDVi=1|tbPw5~nIC$-@e9z8A z)Idl?*qyTeenqW<2m!N?E(><)GKX2$TOUwdth3h`qvN#95I+;~Evh{kS*0pBw5)y~ z&R-DnJl>m|p{RUSRe{bfN?#kh6VsYfu< z?#llsctq=a+xdR@Wy*Q|5OfiH@M~>DR)qEIyT1P388Y%g%a~@hzh(2|A}wE#>?bdG z-f?vAX)Si&LU?#8{;ptmu6p?B97h!(#?~04WG!(roWq?m%dtdG=4{yZXX4lAi*18w z!H_Vns^KJ-(*m%7aD0Eum&dyj=25Kv3&*l|V^{wHwC;RYH)#9zc`HPdHY7mM+TB^y zl#IJMM#P&`&QrXwQg7MqM77XxZ6gqdur8T}tJAVctJ@3OMTnCiAH8j;J^@^^HQogm z0|R4$^o5PR%mi-m!+^Irk_`;^Y$M7zp&<&}fcHibx~60lN^IQg6E4QGUSduCgPvCB z>0G*|%5?}{0!w^EH)Cx5+~%a;5OvQ{J|l9RB;;IRWBnX34*YboQm?F@irGHUDL&om zqnOD0#^pyGocw`h^XuhGMy-Z6Xk6sy3kVO6;$)au8?D#|{H-NN)y5NSNWK_A+gQ#i zZ%Vy}+EWC7r(MgYr_1yiIy&Tiy0Q%!%)%#oNrfdFx0T%qBk*yI5v~C5K>nWE9Z&4D z?Yk>aD+6uM7F!PFa0EkxbYW7|wNxmm*?@LOM<)-SXCA!YU?qK!0ioi6b1vA}!^jcX zwFrt#_OB*HYYl8F__A{~)1x1B6uh~hnk>KRCI&gyxBZshAHB{=au9uEXxZ?7kDLNi zTH(V|tg4z5&RX_;WwHd_LwEGt*2b3d)yFl4h0{OqNo09$F@FRz{3g~IAuLKy?0bKK zw(6i@&GzosQ41Q>Ls!{Lnl~FYULYb5%oFSi8!?{)SLKm1l+ZQq8cqWAfsS5 zlc+9xZ%B`|k_0rPt=m@B&-98)DkFMf7)8b-iE?(FrI0(}v&NFea%{8XG`_d~?C-$0 zh_hBRiqCh66&}3pHa?ZM$Ju0+dzR78ufjV-X=1_^{j8H%1CEr(ACzZRlY8XXWbZ$m ze73XmZNj1bj_BqG$-LH?!SgfBo#K-U6n6j=IyLkha@9@=s_AjifSM-ycf|7Q`5s5Ll9PW^RYi5FqWf%r?(4Gk#}k{vz9W$Iyg z`8S6}St9LTpc=W#<++4SSXj@V+j*+qY6djBuGaIYs*X(y+F3>dE@Y`h3>cL1AJgrw ztDbtUvJTDH4LY!o-%Dfgd9|C@eBZViAA^f>OG7P~5wI9?%QWpK^?G0i+TB*A&V4S> zgiC+V2^|Fu^rQ4X-#Zv3l82jWAa(<-2kjHDvyUq)nVG;7Y;MzBB4=Vst3s>}q8K|1 z-%qpV9)$~%hytv~4vR8>)o@S~=Q zCEJ*18aM|C2qp4=WRih?zmRz3-<3FMb_na>PHZr)KcF24X;XdgrCVnn;fgJ{d3c(| zaWFX72aL0aS?AOvK0Q+Q)w}NML0u?u-HM<*BFmV0St1|nUSKxDY}a)Wgq90I)tHPo z5hby|tE0A+V*6}aHD}%4THmj$cW!yj5C-}--gzI%km*oe_KEGmd5s69>nhu?9B%^v zKMv!DM0k&5t+u`?y+94l8YwS$s#^5v^IQUNP+5aYcU)ls_0nxt+Z*RjJ8zI#sig@b z*n*md?inWMGGx4R&l72eQg2(3P_pb?2=a*qDm#h&oB zy?ZqD3&k&H675cZvSJm7kg2*`C$|i?6yH0H0kg!B77x}Kg_&F zRF*GH=Mus#fihmZJ++Wx6ePQ)(Bmj>a1QKtD1>M&A-DCyHOsYs?i2hk_TDlou3%di z4Q@e#B{&54;O+?|xVyVsaCZ+7T!II8You`r!QH)acel5)@7d?vm%aBG@Bcf0dUP*p zEml=cshabfUr`f#h6$vsOn+$>9(*jOCU*FYXfX)Q~^vOIIbM=R%;HVqmi6r1`AF^ULkme3!QpESW{S`itaKBDe25EEN^$ zlY~-@?y|eGd*!6NcqT`Gas0vF?7qHMpT@6i5U|K>1PQy;8)m3X=f1zP=|RZ9ZcLL+ z8bi+eRv%nIyxN3B{@4Z3;*C*>D@^FJ0+g~IHzr~6%TVB7-G z@wtVmOY6-}bVEn6ZJN68o<@nRW>sIR(RVOj7yRn|)vOfNU5Dy@qT3CFu;4$LNjO-@ zc_I>ux&w2{;Cu9~!AWzoK0n#$m@FG_b=ywZYDLK-l)i?14rXU4Ylc-w--r)gP2N3U z<7`HJ1w=S^E?h9}ASt7(*$FrIZd2xYPE*o|Cxu%2O0nUKs?kNA;PlEew;!u&)$53I zycFyg2bnjWe1rwlY@wmt{JmuJ&|i)x)!&;u@9(!|l+Y4vy*SZ zNzfbcwaISv%HhSA77E2GJfgjTbRJD-mG|+GM}?uy zMn3ooB6NMXFjw=f(Kj2*{YSbB?W)h^gCCrJ>jx-@kasJ)GLp5eXUPzLYWvaZRazLz zGhhZLan|;n#zE`1=MaDv)^QzHx$NkU(Fnlp5HsqZ$ijiB%9z<9jV3Jow&y?>L}qT< z74^6{a-G&eUS~hQRAS6LcsE^pW%z4N#D>%0QGLdcq(r*7k};#S@AOSLX*wbklHHZi zi)OxCl$GAdbj<|!=WYa&CpEJ1ipE35>!k{J+3zRqSw0n>O`(MVEW(VW>|L2K>{b&Y zJGSu?%{6{NUjrLoSk71gs^L%f5>Os*$F*R(NG3xWq;+gMr9n53w?A14c0XZgw^ z+Q)PbRw-K?IO}7TI_H$pT$Muu${BY|F!xZW>f9ZN$@S6uF z=4Qn%Ha-qm?N6CVgJbV4M_2#F*NTOnD|OvG&s&tjkx(UOcd&eg_p5ct{!%Y=SIFL$bgFZ5z;fAY3Z~yDW?biYg7B1d|N^ z;}T96f(o(vx+OZP4r%ACX8sflMzGeRelT-KIXL3#m+wPE0#&U9@1YY~E|Mre#qXF9 zr&^!9hdAws1#0I#CR!%r#)uyb0>Q!}IX;{cWeD(gWHJxid?%CFN7K|^V@~C%(8T}WqVIkyY`03MXS)#hcZ_SwXe6ryf0&%o5}Awfn|OXof##b zquTdkfK!PyRZ(JN2RZm5ot7y(09o2c*}CKld#*W~)Xx<91^PJJV^ug-e*P)BarC}A zn%xlh?zPUcX;=xO=uO3`d+_;ZTtRbXx%Y0Kem~&c52HIv(KMGU-i6`B@{;PQELJ(h zD~Wpj>V1128Sslyc-Y#EXR}9y;ch&#HKoK(l{7NvYlUP}hZc8}j1}~F*@78i(8V@E zWhGg8E^*(4i?N(%S;YaV*PAM&_QONME%J+)c2!OOrTVRkdrwqf_Wbdqh81NoR`@tB zO$)qObvCA^-zF3L(o~Opju_JBBj5nGiu7jblj-Ze#H)}-khVqW&o{9A!5t~%c>scc zm8wO#Gg~PmBV(8i`x2mqs(Z+|(pN!&Jj|qGQ5B^V>-YfR{BOLU*ZM~oG;5UAwAF}D zCx11K5!KcDYlzd4MR!MP`1HO-a^RCm))|KNhvn+Gw{sz2G01e^cktLx-Em@(kf&ZD zdP57pK9K%so5_&NoAz(W`|j}sYw7S-^B-nl8R z00{27?aXK@mfq{sei>d%n}w`P9UNhnt?rB=si7*qFY#wM9z1_P!k{2l!6y~D0Y^D= zU)SSh<4(4fs~KI;x-aOQ+6N`3B6cbR`x5jT*_w8+peX28o~kp)0u2xM5-aKJ(C75) zyCm(1i4Vg<6@RRxm2kXD)~9R$5)A~hBbY+)3F%JSE;ws4M7C-(P7S*;v?qxGXs4Nt zMO+Z~9YVaGJmH;0h$2S3_j6~pG0j}p0PRESyV;m?J{VzvXbH)%tkeZ~RrySoF(|T; zVreqT4>GXRPP5Rduk5hi3Og{QVh%wGw3r;s*i{LQsjU5z3*fVEHkvu+)$Yo$g)`z> z(e#afauYb{HigBEyIdk&eB&eYW)&!O+7%My}Kslc!ZW%~-L#nZndi)k2MoK0$2WZpu71|fC~qKSZgwB-ek zUMrp8GHZw@>v4)DJKZt2Yno21brc_N9exwx(aD$bf`N*CBPD8eI=A@PA-14nTYfSR zjyY9AP+lHj2!{i(Z)>4E=f`QPN*&8BvJ>dU>|ug;w_<4*3j~k4=jkJ2>gmn^fF_8< zSOtUd96&y7`Mb=niq)Cibv1L1!USA<3`$CtAZTSIp6q5UY6#j9+C_Ob9Ci4YMhisW zpA17`OE`mqo=C&vH_Cf%j`I?eY)Rk3 zHu#G+j20v#HPq44Qa{q&y7<^fRUXXjnnXRQ&z)RgVTo4QqF}r<&DdUQiW4{EM$ zPU65e>lnOKQQW}5DL%T0gS{*8Yk804hqzwqMF=V$@qkE~-B%6EL6Fblb<8 zgg1|78|@1^F0*2yS9yE4DgIGNEdkmrzq1>$5)e!RFd`x&l`g+le@lN|HyUrvPvP)7 zNjsDjv0pmZ>L?7A%m)ZsL@*U3eP&{2Hj5c*PatXenS%iL-sg9CAZ>n9QO|-0e|2>8 z8A~_`Jg?x>qm-D7TZ?f+9bG%v$tjhw*PKZ&HKJT$YsE~Ank^}2+e?sQ2vFgY z-B0Fs(;`9a;b+@)Cw?D{a6sD7V6-C(-sCpjGWZ3lpIsK_aw(U50v049JPAc~PSFN6+;qHIh=h=liMU9~ZiUR3U5H@ZF88 z6R4_pR9cLuz_vqS!VNQq;+q7|ZymKm{UqmWj~a2oUe3yEbwSTaF$5is*yTa4q_I!r zrA8?~I%{YH+5LIFHJCmf1vWc<1SF&4J%yAVDTY}dp00i#?Xhfzp4Zhk2w~o~faphWZYe~#;l5> zeV7lSRLvIS^M~;i6|2s%-i^gV!e5OMJd0ww-M+c-8G8c(5uav8{j{#EjBPsuaRAGx zBf-yi0e%9oA7Ju58*IH+SMmsDrR3C%1wJ6ccRvfHdGbDIP8&%=-}Ny;Mk{$#6n8{vcoL-D%R6L%_*1HelCV4Lim#Qlf-msJ>)+Vgd zSGI|NKjikGgE3TvjdK&vp1H5lCW5TiDO>$98$4Bs)ebk>Q(W!ftNNfzfdz!gyTVTz z&CMQWc>W(%YWY;b!T?zze(x<%lS(mPAoZ2NkBMjyGRCJhz%_&{rbGE)6Q}^d&Kl+OIsI3LR=wZE z>vVgq_BktjUgtk+wVO$_kgfdbfmnQY2H(}>?Z}q@a(4C_Zw?DkL4+IA34nda2NFwn zU!!p|{3)%SMqJb2JKT&e{#5aMt(d!&b;lW>+x}Ijf=C%Y)MCmT z1axA{>M{12*2QZ=LT>vi-JLZIDf|d`cz^R}(@ZZ#iscWqGnk&GVOt+fy$4rs@B_UD zW?*opxZqZIKi=rY3OBSQej$yjcbRT{*L-?u-hA;Sz2NY>4PnU{%gAETUz)D8ZiHQ; zZSHd^R>BOQj#k?d??RosFWl9M_HxByVek0RO-+%y*l#(KH=mXlG*;zs%jrRkApm>A zPqBHGscMzj;MWrG-J-cZDSbJUV3N%)Y#X3d6F5#c)XN|K79-4mL7lQ(@N4Jy;2<@> z6<-t2fspeH6l+ynkY%j=;bLJ!^WFsJRj$wU7*m~G*%^j8anP;9;~Fh7#=8o)h=*W` z*v>2xrcdCMo)Ple@w-c|v8mXb2-FYq&kEhx2&IC%wP9xiJ-U3D+@m z16XV#*b-3;*++~Xv=vBL9Qf-jaRvf-p%2DO%+nu+j{j-O2-{(4QCnbp0Fz5O0jko@ z)%rBspEt(!$4%7G>qtRr3dg$fqe-?hD6!?@zT}AoUGfUhFsGi)Y*ML-B(F%vBx00F zOh4DEPcrE=Y~VG=u}GuZ(@-32iGlb)4;yt+dX1A`$NS9wy!uQAR~3@fc<4-(I^+4# zr1wB+CS6b?94Zi^vwZKDod!T6sxZ|rzV~I4PItaqQSm*0vbpD}80Ih2aJ*QYZ2B5e zq4e@ttI#=^n7!Q`HLRakeY~8(=Q@#d!>5<$y5f+2{(6SU-oWS~n&@Yuz7ts_#W?8) z8#fBngWeIF79jMZEXJi}m5)OeKqzVIpP10)@H>M4#)iq8l}+Qjia%`s&J8G^@*on) zkpr%!uim2Uw1$QHJWaKuK@X6u?2AW0BR zttc30G8-Mti#guZI9w|Bk)F#t#7UPb_RCj*|DfQ*E0tYz{Tv4!nt61J+3pgci{gGK zJ_~^@+IpB!r0n%BmYGP}4uAE790BccbXAR>ktpa#6*$Pvw!(*WgeVoe-cSqAs7{JL zzPKRXq?>H44AB9O(>xL(NJ;-Oe3N7)Gs^wocPuz0st;719N`_Kr`5QTf?-FZEYkE# zo~lPAo`g$`J^rBl;A2=H8{SGzVms!Wv=^#YLq6_ZL)*+NbR6c%9qDw@XWIb}YY1sH zB4GhOd%q4@&sRssL#b>D$gaznANr1jt@@&CP$Kj*vJ2BAM7* zp&%0zlgY}%J=k*T@R{%J(`J|oJwG4cEI@c=H>)aB!Z0~;`7}#p{hk2T!G_}v&Ck?f45-&d-|(E_ z8I7Op-x<;}Jlws_Y{JZsm%wN7dPhl7Wu2TN1{)<#Zq%Ud`ZxsCi!2`7N~e6#l?bcU zX^6%^93Af{0dGlph-4R&`r%=|GY=Vxr!V+Dc(%F6%3yTc+Kdl5=hJ_U zbN)cVz(y~Hhh09%fbCTl8U(9k{PV#f8vg;CeY^GHXT0o$JG$Z8cEjpRHc&Csj5;XC zS=+qClpSnlj`jBQ?L3>CztFiwG=$dX#Ldzp5n|&t>VAgZPi$*&80CWIskgYWZVfYR zjPBrR%sug*#;ous>6Tgg4GjXs>k8qZ0d(Zxxkx&i^+1(;oJK5{vs7>$?(a0eo3`q` zTFH5gRx&U^s-!{d>3$#)n86v((Ib;D zF;~hL8usOQjkAY>hrQ3r?B@ow^pxP(XTB-pLt0zTklJ&}*9V~&fjFHU%XNQTM(5~Q`Y|h+Q&F|_f2S>wDe8-D=~f{ ztA)^!>2~s_p$lD87!)rc`|P<$cp?QNl7`iXTo=!@5sey-y<-m(sp?#;E7la#){?;? zuyDN))<56;f-6cWpjl;~liN^wMD$ao$5P@IbJ|_n?%BI+A~p}@qtqXSL_M{RAM$ml zgL|LM_a?F|eo?;V>8A~a^WXOGFz~s#Uu{^OjLRRSiRhnU7JB)J6mcwhBAjW3*Zz4BR3 zmcx+zcX|N0uBLofS$TX2TE05Lk%kmBAN`B%igcuPfd1kaDzNs)SHx3zaN-MtA8$pI z-pnUhKDjt5!+zfQ_Asy)UAtjnej^`Y*rfQ5|2KNo$Zh+>;NEgC9P-{#Q51FiP)_F| zj?Xcz0dIo}K=D_seb=Q@!3ciEOrUGo~+L`En5s_>tjNRqZAJD?YZC_+N;E(@Kt(>eIJh8s#knm2nDq#<6Z(?wcXIo6ry=qxm2S?gB4oSh8cvp22|u3mCcDsfDn0YAY@s-B2!W{+}!+ zB=9l299FYuVRN4gO}x5Eq+t%`fEV-=8^0I{NDHf%enzMhg zc=D0n1qi2T)|SKEFP6@h|T|a&$~gs%Oo<4j`42x8s}Zi5n3+RJLB+ z%s>%G_XGv31%b=Cyyaw?8A+qQ1ov(cUAf<8XQ#+ibnA+W)ONP#ZHFR9MG1?#X4tQNO4U1oh zYdWWC2ewr$u4_i;N3N@de0J^A`MP3q+Ez!_@JIE1n)~<4&tZ@LMmR+$Hb9Ba=1rBx z<>p3A^Q9o_(u(JcShR1gj6cTxkXgveNJOypN=eZ3D+29LH@Y3Jx$kNsf*3d5X2est2ChW-YYpx3{l1e72;DZ4 zYao+t0$T7`HpaCJ+x%hB4%kxWA6rNUIR6mQS6=lIme)|T^KgMsu1N*snXsr+=VII=8`j?{$m(p0*qV!C8< z$(M~j3UD~xU5@GYcU=k9a`Na`=_=9@7c>~`-KFXw0USNc9Q>CUsk}*)N&x2km41gn+>R$Dj0~)cEP=RQJ)RKLrGnIo+XqgOx94?sy=I8jZb~qage|f2gpu{oKw$ zZTflWlLs|D&v8Wa9Ywl@pl;M^1yd6cr9pK+=sONi;@%|0WU5Mw2 zZ;D?Ib4o)6$Py zp_0vbg5J-Hf8r3Y5W-R1Lw?L`KYhqDZRhQyy=!pTph`-6kV#Mca7$evL7J~b-Mn2w z@66|GX3?7Jx?1|1Z4YhEy2D~igKD(>QS(IK5y+0Ezs5U8xv||{(evo<<#kf4)R1ae zc1VU?=JM&+LM@*j*fwf>$Ex9>NdFckJi?NPX+5dJs=cV~mKfL*q8v%is-3;c!wnG+oCp2;PYKHNk%vV^VGtJ0 zzKC~84v`EG6E>kTQR+TNg~0LAghfFJjJo!{i%xcs?{*QrT zG^EuygBc%Vt4U*|DJdBO6>Wz%t%rMlxa5;~>e_d8`}|05vhfjyuRkly=B9dwu_fBg zrk_AMwF;O%dYaXD!uir+^quVMWIjs)@0w0Agd)sb&yiiUg;XtbCy=kHcAD#OvDYNZ zH=t?A2Eh00zUA8a<*H=eR`JB+l%QG`>$xwNk=x`{iLJPk6B9`HizA1%qwVi^rDaor zs*GEe3xj5)XBungYhmrF0+Nd1mq!$4dREG4r(|I!-_vpGKeRfQoF?wT;5(5!5b?Q? zy1A9Y+YGv{Jj6bKU7kkc$QS;dhh9Q?rhKo?#gCEmA^@bVG{Lrkny@C0RbytEp5K|k zmxiHnY+;`t?~?VfMuKNT7GCSF%~4Q|&XnoMm2C40revB{o*Yy(#lc^m6b{>JNMzX` z*9Bo-JMTcf(qpmH)&gO&z2ko6LY>9lqt?s_tgWG4hgu|3WfYPjIg|HWW?55|rQQ4h zLzBVi;0<;-xy}36xUy;73gFWDvi6ttz5(xYCZgtjfCLS9h>pBA3P#VekQHKbk?^Mb zK+)+NKTsizy=?qhzBpuF0${*U;3BZuvzm3tgCfK6MD@petM?I+s&oK8CzoWKd2Mau zhiKNKuI2SV>9A-DSn_Iz+Q5zPJ08k2hsh%S^vG(=8;Dd2>F(3aN&m z#9({JL`}PVNZvowS#k%PGK|j@3G#&YlZU_4#>5;RZCCECwtbss)F`v})`~Z!kdi%G z-Hm(f^4rlyX)-3N8fyJMv?JOd8$Q_B*fm}d!LGG2$!B;afo`()iAV%*PP-MzMWYl< zIz04g@a_av*s*C7&NOaWHKx_RpawF)i*yWu_wD_$-MVS~#`qXG-964)$j7mw zP!34Sa586g-P6sGEoo!RurG@v({rY1ld(H;zuvQ99f(sk4R7v{2tz%hRemlqf7}Yx zV9FPhr!;vdO52S+5adBXwUd`9Jh=0eVrDk4q^FV&l5nqng+Zkz@%@~r>kvHrE%-nX(X+7(h6#FeC zxMLt2zDA;MY^1o&P0q*j%r6LNgg+B~E2$QpcKeaFzq^!nr5Nz8FR~kX~HeIEeg=!X*goJY!7MA~%b)e|`-84>Fzr05o2cZ_qI%2Hj%bdC?-jr}J(!)B=G?TV~ z0Ddl}`sd{p5mI*c1l^3M_rom*x|F+lnkc5W zoqTxkovJ-8(U5pny$aKuNoH#T4Y$s-HN-_znuTH>f5ciLZOjTUnU`*hq%- zefJNf9hk*;1Kq>!OeIaL9|(9}lJ15qvUxtV0uf_A?d2V|AnxDx8`YvE(n6Anq3AWy zZj^8!OPL&jd-pcg{hLwtGoI6#6Q4ufD{q6gqDY0}XVQj5foY1#j98s}m1SJ|f zqY@?C@8PN^W!b~UDo!6J=|Je`Em&5e-SJCWru1gehVOv*7%G%E?xXQE@BPCGhZ9iM zK;$#zXC30Y0y^SLC~>WA;P4rFZM<2prl(=`L8d+mD5+Mu9LkAAh2gQ0k}tKWmx_Hz z)^+^ul59dmAq0<8*U7bxivCSnU0ppTH=`JHFe$1fE^eYfUj*8QxNM{Qw1Uqz4!8>lFdQC&90ejULI2aEQ=t(ZZqEM|;DwJ5@tVtxjPX=+>yj zwb2Y|2oJ*S3%r!vlBzI1<>N+zaI0>l{9_84b1Z1Mlwr%ml-cpfiQDWwf)SUstlH;CMSR^a7Q# z9e@U%x*rU4jbX_NNu+qA!w8+&)XY%tFs$>5TM&wnzn8ad3YSOo7+2g)gfPp zjkq6=-nK-n*oy|BfVCjEn0#l|+F^&!dBXHd>gpXIoq6<9sQ_BWg3~q_nx95yR6UFG z`d;r5dab1lmOYi!v!Eh^Br}#O?(hsN&W)f~V(2Er20#~fmEo-;^Hzi_%a1}AbJ(LN z@#8)s*h9n+!iadS!#;nGu;vDop8!)PZEC(eL<5=fd;c+7IMh`8*D44{g-5^zgDdg| z%>*}YA>Mrbo<}R^Ss%!O@K^OF@^aB!W8m2(I2k&kn090H4N+nGlL z1?MR=Pki{gu7GDz?^JV;*-*w~O-y=tDZJrL=fknXJ6ht+OMoFS*Ufa19xINnQDFi9 zr`&Plm1%Oo(cE^gi?K26vcN?&uQzE|q}O&v18;_9AXL<#y2QkCOdj!J&hwhLD__r$ zu5U}z=;ACczmVr_uGKyIL3S>xVSr!5n|EXFLUR4b`o&Z%WFo0K`txM;E^mZ~V9M*a z*1DeVn}s|jv_g)6gD)5|*p->{>*fk{7x`-#5!tC>g>iw*{DafUG8+jxvL;w?3K>%?BC%tbIQni;{|-pFSS{#x(e zZN=vOM5j-lOW=CRy#V10aZ+C1G+Xf9FML9@-v@w(X?J)2(qYe5^>eiDKV4hXZ$3&& zN4(;4PUoDiuATX3HGig$^yRei{l1bR(M8uJ*m{$()Sl zSYPv$d}A?(H;G5{BJ(7zo#(U?AIgk)R10y0*szYMkoSzYo7F{wx8xtiQr?)!y1V-z zXr>9oB43O^XtR-~B4T8OD5LJ3(Q-MZ!%9up%&47u-j*@t1zQc^RGxic%44(g(Q!2e z&VX^pLARf>bWWl~+@G&(vz`Anuo1)mIfK`E>ZtVK*M^*cR0?M4LM#>n%ia@-36|!J zoWMnkM;LE)Pv1t2;Lq4TDPLXL$hXXSMxQbWr17nGHX#7Eq}RIZ(|u|C8b3&)$s;81%1=s^LO()jC|QKqA=(WLN>~-nKk{* z=)%WeZ)NfNZ5GBbqRA(DX^W3>KFby&9s+CtAnW;GY`l|+Zj#T0o+TWk6Fqzvy9#Di z@zE-a^A-kz3HrA~fr3-`77?Ut>4=X4;CMUEA*u3(+RFR3v2v@66Rs(!6|V<@PpYaY z)TXQC;sj1@I^lMO+X5c!-+YXn;eMYiD3%Q;N(pNV?*@ut!ofobCfcI`&>PXT)}l`q zP`^#tdsy6>itMY?F_OX;z}c6lV| zg^cpl0!|_*7=ez$WbMldJrw&NpnniKvHsXd9}l8g6QOw&Id@iy5x_6*8ug9v4Qv|9 z9~SmxHrl6ukm~t;297j9hK1SzPC+;(%q#c-EgKkC4d0~g8PaL?`na2xNsvi)JvH0@ z)%?fLy<2Cb9AVBwRHH*fHEOW_cEW(O^%*G*$~8 zb>x83jl8`h-?@>UUTlUbl?FZAWU<$(EvrLT4-^d$ylM#M`M|T>b@Fy!E^GX?&c1v_AwOT+m@8hLAZX%~Bhe@0=NBD1Wiuw?)7D zydO%^7$bOhh(alwVdE*{$ZXmR{iqD1rhfocL0qdNI&cec5ppLs)eloIqK5jNU_i<` zaTCTOpf@nF0jjz%HI_3SkTX{B2Qph(TRERYMk_jIr2va0n}_6~mSY8@_e;tUxx~;R z;~}p2riqUZHqi>R@@S3k8D6!h`FSggX z%*)3TP)$^l<~qW(IqAg{*wPv}IyCg7AL*aVe=;Jxo{EMsO-e|g3talx)F-X1+1V)^ z6TeOr4_)M)D+EU_TKI=h{Xd*a@DFO$+t<*fl_x-Hgv~N2L$yLv1^`B?{8Z4kA^oX* ze{(R1rr%v;m$g!18t?Qi%5M|{Vqbb~#C$fEP+?5S8z7zEtDNc+Bmi>PP#u81VmaUF zNF(hZJ`}L!+%G)$z?PU1X8C%yjY(CbflSkw8|CrQ?q|dpA{}Z}j-t`)Eh3bk5Z3ry z0yMlt2rC<&x&(hv|H((R79L<9rAnD1!B%gj}5#EzT|sqw@k!+ zBHh$;Mc?BpcrDz8?UHF5rNn*E{>eQk|0Cst)q^eQTF<Sdp@o%l8Yt-Y=98H71j9 zR*9ge^u)88?mJ-$2;n#aG$MuC+P7KVFUM$Oe9%BiTL<5U_|C!g+&gGQQomRK=Og%& zaOaU~xn^@#SIy|5*)g0V6KMs*+46Of!CnSftI4$7`e3y7Xw)RqX0g&rJIU=BorPpZ zzBfM3beNO5Vc*xw@Is2KhSCIouB4{^Xp~i@Ogk8P1t*tP6>LdsrBPYOQL3{rL7(U} z54juTOBa3x1&i_TK7J$kC!mCZCumpJQu9ksEViVQoC2+Fwc1CXS1!}(6XVePe(cEn z^t3v*0M8TWmuOy0sMr|ou|I(8T(unLSwRoSU=7XSI92lUpK7eVgZMYlyUJ*zY#j9O z|Jm37>GeOp-7&>_Ksmf%wARq%mmaPAJbo!YS0`6-33~c>@Ar>uVOpflFc1e4XcQ_b zQUS(c*<%mIq6f)Dx{%DB+4uq({LriMDv_th1@^@+2L2yg8We9&=Q;jOhy9^3X{x)e z;OcBRBmZkA{^#vzDeQOaBM(oGXzRodk)dg+G7D2p5MFTrg1Xq_GK8_ z3Aj-ELmP)tW29I7J*J-vgsdd!kULRVitRQ9~?x6@@$Py{XI*|2$vv@Kp1RTR9r@ zUnDgEdZW;~hU~#e%Vy4CxkFUHJNlL1lFhbQA@Gmm> zU$f?WTcn zFa6b);v>*PG-VI=Uq<1-h6fl>*q(TA_+66!*n$jbfz>5V{U2uV6?8u?DQV^*oAAqj zY=QI!Xn|qMEAp35{qLWjL4YGM&Vss^`0q=9P0r^qpheJ!Nu>Wc@il@{^hFZ|+ceDU{d?W~EuQVfd65z<+yw{3ybR5bg4iQpNlT4s-d@g_G6>mGZPq&GSPUWq+GR(0rZ6WZuZ& za1Rr8MnZb8*dUX7RY#`Jwnj2hoB8;Ag2y#6*d8%n{(q}`+4d;dC4RRBGU-RPNLV)e zmv|uaaY)K}I;TwyrBrg$ot|u(b+@i}_x^09*+czmUo`JIVySwy=#X=&LJQD)B<952 zC}$v#@|WSk7W7vsRb8AaRm4U#2vq5GZ{ z?-wy8n;jjCt-<74St7ZrjTkJl-A{X%!8mDVFavX-l-$}}d^xU5V= z2_5YRVDI!ik5IvPNm|Rj2>|okI2!M+Q1C=E_o35(S(sebS!*l*p-Lsiz=$Kwd`1E$ zrDWs$eD7_8?bEV&G_h5d7iZ@P&w;d6yBzqCv%duvWmnSV$>YlK8own@s~fzKv|Pi& z71tfriN0hutL>ei?YWMK%G4?x2!~p6tvJ2|s3>oy-@pY%Hl{e}>nYwpuR9e>=9aXgOVCu~%X0X3{VR9Es5C0Xb+z ze?(3fG%6T=KBNBg&@RrLR}V&V{3eAi2bR>%Ba3U11_Ya*zGD^vvihBu7!Cd}1@+Hm z`d~G~06xAaSTZ2C?|62Z?SPu8v%tF1Or7WsX*Gp8X&Qk}H>6f-p@D6TsX z)LCAZtpGjq7+kl|6{e==O&dG*tkqKE_vv!2*(8r?IOR-ZAOhlY-1K&CBSy%QNRC@@ zcIRSUg1DZ!?RKKsiKm~~doxG7l0FX#cmCdX<0;Vu?f{{CNhn6Zf4$1+pGPLcq z#(P5tD#Chi&tj(h;EPN4O>aS(?6_vVrHYJ@ObdGddMJ^h@8enM;!KLeiMr|b{TST< zg&OE~!ep>~_HHL7;1Jl3{^e(Zt!EeY>AD07IHN+VAzDDlDXetskmS?eME+6B#YlBx zsptbXHAO)1R{VTq~~jCTHQgon;Y(?AwppeGy&~(rUme z*Q)u>%-}<00uINq0xz@f zRgXcPRBe!TYN<{|X(Dyz+&K6lJ6+O=W-_UxqjM(2y2essl3V&CDy`xDg)gUS|5 zp`pwpACY7_m5JqT=iBvAjT$J za0dITU>6%c$Z7Xcf|4xSkyV{dnO4JyAOLaVl4|%t9bdEMYOR^8tCs=&DfHjstBolA zqpH@p_qzn)8{F6Ewve>a${O!Qpz1D~r&%422}SFJ_Rit4$ctHoNm0wO7&3W&V zjm`!*`UQAlLF;ANJ=X;PA~nl1?zxW830aPFTr%UGzV$%><%pVI!K7J`7j;tn3PX;^^- zw0qxQes%s4;92%P>7?;#X3R!x6xDl0@S5pIkpTDYa|$5o?ab{EI@eFEjjhwAvyE%F zK}c9f#f6zHs6XWkWo=Ge%F=Bn3uKOEgVdoMmWS;J%Nyp46pW-{qTtivVHB3j0Bsz| z^x6NyHw6BTwKV&kJf!b+SPUND2)ujy=b17Mtfilx<&p3t?y4`YC*CgIsI&7LW|?n5 zQ7@2WIF!SZ(n@FM7@=owSC#9R=MzDK^CfxTH#gjND_+cvD~tfebd^Eivb~Y-!&)GE zchY1e+zKbPOr~`V|9y&%+d7=flk+TY=}W9JlmYbr+f52*!by7c8(SW2YP-^en zEx4r(9Qj;b&2qX=7%w(D+PDfqPJ65be6~LZb!S`>FlGkmpBD3_ zk{Mt;EZg?eN@;&L*phX@sukK6Uw2F!H6jR#qVI=NSJR(4 zR|g3q%Tu{9@>i7&#S^g;5a+54#FBfsocGxu&Ii9-4>GqmS}c(0@c%BR1)YxYZRkMj zCeo=KzG9BonqQLaQgXSc7?o!PZ=hV~1n~;do&XrW0nFDo$-qq1>v)X^Ur$Yrrg%-o zz%L9{JOL`lWFR+aY--y4Nv%?sXkQMC*J&4nSB|bY7j_V2v)I@eX&GIbFu2*TH=pTw zZ1DEFxg#Tf&0QJOpl$$nVZ>~u8CZuH54J?$pb~IaJ+-#+I?au47TC~#m-oL?@5^bN z{H>6uy_ePAiURfEeqc$!sLAfS13azHT&>#3hBEZ=Ilbjj=xtqpTZ+}X9zFs4b3I4`i)^;Ug zl0EzwC!2A!i?Z{G!Zd{0GIBt?pZui~h1o?54jnecwH7&T0wTq|D|!StdOudQAEy-!-eOgrLPEM%@z)`*NqlY< zhJCTa5Os1wYncC`gG^vbyUxFXnWFn z+wlY(52*_mYYa+23Om3JOKy!X>BwKb6p7?|SD{7z=(bu3QH=NZu-TD2bfut}Oo^ZW%gWs;g{&{ssQ(S@*#ADD=WJhQ@QNuT||BoDB6; zffBZFYeQ+D`E_JogVPh(HGn&^Olick8T8;(3%wpPyt$l9X!$gtR1$5j0s|rxib+hk zd?8OZ#EhiC!ZoWgy9`u%_;vZHqWy?GeMaqI?kwoH28$l^<$iIN%RS!liL1#=N!k9d zRnBJcP9k2JTW7Y&jrxa_W4prj;A zro(B?YxXV&^h|k&o+gg;750V8nadES?ZU>Og@t;nz2VsEH_2+^ZLGJ0ZmtYo>n58oj~AoI0tD_k6pb>8kk*Z8 zs0!bs%7EF2!`6o6;HP-+tLfPS6p>~u{lRU<&S}w6oT-zq7D8&?!qt;`(fnNtAgco= zkk?VU5EprOMuTATb$!mL0Kv3ywbHbW+6V1?Yt07Rqt{Qe*st5WN(-_J9NRsFXq5gR z_TD-wsh{xoC8$cU_uVzgM`*^sO-3rKs@-%oMpa z9q&%~HYbbaL5`tVsEB3<)Zf0LS8UM@9wJ*r@zC)1HQ zh#+;t``zL4!X7Ca*L)x+4!!SfT%qTJsWb_#_?(WkJa*b_q#l+Nz`zrtbGV|xTlPG3 zactiWl4fFE4&qc(mORuM!)K_81E;V$EprIGh3YLkrGt4wB{@29m%1hMwwjCw3-Rui zT1g*>5N!LUlVWV!T5_d5l@C`^@`#_My76@&!qC~stYa7?_y~Vi0L7^<%~` zrKnJe(6!WI@5@J_H5WpEFV`D55*br*U0Xh?+9-INFH14YSHz7VuGeHpeW+7)+?$K3 z*ExKD#k$H=E}Hl9t~VlFy{x8*azYh$V5)m7MvOj+N@+t~BhPF=+dh1^sz_mQe4?d8 zWc`>}r^E?pbm5+=7peH5G!Vud2DAv>NX}f%35L+krntM9E}S{!QXph6-{a7(RJ)0M ziZrlh-BRY=xB77pj;z-|Ne1+chZVxZ=@xYu%Vs_YJ$dfFG_!d(z9>?UX6{J2a`q0F zxvsBT4J&8&c2Vz>JD438dTLJX8LHj~(9I$MY?S$waZ<71aA}Go$3MIx*YmnxSJkJp zO7tC)v%SD1)Vg-mDj_O*&{h9UcFmtuw7Jm~bF`eR=w~&vg)zrZ;#x&^GCyMburos* z3S~tm`|P>S?-zhWTn{q?MCAAUez6&5>R0}JrCd_sH|5oPUvCOO+CQJ!JN{&_=7eMI zB`A9>p2T|&TQ()6N(rXX`bi^LOqCsxOfgplcaxRM1>9*CDlR0!f)veY;qr3Senp{m z+j*~lDeZd=maJN9Rla_%bbg9?RQJwdf}E~SjPp2YE>{)~uj=sk#F!&Ry*ij@w`lkK z2ytU;9~n=!LSE!ZKo~*y~TlKHH%8oflSz#x*l)#lgVOKX_ z@gv(X$Wb7`3crWCIJ$bnynh5z=C)AorGXh2@vn@wNC0OvkC^T*BZ%9lPeHZiR}}L$ zKsr$(v|c%yxgR^H7I)te##+9b=ucWmNbhp5NvLdBV5L_<1XL>nZ!*+#>7@&lAJ5`) z6%JdoJx^-0EpFvpHb)=nM$cMr5K*!X5_gi?{<6;qOFWnAmtxk$;GKm+YV-ZL>t5Hb zuY6AXqA?Mt?&_#(_8x{%==@CGtmxs4^1jleV|_-kGTE&8BX{8fuOiG?&GrZ62-^`# z*Etg<=Nu?@ywS0h_1^F)L49%T8pS}F8D?|`Qz0l~HB`Xt@L@{ivY1WIrMY5r@AmW{ z;dbZspwt8##~Dhg7s`*Vv&sU;-*K|Y#vYWrr$10CqTM5O{pCy4j6&`X>@ont|IBAs zki<<&XX5!!YD%t$+^rOcGYo7FY%@^K^f%rt25?Ly^R=ACmX|flIXG@+v_V#DBjszZ zGh!8i_BHBmO{8zktEH>K5p=5^1w0kK;wTD>ip*DS3!h+i+!gLjQ5?*;QweURJPYU7 z1w0MtB5O6dms(Fg_lcV5iEf)o0AumtuJ>1G+qQE60~JWn1rL8fu3YUTd|8_JS{?Uk zY19GDK!vpPzRr335e1S&Td)qU8!kJ<6RV|7Z|~^z=UVp-8-2sCynB?iRS4(v94U+A zOY>{ROIVh6c5=2^=)Z<8Q19hB`1VBaLJs|&c8y9;Z*M(p^Hh0Sd11l2&A!t2niy)w z5Wd>4_1GDbiI*X*8#}V9BEV>nWw~r+6n^hrzu$Q?0vX>+4Ane?X%o2&MITD4ao-Az z*ks3~*wJ|jDxu?QtWkSbM|X8y!}NQ(i4q|u!&N9&5E&buhA?VuiKLqfXYTE-zG!R_Oe1RWiHtrrEt%V9hifu@^O2|M? z`th&S0$%)XUdFVR`I(ZCUB6Z{>2qzI9~^#MY|`4EYcH_S^)*$!sMvchNjfaJ-$C7% z?ebG|!;|N0Du;>9Y=m{Qa3?|5u)f1J_jN+!fcX7I`{!-fzO*E#Ey`c?PIv-wQ=ovf zu$uCgc{~zPc;|Bfu;BU+xmp8XDl;MQ069oA^^%My0aC@9S4*?|N|&YbCx4om*#$p! zQ-!^j;09!cWMz%tvRwS}dieN_r!h{J3bBDcLrA?5h#$nS;^c+ik}@YW+TPD8Xh5@%jbm8Jzgf0@E$1mI zKEco>S#n!wqCEF5;!}iIt(B5Lq+gFeGW0m?Rqc5y2UT>CB?`{OFKigd(lE@h&4z73 z%1zmz89^8Fhw0r{7L6>4@G`u&rY@VYHD)jxJIOW0#8AmrYfXjs2c~jp9IxAXofC`S zwJU7HL9HiX;qW81mgtUj39X-cddreA3?oKahdd{)-k3?9moGxrUy1=UQfAT59^U#S z_bY5Du5&r3>Zi_)ZaTcXPD@iQ7itcsTJIOOGnFQ!4NR6Vzgyz#>a1{#!ouWT6r*M~ z;OsdWD=lHZ`a&e^=*He~%(ruid(Tm7#b$0!nfG%)URW77sPP!;1>n=0lHM$h{!FKD zQCAeA`Ax6hpB;~cs1cOV%t}wx$h;9#p3px3;9$4g-=6Y#FDA!_!FA?7rnQVA99r$R zYbJ2cXh!-dAoWGIy;GiK$zwRcKnCDhKY&F}h`d%C9dWm9JSO4Ya8(-DXMMwrbe2F@VuM+X48?6*WcwXT&#xMOM|hnetFgo==+ zcN0XO>_$y%d)s6}v>;wl@~CBv8-lGAQC0Pb&faXbG8i?&3nhc#D5ks$yU3u>D{+}m zkg|_%f$i{9WQm(2XI5qY!tui$FTLtw&NnR6qHvfH35B5sO(37Ct2cY4L=cs$?V!Yv zjo;dNlJHuYsGJ5#n*VBBNbi&qPkBXosxhoB;a{qSme zoS#?Rj?V!&a9HtxaCkVgJT|z`bvM1**d<^R4f7P5OJhPu3RAuEZ5fM{^y0-2M8mkE zTw-u*iS(DLQkx?NEX{<5-60k`#bA#NJ z_bx^4*4t}wGRJ#{l*qcSuX`5jO{Wdeb#j05Omk=kT_Q`bSe#AQZD)cGRT*Kp#eTEb z)y)cz!_g}HGK5#iRs9buV#D0k#RNIQ{1aw2*DIL3K_9B_`C55~p^LSGaj7tWH0nz2rZT^T4WR4=?UsY_L=rtj0~1q_RRdssSL&4Bnk_q=jp$GeLbM;Do3)V zm>7&%gt6LYvSw)VVdCBxCHyttF5RU-sWq*Fy&x}Tsl-=}M6kMB2!3ldxy%ECQmR;=3x+6BTDOck8mI1 zUh%7!|1&*VXrJeo|R&-NCq`c$romshzkEMOF00n1uy&fm5NK` zkli@A37@?+(7Oz6jg*S9z(l4P<>*%ZBw3v^7mlvgOxR$jJ#xJVUE8>1#`}zTKM-IcrE3=Frv*b-mfBcb};-oHw1SXV;P_g12 zRN(ST@GAq@?d(k zj*!8LrW;r-J4`V*sbq~C`Y8%7Wc`vMt>UXP0FNrl>UX1*?lH+Spc<^S|o zrgAOv!8SQIU-Y+>bmYi;vM>9SK5X_n23;l4%i`4X+#hXi5+0e=&0@`+-e4_B4!TBL z$uk&cGgNaDlEa%zaL|XJ9xHmcZg(5y+CzxYuJQ65yg$3!y3o^_QxN2~Z!hK+A4&E1 zhk?dqDHq{I=M>qFW^)TPm#^;}SmAlP$mU0KF4Gcf#RuNU4rI+SO>4G;t5As-s44 z-Lf1m`6Wj^#Obct8K0w)A+4$H(#_2I@wz2Gn!_7TJ)x@HRc#rw;b{VzSbU~EgNXC$ zK6*{v0J~+!X(6u+wq>rC+ip>+-27=%DguqX%SN;I@yTVU-4?`VxVp}&SphsQ@L+zk zDWT{h`5j5w_CqLu>_PM6%cvhPi0a6THTL@5&3t#|k4Gd!Xjktz?|jfxD>tRYl-t}l z@9)5QZeM6s*}Au2o6(x6e(yLb$XzO%G12EZ#S;~faTTvr2Q-rvqsU#o_zfQ0I4zX> z&H6KVu}mQ!7kK|SJzT!lStG?7aPsSkZH>=wUQQ)V85LPm*tzM*sWkP_N# z_#!*ctSL12HF@-PIHkOijGMSH&jx-9sbx4@`1Z`V&lGOk3sRliJ$=p_K}==Vu0!<8 z6e2hX&8-+SdRElKR2WyKL2fmzeZFC+;7_<+<#tP~)n+&KOX1ZhvM>_ z_cT0eJXETmsz(}n-v7CB@8>0*svDU83(oG!!4k51E2NjJ#dd~zEuZG&qVvHCeE%KE zeWy4Q8#2vvs(Wsxso9n)SHQ)yPWH1gW2%a~EA}0Z&aCE#W0Bgi)+V$zo9~(!9CtHS zsZ@Lw!pUFMn6+S3^ER^zo%eEQ6I_perJ+$!g)vv-${2ZZ~(3IZ}Jc z!w>3!HZDCIJd84g+9`u&+tin*OJG;;}p9KI*p|yjn9_*evL9FkjXA5!6c%LIhPjE}IIs2n8rw39OW$1^9T;;#t6DcKs&!L2_d1}$ zyt-cx08y$Hk5QXLknr|OA?#C*BfbE9Z$?=Gu2o2(ShH4Po}H(V7TxVky^b;IX?(Ai}s8`F< zrfF$YC0UcAckK!bh)s|yj$&}zz~M4HqE+wJI{ylmnyLZH8=VkyF<<4n74^4OQ+~tU zM+3EAL&Y|&^MutBwR*$DGhv2HT?REKF_1jdme<~13-(TP8uMk*3+ir<6q%!!tUZ_s zGtz@wL2Gb^`-454Npl}zz=fnSj-Tb8Rdqg6v%c4@sVia;UbQI_ZX&P}PW^;txqNZ{ zQts>JAg*c)+PtlkwW?0E3HpArl#y1cuz;tDMo2d7K@XktWd~ntsN#AF(u&g@85*!4 z@74(1Hs%d`Oypt^m$0#jTm0H9+4BTrQ2ws#kvXpDUAyHj zp2k*{pT=t=!HQeSFdYYj+~!f4h2`(YfvN85pO0aTU#rVLBl?{0kx`G7zFs9q!y%eT}EkqHckY5HYL_UVf)3v08617F^23k)yw=2FEJR3UiN znrq<%5?XC?*XKyGCQfj>sMEX_yMN1O$eOc#2)^DBGWy;MLyT`6X(>OqWTX6+wejS# z=-`;EdzO3KYRR;Qu5V{km8`AUV2A7;Ada3aomXCZJH zyv4@({qlTpP!pa1SOSS~0$9xf07>Bk%q(lUL^di54be>^#v6qv&<=|=ehf2VJ&Dxy z7<=fvMp3ar-hKo|a}^1#m$jSq4fgI9{($Et+TCxNQAfR1-j&UWx#<((iQe@njRJm-_hj;4K0jOnf z0S=zAsy!!gbBaMH1in7zzVdlY$lCe^<6(omj<)2!sQbF5Y9+B0ZJ&6ldiq#YbOEB& zdVG>ZcT=aK->JIKYvH|fWKL?Cp5)Q&_-N06#+voeNN{kM zQ^&*YU>$nLmo*0t#KBhR7rm=Ow6&92g&j6ECfozY!(rAn_U9ksanbGopkcx9iOE}+ z-`T9kBcFpZGHQH6yp@p>q1foT+V==;Mug zi%7vLuX=*aMP@J7vg_;m0oblx*{`(DWkjYqvDe|g^m0Cgs#C z`C--z7Mx*HMo*lVUrX03F~} zYHUwC$=8er3g@}5<$V1(PQ^7uv)!$O-yMDR0z=t}uJT1n4QrHpOtIMzx5NFXVBV#j zN>Fi#eTN{jV`oaVH&wy;{vG_;*+H1xa^Cdiz46@f6y2zB8UHV@M8}=S_jF?y9b22f z&O-}Nrphr(1YVXyNhxr{TXXL(#(vuIaS3NTF$!ERi{#QXkgLSO``q2k#yKe}#am_FBARtk7lU6JTr-NjF1Ra_-km?WV=FkgHJK84ZgT}%s;luvn*oE@pxOQGMV@WRS| zzQYkJM6sYwQ0N69ef^Y(cdAT6c5x=T;qBQ8er80ng#NvUL!qyPr3r-fPtZC}rR+Q8 zLq@LDHhs~&rdI`9@mExjq!8y+9!pTayruOfa%ExMm%;KnX6t?3!ebvVqKrk(izo8$ z{Faztv$S^b!k9(f`n1-ZC_FzsEy2pQ zqGgEQEEC0@1bpYpez^*A%M#KthIPLm8Rsd7RE$@aGINUV#=Ep39w93n%}uU&>vweh zOA6QUZQU4sEP_1c&m{x z_WEtpLowOkS;&m4coY*=6MjJ}e|?A>9bNNkW3oF@>6r#`$LUMBp!SWJmd`irS1yjx zZO;$;;5awlRy2(x#n3Q1j_*yXg^KL`Md#5x>GYGv7!JSu%5rARox!G1<*G!~TG0X^ zHVW7%N#$yla`xtwV_;ol>5`p>q+%0(p5NZt3YVuji-BWSW3-e~ZoL65svG8Lc%W!m zq>gKL=J>P%oyWMyST?RkuEpWD^5lIWmnyw3cU`I`{1)Y2{(}{N?g~E5HSTpze}L9$ zjy`m(C$R5YWqV8K^*y;u9~S_3&7UOJpCcMIr=U)e?5aH^wBJ6nX9&)fJ|PwA0SuVSX}>&m4t)0r7?j)5yt#vQdS=7YdzW}Y1LHQI{@Rq7tB=D(-iAO zk2b1s+c!Gq>strfcNc6c9|)=E5G_B6-)FHiPL=Cd5g9|+qL4gK{3q1^oTv?7u(03&#Xib z26FW}5mnu5>50bzx?L+9fTmkfivK{uGsC*ZG(kz^+S)oK^cQv4g>q2HhX@AN{|F#{ zA~aNHJKeRt5+BB))sLTUh@U}uZ$MSD*u`2%>1PSS#xqG}D)b{lbQAh^viH%`-wEx$ z$K++lTVDLe9XC)rg%|h6+}Gg@h%zu)7fY%8Wg{~}xBZ@Q#0kk^fHQH74EmAJ99|`| zoMo>)HT{HC?A4KJcT#|ArY3@W4m!AmFdy+{sdmT}_^JJx*{{CxK{^|OFlc7Mh)Im& zT|Yonle65jGc`wPh2-VV8(zKSOmY9@PyoR@cMD(4aD31Gts}S5h|t*cV}S>B{DtRq z)3|nNEKsh=Gd*O1cM>1niuXFwu+D3-g5f-zGR>{RNSfsTd|@`T{HpEieM3NFb8pDX zryH&nQy9B}i9j_bMRu3alndvcmR9&4Usb#{4k#PY78iL11^XDCMMPQrJ%c28knXG@ zwoxfiyT}5V8llHaC5l$5@^Qm^{aV%!2*onBsLAih#oqu~_p(!g=hh~nfyQ2)f7MDs z^u`ZG+Ro$)x2s;i-!tunwL78ZN?+#D z+l4B_HRk2%l2`0@p2L;6p~vubWZ(hfk30m+1HdYN>#SuYdVES*_o6%mT9+qrC;>g zQ9X0}MX{QM+Zp$e-kM1&lw@^tu(U}lQ;h@5(EDbJzxmo%z2&hdJ~%Y}9$vjas%^XB zLYkLzf{Z&dL}1UEuKIA!Mjeis!w4ABJlB{#)N_S?9d#c^e~arq7t<}BxU)y_&f5W2&rF1F#xRV@z(7IxAPVwHc&-p!P-^1ovmyq9h6yUG7AL|3q z1bOrAjo82(B2Na;u6!G5;i?iJ`Xrwp*kwuwm~fCt5mJT)ae%2pSpG+f}8++7xN8?^B5<2blo2`KFzm2aswjH z&<@Qw5|EB5i7uFFj#fCXEI~MfAS^kv)0RYU#15Jb$5t=OJjrA^=c+L-3i3UtZ>H&( zzkFQmIzCz{l+X4fS9irNH&*s$zJGa$%q|_Vs37{Pa~@w~@ea{t*<8-UC=E%v%bczDzh@u+Dqk*8KP&esb6Q_Cemg8M zE`JfJOc@|nE@LdTHfUJ+ncNjZb^>}8LxB1_W%fqOXo7wLVX)?Do0}&}Tu+QUm2MlM zvSmC}0L8K*sjsQKh5_R9YESKzmd67NZNqavL#}6gfmX3;7=e|3N8bapz2Ezff5#=? zAIyLAsWSne+Aboo%%r!sHw(1gWN|DI3LjF@pxa@kW%#qoFe+-fFe}M&_u)zGW5KHs zoK5!BFBgC3QT(HV5LfXHyA+6W&)8y3{uxZ1$-365{L^JwjibtK+}%B@jE@6|sWVj4 zSB$I&^SZeQa!Wz$#l`WL@$d?R_j}DR8hrH%tNq1Y;ms~;&Q)R6gxQbj`sy(*E%H*yK=4QR!AR?cBuABhV`6ZQUHJ^sT0 z_szm(Wgr{i%oN>z%i#HHz53*vCn4t|)w1&Ii(#5Jib`TUvcmvg?jR4hd}o48J_yfJqfbxq_ch2Ed`RoIXE zoQfrC2D3Xw{4qkh-!xnQ z`D=iN&!x>D9(#k%XM1j-5h=rOCJT*WE2g#pGApxnM)$X8@0$y^vG=;2aIWI_n(99b z^eh-CI~yMK5}&>G!FYquSY_uSUYE!puXu$O{r-&7{U0Xy-@2C1>_F1{>#on*+1?5p z9htxt_d9lehe`hPUVy=mJM~-?$KkXf?4L03@fx_|oh^*|kIQx&EBf8KnCSk;D;lt( z-(a4q|9p(!Lkw6@AD7Px=SEK{wEq31wrAs65O;}!3)qTg%AZfCn*tdl4JAO8Os)9~$iw|K|fjpk$wRpQvX z-kS8W|1mEcT)`zBTRaIGB%DdoDN@L?$4$lH|zO~}@*0Un8_!vHs zoVa$K4So?i0-0FWkKjL+R2+$XHrgZ?!#@Nb(*k6+B_J>C`oMNTdnxd((FUIHW6s3= z3eKa2yMv%>ZOWlla!LL)?*W*PIQ`!ei;NG@wjWYGr{OYsUJ zgXff=EJoU^#P!96_oyb7uMCtIw5!~T5gDowhigP`0@hM{C<<~gs6AIqH#Y(O=P6jc%q!N zicCJCRu*`k{yz2v>t>rZ7@;z-8TEU@&o)}Qh*x~y(v!4O3>^Q^7EQSqDf=R1BRDu% zk*pFV(EVk$h5{x=8H^BnDn;f49RNoPcQkY^88dr2q^a{oHbj*A@jJCm%^l7|@FTO`zedn%X`c@wTtZak1^NKiQ0$v2W#;c>s z_GmsxLP@jH=`iG*bo1j?oXw|%^=M@&uya@rq@bBg#+y@(_~SGpjEZgew7e$zKxmQA zXWsvjRkv-N_=f1I2lGO23uunv zgImA0pKG(dZZcL`4*Ftz>(>qCfK3+rh}s{m@L3FY0iJLC@~#HX=^esihWnf}keFBF zk*(h({)rO+j!J=%YJf*0uI6zAc?di1(F!Z0{8{gK4+17mrQ?2TcAJu5zV^5G@RYkg zpb*~s6)Ltv1$mM5G-6Tqzte>O_2I6ve!NOEg~7SYrd*kZSMOP>;(hyC{E~4X8p4Si z6&1Ay)ZGA=MZRynX&-xr?S2)P#&0M##;2pWdyU=+Lp&4UX9d>xnTT&=5H-AxkD6oH z)%f|+>P`2*{vEgf*Gf}liA#seUZgjB6sExXzHUPW5|z}}%T;sS1H|lBgbW^e;ShCB z7tJqw$DmzG3~j`^LV`=zJ{Ea?GsOGMoChi_AmNV=XV>VtEV856YwUZ5)1$cS8`es; zzqu`>T**RE@0qFMrd{n(4yLOCs0ivex%DDZ^x%uM(F!r{yQ|M+WOzLJ9qXhMR8KKW zz!<3!JSBd{9P&?k*e~_YT`Tux{trhWcU^68lvV)lwbbWiXh$s5Hn-XDjK#V__H5Co z%)=1B(HMPC$jXZY?zr5aH|y@OK377=|A`uYJJIe^jDWRM)FdKPeLTf79~e4Cu#adA z8}xhU5@7ig!N^O_DBZrNiGO2Z%uFmB4*X;|lB}CBvU_`9INrNxMbF!k2f?h)bd5e# zb1hP%&?rR9v{Pii4c(IUNn!%f$4US*s%#NJ9|hQ{1+CoWafv}x44ylmw6di_>D7{+ zzSFjR)${#%PM>6J1V=WAgXNk6V$`~&R&kjDRW_54K@I+v&!nsNgV5Ro>Ipg#x1t!Q z7S`04Al7P^(mvfnTGu${3OS7&dVWqoDG!z)sy*Eydet5VNXtFy(|chM>ihT#*}#jV zN1NGNUd}kHBlP8d6K1o{T-3vAR;6`YL&Pk#5%KX>uiqN4Q*>%0guDT@=CLzBFW6#O zy=7;{5NC4M1gkQv3|is59>474A}RR>4S1Yt<#w~*ftq*8u=(RngQ0e!j}S&t$0d~* zKJy5n>I%o@;TKYLv+*ZD7qM2hKWIoAL`9~qC{jvISP&q;8HHD`e2kaxe(Jj_>f;97 zVdTUSV~JNM0e=kaYH+#xK6G6A>SY4wyyx!Z5(Sh_^HSm-1N-cUTG#k3z5?3=opY?o zI^!6DU2fF`w2j8hGHY3QDf62}@5t{CA8by8SSi^LcV2fRB=FC@%^OdOP)@->03UnUdIPxO0>T z8edRsCIfU>Uo0zv4v0K5VUAc5hvb15YSkFqv5T6z8*B6ULvarHI9${VD%qBZTk8Eq zeodPM?s0V=^8v)CV0niYh6CVGrNT&q?zS#Q9c+O63yL2c?~>L)D_`4NMXrVjjOEer82!bu4RG`5B}eR~z*oWp+FKU` zaBDISMT|RQ*@Mi;TF+m8P+Q@!_<33)EZ?xH!l$C<6E>*@-NEIW;3Jn_IROb06%?_Q zl`=J%AF^`28g(q8a}Nddm4H(V3xFLe@E)XF@TD2&nVwU&RA_PqZUoCWc@lM^DL>B} zg=6cjFQ;RYc=LZur1{6?H%fp?%~r4%-y@dDBZIYBsuf=Ahfn-?sHsI*O_{7h2kr!` zm?Da3A_|1aoCHwo-h)0=&wAOdS!6O<&=$$AF@@X1;C-B*ty}eQt|NqAWEhY$YE_-w zfJf4~r(S1)Kb+vP^_==zXt{474bcTs8tw+DV`js1aFAn`Z)9<{tSQvFGgh#dB1@gI z+PE|Riuv1`KK*PvMMiCn;g*j6l3QB$AVPM!Gv?kgEq|#4?O;Pi{Y}m50#>oaZy++d z{xNKZUeiBA)*d)?h#oC4l~xlR2KWCArkVDev@;nlN^h<1#nD}I*hsB6 z`2G18?O$I303Cqe9!`_-z0_`bU2HF((s6D+D*j<8x=~IbKsop*Vb~glQdj;Jr(#*%{)mu{g6h)# zektIx!(53xQ1hJ$^I}U6gq+u6x$A6JBSkY87Z+^@BKAWAPN_yfv+EvqK4qJ6s3(^a zE)k6F0bp)2n}aC~gZZpwD}=w$>{}DKUW{rQ11<3%`cNfLgr5-&2L_RHye-v<;AwobtS6ES$JuvaFoO6+WSbAjEJ!QPU`Rcj5SOmVQbk ztC@X$Br72XIz5_T(t7B-24>7uR3JaKt`raGTJ-?WBzs;Qya!KFAa1D{Nm3u;G6#hr z1}mYx#b?%+2dZm)YEt(ccKdL{7jj!JF?%wz&s3Hq)QxmyPSE?Mpu5wnbFX_79Q}pAuUu}LsKf^yXqrxj&eCX1>rj(}8KS5C z+AnGV{T$oZ(lbu91O`6x?S09tz^fP4$2NK2a+p^@Jb6hRQk&bhHtu~givQI=YFhK| zAV^_pJr?6Lp9X0bxmrn1B)CLuQYYLq@PmXarASl4r`|&fZVX(!8>??!eF&3_dx+3u zo~1|Ie`{*xgtO1?S*tre^N-`ys~*8WLhsk+ScE#B#`=7JFp7&;-iu}4%YR0k78b}r zq4x1*afTrul!5fdgRU@7bgzO~6ah>{Sui|+n7Sh2GTp-l&C&MI*u}_K8Z};3i&E$9 zCC!(5xpJ>sdd=|G#Fuc_qigMExQUu!cH5RJM1a#lJ6M#)8)rTmJ_yBm_U~B$iNx%* zyy0hM;e@^;p&!+6s664mETE%fxvZV5-KO4k?#p$43!C$5W*dzw(bCREW{4J! zseu~<#NPT(L7B*fG{=)-q{jp*ob4|Teuv2pKugZ%CN2Tpw4*M zl?-5UI+U+H?xBO7k*P5RM z6TUjHQmEhaSm^qelO;V>?SHL^J{F$ zyIgX(Jr74;l9%bXui-D_lumPk`<=LPS&vtbB81k53RBa0+tu|vp-fUAihzq3D$3N9 z-Rj=zWzSQLXpld@4-&taD_r|w$}Uf0^8wEsm)%=LkuCZ=L%f** zmqtMYlsWTQime!fM!~Vtyy9#^6523nc;q@N$zmQm6Y44(ktoVBZ+h`r-3CyXmHSlS z_7hP+;2!GHxJ_=>EMK!^?GcX^8etW~;1fFx?RMif9#v>pIHVIVEteN;Ecc~Pk140S z2LIc0A_%Tl z#+Bzn1vog`u|?lN?MM8w>lU=9ALQ@<9LOe4vYEy%+m?Cm{LZZEhuu^6{JTI&OavVm z>Y{r{g^M@{5>m|f2KjvQ3%6g2`G2C}dMvz*@6kq70%T@D>yCNvR3xLZhkNYa- zEjpC;ON4IcgAeM`Qehgb6V^g_idzjprYRN>G#DFc;JARqctMC|}Zsb5tT*G_nT79tai&vIKUw$lsu zLlvkab7Y@@4nBF;b?}ouTpQRN7gVS~?081131*tV4&3HvvGHxzKL8AeO&^ecfXZ4mQ0Ek_&Y<<_YL1b zl(A*gtL0kXGa6XkppPe|Y@q3T(Zr`6WTfRjbmuLpuJK&wgy9~^vR=#SdRt9 zRs8BDPgl=LAiWG-`_YGc)nv4y7&~vz5)B+ziJ<-5HD(o}3o-3f5G(>0BdTn66uej{ zc@}bb0i-YVYjv4;7kDj)`>@59o6^q%P-TAc(Oty#P2x}lj^Ekm$YPP_%>UoarucCA zHjGhm0~aKu1z0>5AT22=DU=>>cYMUJkiP_(L^y!#*wnJFJuCnN<9+~GozkuSEGCh! z4QMJ((pO3+`rx_($J*I54Kg=v#ay@DC5^fJIKESyc}}aE%Gn!w-e?3?X)pQ&uRaI` z_n$u1a`lY`>pOqD;rK7&ws;Zbu11cwAQD71IbYj?W^ymug?j;bywBzU%h3{yaohvZ z2`&QBDEJOVlgj@VJ)Y#AQ2t#km>GL?`PvJL2w3q;8zf}tUSOkk0BuH3-z1A zBDPT`jPm#wRk{7L2FZvOi1K|-;xQnST7XhcEm<<8t9!vSr_&dUy<~y0G_Zmv(Pw78 zfqFhB(#LA-QRi@=Rc1Eg=rqYKKm^5hpwxg2EN_hRhBmO!LEb8p!Mty%O=FWNmxvfq z&kE2jJIV~8SM8C2vK~id&5ELTl)b5c(1(J`HE-asJXYAD@)JjatQ2UW?T^gu+r4um z4FlNUO4UH6t3CCld8>EL&bQCvHXdLn&s#TszDT7w(MgJ7y)HaR!OpH#l7$9U9xTg_ z7B@ggoZ8ijI2{nq2!FL?q8RDOahx%d8Z*y>$D&L z=eCCs&?EO289Kw?{Hq8Me-C~|p_{zk>I`@OuiMV#f)w(2_qF*Se}$C|{ECFaB{=qN zj>X*faps>E@7W$}lyn)Gva#U4a<}w(kMF)e?0z2N=TkLcPMz;8k*7oH&Nc9Ub~yhP z_0w9vfHCBc>UnSdAGc#h<@kSDeMZxX%6$G6#xwq$o2N6@_429S3U(0|DOse~SIn%f zPGsXPlEFkLm~508P%0LtE2kn=_RAa=mCRL#d!%J#vZ1XJ{pH(B{mEJaV6v_1s_F;k zKfdzoIPpj25DoQAX*OQ#G2!dGL-Tu}^hXXRG^ui{9oNM@%(jZzS+EkasEGsZA70Ee z!3Pd2W$&u{%^g?6{EJgt{;*c!s~2aUihFb?HSVq0a}CB=S6M=#P}W6WtC7LIK~Ht0 zV`N;`_wTn;T%q+1z%v^_6bVnK4Ok;;#`k?l8VISS<5l8fVaZEMT43ii{E4yH7uiSz zgKWhvx|-3~9cM%*_NAx_W++%McY7vhNVXpBUkEft-$^F&ZBb)*tCq^d&+d2O<30l{>Y!8Bwxn2r`ViYD_uuO%QYoDO9x&8o8&R> zC|Kk%0$7UoaHL*H$-4JJU0;iE35$zYtru!g*Bt}d%Z_!G6Bjn-r=hA@iQ7yJG7< z*@CVbuXevnS7rs=5pl4!rItl?dDZ6JGj~j5BvW=zu?8i(I!#wiuJ?@C*&hd_Ajjk; zALTN?Qy~FS^E(=Vt;rcFK6~%ZE93zwGUKAYi;E;Pb7RRoJsf#BA8*=nlb)04ea+4m zWb%>lsW9;GWU!gZHw#?Zsd`waATs-Oxyviu#ail(YDADQ_v5xN06ra-D;=?_!R%?x z(9Kea9X9w1BD(JgHZaA6{%IV%csQ;G;<0cEjG39)Y3Y}L2FaTy`N(GTVlpvw-)#$^LIoP{ForEM6_o&nNffrOh5JTL-rd za!1`ia}R^9B0hTIwWYYna<faJ zim~qRrT3b#W$+m=1A~P!0X{tn2B3wLoAcRDHN>Xf4L>C__~+M`q!T-|0wL($U=3s6_r z^7dFk$kxN~y9^!&`DoN<$jVy=Z)q2P&5|XuFq=_7gEKShza#AoOgxUTLB?>)Ng>x@ zZ0*tcBMpGQB$xaEV>DJOu3MD=%5zVjS!Kml_{v~~s({G)8JY6G9_n>2_EuUY+TD+} zWxw1(YcOT6jq(>jxKO2*MUwOSC84_DXqJwkq@-IyI}_(uS9lZ()v~40*Jz!35^>gc-|Lq~q(I-u zSj7EU$C7By-Xe_qcm=l@tLyiW8lb9Ta_dd)%o7;9LE{>?^yNg$nGQZx5R^R+iy7>e z+A9GO=?b3=hfM3G_e)6+Uz~kM5XHBo7$LY*pinLraT@27-UY`3mu!;Xc}gNPE75yL z&Z5i5t7KPAOR`ioalg83sK&gSROSA{YZ*3&NEqs*&bj6m{Sr5LERuAD7NbIshA zLp*Z)_AjeDjUr!|i4^b0YiJx!MoBt>fdBO3$q~}pX(-&kH(FG}REf89+zTaQrUAB` z_!+#Pe=Sq9n6ICmdVyu}o6GP4QJP&-mE!k7LD*jbr2QDUYsMF zvC9Lw_pot~!g&5f@A0R`;e68}bOPN2P{iJ90Zd-y3~23dOKFz$%>q*lUwW>iN!2dA zC(cvNR6<%ORC%0(0|fA56eq|fI+x3-bqf}Ija9x%)@@Wb(L;$U<~46J#+z#eADvZ( zgFvQp@ikOjxYlKHR(&OEUN_GrWRS8_*SqS(o>jg=k)*ukv( zH*(QCsh)=j6BOnxgKT!aVUXP$h+ND6-&Co2$*0Vs`gqCQePi;B@6% zE4(Qw9G-;H2yU51bN1a{M~chiHJrz~?P274rFnw)VYpoEf%&}$-=J;1Qi9+d98a`vt(cm!r#P8s9@_yHN2EQS2*V$E<{6pxN{ zI1Q)u0XSzJ5_vhLZ=S;1G)^ejN~FTE5O|Y-yPYxfcn#Y|$_2O1-Yg#td}B!hjR%>H zjTHVrGEo!7rdH$4vu}g7|GxL2HqtaOy7|XT9Kqp5l{uy7TK|~TrBQ-Xy!c1k<3GBI zB~1XU=~&}L{E^742mz&_c|cUaAGc;-F?iC7F`eUZ8H~^k>*^M~w)WEZUzrL>~;34Zm+SvcJcf}KPK>0qf zOQnDK$7L@DCqh-Kebu;dww+>kDlrAZ5&J5Liyr&v{r`u(_l#;P+WNhfUIZ)@1u2S3 z2OA=xtB8Q~CMAFZ(yN5tQ4o-#H0elh3B3hKC{m>N9(oTX^cEoR<~+~2=iGDUz8~N5 zj`4g8W3boWd+oL6T5Hb#{LN=e*^l;tB~nva*)ZQ}#SmRk8g@F3hw7p-Tu;w_WXf+W z7aN^|0Eg!Ad69y}1LY4)LVpEXnLJFkL-GG~8XYF-I?g59w@xYYl z0T>9vZxjFvsIZ1JcLIvw2FIBNC4FaM#gE?vdG|kjcDtuMLtwnPXXd$MqtP0curgu} z*vV}hl)l#y(g{z9F9u-Rk1%lSqK0E9kLh``42ndU;$1ItU@f_5QX8t5p zIS$c6<2iv`U%h&zNXJcL_4O93YJ()fWVNUJB2N8(vX7;wU78^00*+y6!FLY`wE3={ zCI8Mh%h$}T7zh&?KO*!LyxYVI` z$7<#%CmR|UW5MrxkeeUW?}r2jdr&R|sng7RL z{7qmz7KyjfqNyJ4S^El<#er7Ht-s=D?)b<;c8@3Z#zuCsR||eMW7&_gr}A~89Y@E{ z@_9h^QvJ;K%mYBJWC1}F853)<+?xcDJ9Y;}v-<#J<{h91vEJ0s8kDAc_fd>K2jimR zEDtQ@1C*;Og%g$8(Jo?VZAEL^ys0Fdpk&SJg*oqmpX?!(8r&M}Y{|ha16g26A>Krc z-y|M4?d~-N&s+wG>t$m5hp`Yl(kt+!_kav#6sQ{T0dLQzJ1BP?#F1PwR{9Y@o(fRD z%dAuFyn2~vt-OAH?9)1+nb;$lu&uPNt1w(Fm7l3H3NL06gX8470FPvg(oaL9mT%<; zQ|{A_y2k@OqLvcjOr|tv%U%Q0CUO|c6X59kmX9~#sre5aPZOi@m-?9oEzS5eUM97N z8ejH-Xy)-L1gNr+&lq}8^2#v5x}pMrpyc$A7a-5vq7kv7w(8EcIWq?U`p^u}>G%QR zDRH8vQhW9#sU%Hp6S|sBza4Jyjm*1g>H?cU2vfQn4v%k{tO=*^Iy;^NLY$&BSv%?BRrVces+-K6Q3W@C0ySHx>fEaewSXPa z`jmTs23bHLPu-Lo-t^!Ka^jd}x~DP*zELq@jX&KNgk0JM9JX;w*(HA-Fa>h#^t6WJ zno%Xsnk29ooe{dVm)E&1OoXi0O1cA{jhnsHt+M-0!)rzhS<0n(#lrih_J=Kh+lj-g=2jiq}VADnX+wc+0yciN7caq3&5!07|b+CAIVuCyLtN zJPt9H!Jz&1$!fLQzMBD(uZg_?ExUKZE}+cA>MA;|SH)Y`?P(4VL!L7g^6Heei9=Gn z_f#GN;zu=}3=FDf%pxC3e+!(;;dQjgkg&4EObdCpbF^%57z;S<^jA*={SZdSo}9c^ zGfOB`S!a(peiBd#MXd^9ieAzb1H#mJ5Vih8Z(sEDyf|px{&+*$-SD-Ow@_O3U9l_M z3Sst1s;iirC`QCmJouFPiB5J8^04t#^J(SYBxuz+NEJ`?Y|@UP-qyRtvNo^E2Ccp5tfH#KP3k>kr+!iWx zAPK|6nV(E067g5xRQh0^9RaMb6DuY`8}(IZ4}|<;I<{D@wr2r|Tg@$}Q#(zRSsO7~ zSN+243w{+Q8DYK(|C#+`kz(Y zg^o@4RPlx%P8D+$fpAXw>E40Fa37!2GPrn$#>>`A*XwrfDj+fy@fL+Hqia4DkE(wT zVv)CWlXD_B_LTIPopaDt|A;A^Bu3t7Qq!TD*2r;B^Ko_La&Ay6{gFm+U^-mnqHXuk z?Y92Vm--NaIxE2QuoEIazpKV0_J(Xkq2X7glK3AO;+Sz-Du|%_SjFokh{J=ME)=(` zrlkIJ#K+hFEk_MEji_B=PxGn)FHpf_pl6#@g(9o&beIW4zx&8(u&?#lS>~HdZ?enD z9}3}aKt*h!rEl*#sVGjj$@p}|7^y}ku)L&eQ|`TiNC1D@h@g;i4b4va15m`6$uXn@ zu;La*r-NP*RC6-PS;e8D%iVB3J==|Nv9r%$$k33=z?A(mxFVC1Y!aCJ-&v1Du#6Uf zFuS;>O5L#VteKNWYtWOgPLeq1k2A+EwM8A!EU6NETgCm4-i972kXS~*XVTz1B ztaI%idPHbVjJUi<6un->+{2mbjI*vh6ekzQtv{Jol5+U~+0B=TmKQjxWY%kjB6`H| ze%Lq4Qc$5Om!acb;r6oi)b)}bMR7K-vm=Ih{{Gc_O1XR=IxGv3HZKEs<;nNP^95x5 z_5m<{5?6g{jR^_$^9IG658Ftan+DKn6IA?3QHr&kd-9SD;BJuvEBtBipCIw@Sxs{} z6{l4btCoDfFN(^F!h4S1+pM^=nf$<48(JY0lpDVz6}OxNpl}P)k+JCxFNvEXD5L;lP#o9` zAq_m6L({LHApj+@gmd;-ke7Hv*?14w86}7~8)t2S>Gml|JDnXZA5&^KJZ(r<9k}9z zQ{VHw&JXOSl9C|9x10vQdp7!?Rw#3%H`u;JdU3qs=OtyI+5p|HTU<);u+wvHB;Iep zjSHcbq|Fy$pIWcc5Fk`&EU9LI&R2v(5&gcl|azo9SYY*pgpU<1rlWi5aJJ8a4)pKXq-^#Z{3T{v_0! z&b*ewe{Kutd;BpGuc|;$UKQUuWRDkB{V~Q$awD@OtU=VJ07)?06CM_NyuV>fNzc2< z246|{aXAz^`hJb(Xosy?&o7O{w?X;{KwKVAyMx~Z^I32{bX;NnZts5(F1+-dp;Xrb zfU>|P@D$yyyJyq*6SX^r%x|+>U#%5xMIEayhe#F3Hu^ zp#?Np)nYPY@OdDdy`+CxRwGf9`voS!beHRewDNn)hjj)*-`QO+gcFmdHB`9`ZUU(n?KJ((gv1A2WP>q2 zezTs(w>SJ}k6H5emJqmgX5rL6sc?Rf7?!|yw!aWhE`Ae+Ez+^U)?mfGbVAcZlufG@ z(T;{Ou(X(RLdBa4{6&NbXq%#Jy-V`Q`Ele*1;mpz%2JQ7m^8`7AtUL5qba z3W!m(agJw$m-@@^snSXgJNTUnFHu?7a681qUj66*#v*p%w43710}K$Tg;DWOBi#OW==3FlW^W212lZ1lvv6X=E539ofi%G=o1b z5%-xnf(4wk&h1gcV~z#91=4O57WcN>4hcK(%Ck!>bnzO6C2K>-gsQFcTyPs z2a2_Yzw`n6rU;Gxh{0vBy6U_bP!3Q_!Q`}i<>v!nZ;73WOk|Y1?L4{leg0n8OTHpO z2|8wpJu#TU0!&Nd;cm)O{-w&`u!FMjH)ZM?c+(WmZbk9Mr>s|OrwZb1a}hg=BCi=Q ztx@NwDT<}PNDp`wlhj`9cz4G%v6HguS^t>Y65m_z%^G;Q+D#8%%P$DS;_Ap22TMIw zLj}eMXN&nZXSFF+^?*A2qzzQ8m?fC5(*RxQ4?izL`dzZJ-+Se=4m8iPL!s)+N?YYr za9)&t3R4b>EYqld(Q^o%7~+H9iP8OR;k^7U8T7P(KnAW*yMF>=(7 zI1ALRT;yuYmVB)cOt4#0z14!Y3h5F$kby;YFx>A-;t*;H^(?kVo;rQkUP&9S z_vJX+r5pi!`_s6g6_TRRBKZ#E=Gi|%_ph{52~958PE5ELiYd5XCcc4WIsHPZd1@AT z+wC)}!ZgmGTC`pwyzU)+C&#{u?^D$MG-^LmIK8w2xML4U^cX8IvSbjk2-QbdDox90 zM)X^IgH+VmPM(fP6~~Bu_|5J#p35<^LZB1M{riVA$!u=>W*V)afhPWaSf%gZKwyz;1YG#PRd;c5Nbv3+De8rg9Wf^ z>rMZ7!t%aw=N;$C8` zV}q_Q4eCoKWs92u-!w$!-E_7o*bcW4skmD@2(2`&@u^$OpAXB2)!ucmm*o1P_=%x> z8Y1ORym!`*ehvy~mqTNXKkj9x81Jy7M6rhe>BxHIynRLIV#?a-enF{;2$Vp~axjVnG zZ3;sAteyPZKUW?d0LRc(Tbg0i1GrC?<}CZPhv%5b53;;h^qrA9*A6$+!+9sSAJ-}~ z_pFpgh5cB!@9(V%JTk0`fr@0poS1t^7!e-4~ zlMM)f)Pn@2I0joN$VsmYMMcib3m`TNL>{a!q~uFQw|}J#&pds5SlCU>IOs~HM@&nW^4K!BOFLpJX66qp zK_@JqIxhr3fPsAhZ!(UUI|WjbSyq;rVto9~WT&@bpSr`}sJ$k)-bML!n8$>~P_z^s zajW0$Q8(r?POVhWovvpCsX6_?iN~1|75$yn{?zV31Yv8OxMdS~opzCxil8OCW@dtf zzgfO&Wq(g!*JhQp4p|GS(f63s+2%s#2K()`3*KJHQ$;goT8s`QB@Sk+$at)PD{+e? zm&F#FYUcMR?m~_Id6473h@rpB)!bGW@vr%|w>T!rzw%JPZ@aBDs9?7Ue8;c$qUb@Z zp;W=SPo~aJ!w)oir8C%W=4dWT#XWIX+#Hlx(-g~m)gKg!U^+fQZ$YRRk(Y1th;k?JPh^jX5Q?+*Xp+ESujiS1qn(VO^Np%jJsAI0H3q{oX zT&gZhW2RyO1PIeAwlbYgA^_mMk1<~0#;ZC%%SC=0O$$*uxWf7o1-GU>V&S|b?lB7f zE;?C=+k;ZZ;a&|XObdf~DJ!G2>Hv@#iMOu-)I#FSMctTXmII!@IBFEOkItP1DL$X^p_5_* zdnotWhMnELzpHysfPz4fPWdG{*eB>9n^KAUSd`VSz9gi9LX^nUoT$TNE!PCvw5Kh) zTlDh8kXb0q(OEfX#iqM%viYN@mS38uCjQ3pQ7mgU*1_%$kBdQg5X&cYSlH;P!)6jW z<_CFC?DE*1)ShH7nfX&sTvw$z)HtnGc0644aHh#?%z`$f<*n31JwnKPwcI^G3TxRT zaqw-LBh#(+-N5O4Ugb1kRc0>Sk(W%FbwMsOo(uG~;3cMsUh%e)86-CFoLhxTH}|AJ z1cUhRCEPpnU@i2E~PN7yLvO+`zaYjH0M);ValA013uG@ zm$@^r6;AigUR{-R@7+v)Oee&5`PC=?5ly;S_`52CdAa=lvR^fIsB*?^V|_`E4T|x% z$&ZCszbGWv@-qLC+t3VtTN6nsx!S5tx&t!ToOxThwvzgC(eWT1A8HwtX_6ORrIC~(44WH4EU@x*0#=RQv(oArU|zvKc6v&!*il@ z)298Cz><$D)>pim{GzTOBP{B;_LSJ3ACZH8?lG%{-9q0P)Lu{?0f8zwA7--sAgE3U zFTY&-4bmHAgj-lc?9KZC=v&O@fj`ov)lMZ;NQ{*6el&%=4VU?tSWnny5O+OF9=+*e4OR@~pWC zg73%8X8`G&{QaD=&T~XuwT+NI@kdU`n_d!Q%em_`{wDWJ!y2B7E@k_4uU4WyCRFi^ zbSF);@_?2^R#FM)>gWWmB%Fm(2quf~KcDV>q-k=>vl>Q|sn=ILD+0rEFn4?jVboS1 z?z3{Kb?Ld0i_{4UccQxQZRdQp=A!C*(xo>aQh}*_O(p3F`)MZITI`tC@u9YpVo+96 z)GP=}{iL)yC%JSfcB1hykdCe=-w?cPF{XE#n6E42ta~5?6RbA?6hq!oevt=jny-AJ zGfwduD8Pd?D4gt7Gz3yLSN4$aUxYSAGpN@^pzld0J^1F>q;&gfFKaEjUSFDHZ>t>y zGcm30FVNmG5lameA8z$%auA^+UiTjs zDaLB;gP!{a9Uwr_WWhG}LqYHu@2}|RcB7l_9`bHfT9T)6*(sq5+L(cC=ZCk#$p-U$ z2n-qE-DQ4Q>!Qt>dR~`0$D?Sia*|%C-^)qpG?23zgtgY=qEH_sc*77MCYq;o59{#I zGcOz{jvz7Wm?Ks6xB+#!f%qEOZYann*hXu_Kw}Yy zMHFs2Rh4#)3YD{}Nb2!L(bCdjwHoIwrlD!4KNbDBdB#n-puzm_l$IRMDDH57LRPrRrdj%fTZbo|*~LmbnEdJ#&$`31h45=gQ4# zF0d&s%=2JqRhdWId>`#kYc9FH#;A`uQ@PrfQJ)#BZ*|>RSvpDrhGZ@$U z{khF?dNdL&vIaj`iP?giUp^n16c7G6G70L|?uo{g$l)}&t?REQE7=|Bx%^DVug(c^ zGgWne;0Xb*D6%snxuh*0B2vtbymJ$IG&H zrLN6!x|}_qDjjf-z0{H(s8(yn>pRYJxT=2nW+6&J-8&{LiojwklinO;$71&a|5@`4 z2<`-zNs^Nm?->;kIxp^fO)p;4;)!PSu8PS_+oHRwCH_3~8F_!^%I`|RtvSzcpe25T zkCK6ZJAEytC-r4oUY3S3I1>n9oY{9zu0&CL&1~bBdJdC{Nv20BJTP_Vp(jbRs&*L%EGpG8| zRaMs{Ij>U}v9v(+k4{@v7f|vtQnKpF0uc5XF5G+(JIBr`0}qMIulD$%5iK~pqB^^g zx6l4bFZDTR1A^Cu+3O1820TY(8e9eA{i5swILYFB`Y?^r1aqK1*VW8eYqgPfjy4&u zuky2*Hws-ci*n|Y3}&||c>ZMGW|8U9uw^dHv04W8t(R*E;A>0p@zwS3Ya0)Qk|~-> zG-e(;_W_m7iR%sQTi4+sk5&d=S07YTc+w2sd?n3L7sVkl1!kMwn>0M#YZN&BgkYt6 zbMvZ6#m!?#RJr(JHAP$v-pUkJkUha5Fo@KoVLGnJCe5pLShV zj_q+%pxpM*s(4D=3xx8-@fAAGEhNQso0^h(TpEL};WpFiW3JgIm$wx3;)xa)G{a^q zr`$xYU!8VJfZl-1t(j^zd&5I@Dh-vKll*dmXv+ab0Xn^+nhX71D%QmOnz zKqMfk?L&{)vem>eai(8d$Ww}_X3DRm^HzwXk699);k$KJ4Uh*oAfS5apLKu&--oAa zGTnc}^-D9$BIzpA)0_embL+uSlLeR$|4nlPU`+mY$7}(g)M!PKo4AQbo^MVDwt(b5 zU^n2M2w#Z-Z?y98P$UyCQXZUA@~e|J`L&)0kR*mq8lmr^>G|Fm0j`|z34wWz!!1Wu z$I)MbB$1};D!Ced-8GQwS~pt1X@uQkkGOL=^A$P5SuUXjVM&z}gW?A2eb(YBFyrbG zwv?5Hq0U0D0`mS??YvFRm<^^(oJZMuj==i3Y7h`}#eNM(3_WcUgGPldMT=~!Q68?z zanRS5Eh5+lgjOef+00L?rQ&hFVx`uq^JlS_-Qg2f5q*$>B|d$Zms`%>9V2Wi{jrcF zMDB8q2$g?L;$2(KoqNo!{X@Kdm6o!pnm>FvIS#&6S2JCqv85#5E$7$akaHt;yq@1J zslGd(IaT4G@46L}QNQlG3>5A##A~oR zOaO(i?S?X@)>1o_{pW)|8Axv?&#z)2E7mKhY+Jk3a)g5Grk|(*oa$_wCk9fLrMu~@ zHzjPoe&P};nMLenpVXAILL~ZZ(T|`*YPo3Ejfi1#utYD#gznVKYK=cE_eo4@PI`9g zXWjTUNdc6JhBFg9cx``AX!=!`7vQ4yWF=D}boG^_BN(?8J?$)o8P!aQoBVvO5m+q6 zqQ2NpVReNTio;M_cb+O2#m3uXr>CradE_J-&0YhFM3MZ@1A!ci!2t@Q}Zdax?a ztr)#Mc?ue%P!;$Rn^_~WtD7#;=Qmt3dtkX;o8h8u$aw=PEtpF)Feq@@GkZulJ{W;L zckX+`LTuV;nD{NCuAh)hdbNUQEARFg*jKkgY6~UhKypRMWDrDWayrV9*WYyz;nTlI zBu(|RQ5spQR3j2HpwWnHTTXUw@H%tV`=X6Lam0G=3++K^5g`JHC+2>}Ug>HmR?QqX z!mBwZzTVXyIBw8Kbu0E~r(XkjrmkJldRa5hInI#dZ%QZl{2QNKO73%oT2;N0xfcLa zr4LCsI~^3yBHya}pvl63ZJzJTcBn}tiDp+)WnA8i zscx;y#^uj7&r~v(pEoDHS@UtD87WcV*p#c-$){AWTX4JQ-LXhbZKEaLu&2t3P2$`Q#xqQbibf}pbe{7Ns>u&j{z>z{Ren`TrtiZRhc6$ zI_a&WUR^r+l9ST(wP2f};f83$4Y|0q;o-Fv<09NQbSb0mu9&)M4L5_H-S<7TcP(@S zG@#ZVwJFV0ev>R%hjKMTzr%HGQBEU2V4r^^Syj}kdXc`tOweo4nTL#@8e#F3+55zP zxYSe$XFSL`QalwZTd9*{Fa7i3GEw974NnY56=gE~>-7cpA&QNfo+&Tn4Siwaww~vw zZ>MD!id&g&ms6Z!$egF{`?qn2kxJ{Jk=5^@4?`&OaEWJ)%Of;Og{MPf%ZbaMobw6W zfV9kGkpi3AReHSZ(1G;PVLmr}=gl}a{5HEK{ zc84dhhusN|9C~>sdx}YKJ;PQGXJT}1cFa3=-B?G29}@ebbxK50p? z*>A0i)Jq|t5j&Km>YSYZCkr6sn!JnnA5m;sEs}bpP@ry|LXFf8gpdFLDv@zi^B?0R zp9{`^m0>AvQD95})v8;nG2_jVvEA3#*&$QIK&S)oq-IyuM7YQGOL;7G$N71pz&7}D zV7sEz+xki&oME6?;_dSBlfp^*pW@bT3)BrRmTB05eOR9%C?w2t@J=;BXE2!8F?VyY zdg&OZu^%pRvSP#{XPe#sX+XhK!emv?%VekDSsr&=&{370GV@e5UV&M6?Qq@EnO9Gn zd|6&g;*nfrNn0j?8vI=nB?L*kDaRYSplgUvDE9K zEjEU4scaGCz9W+dXXSDq3$Oq^O3pk@^JP08Ur$IAe|)32q2p&t%VCI#g&++3rYg~C zoJ-uaiXcF)IzxiEqG_5P2y$$3aUQee&vOv>(;YH;>|MnVuVyF3$M_sx3uMI*T&BUX z#oCBToPMLL+~F$9@qY_pk&|N6OwGdviC3B?+q-=+j9L2CGYHhnn+0W@R@(Y{0+DpM zM_9A?!^}t`x=hYnP6tVJezR^$(^88w$k~8|lazojAt2ca`&Q;g|2c7qql_CU*?|`| zcwhXXTO$4P?+gH=_K&bB)@}W*dMhE=4$~0GvTqB)4tGsoXA;rR(nr5ItvjGDH40lr zdowwX#ABYTbQ^=)sDm+vA!7SvQ}X*;^@Ilp3}fXYBy42fVE+>?Rpb8C29dPYFQp;wV#r;ab=|*o2=8f=87<|3% zAo=Xzm9tMBhQ9!<)WOciVwF4Tv5wJk%A1YsUXCK!S<5fn@@^Q<`2y)JV!IjBp1%Lx zpVYv7xhCKS{^ZFRza6f9G_B??rs`BP zCJo5NP@$6bTeL0NYWZ#mXMCIti0jUvGOtA!2$2`8D;y>H)KrIzO z-a&cp*Aam1Jhy{nfI!QBXhMewS&R7I!n_7alLk*x6ltZ^8XKauMJ$b*Y2vQlVh(wg!ueOU(~O?50pJoRT`2KRtLhP(LOrqp*Ocu<-3Z075XW{qxGexzduow7*Z5l zT%gcU>p{oA7QW*@{RN2e`Bww=3C9Cy@_&Y{5X5%NUd}dTB(9AYwAFlnCU|RxFx(~% zBuUAz$DFD^H$)NRCkY_{32XUiGROphDb4C5=11%SRT@jmUQH{KEzcHsXd& z$OyP~!w9o`P>SPi^?f>(FSJeTRBp*MCV4 z&`_a?04AHOxERXhkrS6kL#OY*v_HJ$t3#`-HxCoBJqV3)wsfHosQr)Kuv5AZMCczH3G;uD5~M}d@>S~$Zsh# ztsBF230OA1DVIOg1AOA=@;Pjo8Z$fBLoJQIjcMSpRU^^hI(uZwO|+R8A9DbBH+*z# z@?XA9I$SHg?aoGTJ7%$$o@lqW>qNz1H$bik8Q`KhPd(pI%NktpQ?GR+YI2n6e0~5< znL(i8Nw$0pW+8RT^xpum@alEt<47#nB1&RXyy90)TOR!{OW0U>(xI zF6mhQkI>qFIdUzT(@OKCL9ANub8b=lwATJvbC+ahf?MQY^9N)X$6!jC89DWG3Bz8m zYQ+In`@k}1!iWZ`sR*{D2Fa&a+0kk#ozS(HZSxPAx*!7?>2K02E4J{u8dwO1On7C+ zB$qL2zT5zbfPnA+@8W)8wut>GuF~ZZq+wM>DgPxi6c^b-emy0Ooua%^BezSjV|yra z@5Om0@Ee601mJOf(rdi~fJO~1o)}sDdk#~M5P><>*B%3Po8$b#Ohlo#CknIoz7A58 z3KCOO;SRK}7=w!!JVSpyPilhkppw;Uo&&4+U7|6M~rSS&eCFek4^ z8u`iW&IXmSloSBdopQr5r?i66gSf9ve=HM~m|`L4NdykcGeG^`$BS0#s{`5lA_JXL zkMq8r-{zmGLmkBZF)uxqY8`Z|s?I8?X}r@I=^5U2JSdM;O1wSy-Zj}&ZU*apR(uQg zQZSkyw$t#|*)TG9&k*rn9eP7~^XOca{~N$d>?PeBvQk`)vpD%oUeUH^t@7?2ZRL&L zUEVL%|Lb?UD$1v2fMICfWPQ)$&#x zXWZjIufTB}|MuSh>H&bn%1We4{k7*)!{*zC&SY`ZAg~=?V*ku}$Es!WzSClQqyk@` z8ei$MKzYaOw-s?aF~>loI-2m1x5h6o%+zS3_AMj&Jy6Fzf2Oyf`z1W7jPo&?+*_am zH~sUPD|mpzx%PS20|ma2w=k0&Vt7m(=7ppvDy@^|?}<29bE+lf0GF0WY*zKPT^Wha z${le2Ms8`ku65yb?ytS6UnbF(d3owuN%PLOCYA-N*9BRD?6<*^0d3=#%A!eWos|EV zhLbE5lj@#AS5=ceY-2)QEI)op-R~BQAFmhF)mE7eR^*O;y*Q9UKdOb~wL5C=u!^U& zP)eEKj;iX<(;IPgmY`(99kyV#*JiR)D|O~ z<=ZzZmb1rdrhgOVfIlCvB*|Oj^}9}Yb;jMNyGvtbx{6c049phE`4RP9rb$DL&uBEpM6ya+h zJz3P722aF}_SKY?*?<|3j`9Y&b@eRmi4U7hP(yO-Cr#t8%Xw*#DV;m7n~8_h$S-dh zci#L9%Jv^Ab8jlo?+%F8puHvV2hlY{vrT1S3#YGldO1hnj=V}%YfBO#OUDc#{_z5aoeibiJ0x6{Pa#+4&EXquSDBybCFWiCQz;zJGQFdESK?Glyf!s+Lz!17y;3bh4$p$t%44E8k{G-UM*y_~7>54z`p&P$Fb&e)c6agvoK-Qn8 zW`h?c0}*x}gj^qmRW-VAk(@kpEf!k`0cu#{RwMbqVQHt0EgoEIRe#pxS>scj!z2O2 z6@xKNa}8P%w@?EiCoaQyq3#Wz!+vrD9sh1I3#y-tH!q9s~bud z{S+k6qq<_6=W4LsE3vQew!^N@yXCUARoxKNu-WW19^Px?@iEU_d$#2La)8s=cb@89 zu8x2J^mP`2=;e6lgr!w;YZjP{b=g%dw%YX#cdOOU0tJ00tX~*i^%6E&%Nsz(?&RjbpI z893sDFt!mi0n4hWT%HST=~bQxN5zPe`*ERbULy9t>bA8VN#oHl%@0~EsP1glAh7Su z-t5b>qGtZZAUS&#Uop3-yarvB@JxQ8>Lo}YA$~L*DbT?HyH?f-6*BwK&Xb&bx8}N5 zrIo-e{p^^&*4kf4sQ*}9?r}#rQf`&3Sg{B3bIfkBxEQ@2tg_an9X|>zhd#auBd5J$ zuujl@X6tGwYVrCPL-QA6ujF{=s^9z~C;Fgd({cVGQ2$*~4XLcZrwRI6(Z3OAOJ16s zeV<5!NHI0Szw5Km#U^1K0`fJS;UP=8u7M#jP>^w6lu0jtH0TDIl61KF-whj^7SRvI zxRR&-QYd^_uwrySU@~qgyieQZ)M?2!T9T=VT`L-LQ@C3=aC9%yNidfqSH&W&<>}u? zRzyC5Ea~r9;~dkrv7OlQ10?@9hxJmUj+~J=mtQ8Ify7e(wfxxo?rck~eG{$$&G-rOxXJL&ax#j>VP8 zm!%Ok-iZDn`gg0*CgWQ`{x$r}L@EkPkA4>Bmh^`~NAv2{5eM~H4~nlh$a)sC16}`~ zsxJv6yT^L9r#D_9uKJ!uHyS$ia1HXn;5R={1^=p!QvljUi74!7T zEixs;y_**$$hTSelKdHlvAtA5jgCEFaum2C$T?DWzKV!5iAek!3IS_cfv?BQ60n=J z^ZQCaq4@jDu_k zJ_ZWinDkHgpOZ^^ybzSTzZI@Q+H4d{_s^S@gn-3;x87aT|NBS1MDS5|`KoP%BbnHv zB_}?O=r7;DBXN*l)+L%BgzNo-{8A4El@x(`*%~pte3h0di62avM_b&WBlm6!uBmiT z#F{|JX=HnL-i~Q#*04QH?w*`;+|`PE)^x!{n;`x{ZOd?9O!@-K6b;ZF_SK8|n$4(EN%?C#>Y|gbj z*K5?ltW^+75sT~?6*Uhupn?A^Z^hh*&D_@ecxx@ZtYzr#LwzIAgTGTMd~eg{sF>Ac za6WI+v zQK-<~iFr*`_=mFVCD3$}G_ZeuqGEi%RF8|O<&%lLiqhZB+?&@xtM+_sk(Z~^ow&;t zMuHW=X?k;}RQQROvtrJ;y%0vN0SlI5*FWXFd{5NwM{369l`hE}iblda|Ibpt|H#6& z&`nL9jE?7ZRMD>P`l*{PdqZck_KW<69}Zs(46`ssgN=ep9b^#mDyU5_Q{#i{o3nWR zk2Il)=Byq#6E$E?4P8y_H+XL0+gR&!RjzJYrKd|8f5DJ)wQWyZq)p8bHnZ z&B^D7NNPRyyz5U_ByO=BGi+JcvY#SkIzBSbpbpZ$J2aXj&n`0FW!ps^w<`HWubKpg ziMtXI7~6c&Uh9%?9988NiWQnX%`LM5cH1>bC%%w^2}UZ^VJK9EWao1rnn6?xV+RE07%v3w zKm;NjDD9zsegmaT9K$*_7_Dk2i{3PQDJapb`5k?ciO9@g zqkH`$zrq_&fye(Z|H=rrURTXtDMZ8^BhL09HKkL3ALj{`=B<0-P|& zFkJ0|kponDQe)e=Y!Cey@?ek0`m1V&SrXUZ+Xap#V>}VxeOw3`m~6%}d7 z3f@X9RYOYpxGwNJ8~K>wqWxRRZ}+Umi|QE{rSf90s6D!edBo zJwT|t))wsJQh$r6g&{f`=g8guD0%huyagfb_H3wJ=kha}wZ;ql5P%!ai`-a4QZ!W~ zJK;X!BQavWOWNck#gA;Bkt!WO(hlW^i5CJuBJk&^J(^M;LsZebmlPghTP61wH7kA> zbV7bt51#Vb2eo#9pE%$vJzjjNqMYs=huKL%X|8xES^xyx_$4_vH317IFm*nfb#~v#i zn(9%4`ElPN#ush+E)fh-_P(ffV{iFi=imRFd2NIMg~+w&nl|wTlk$@98o&qAvi*JY z!kO>NrmT#SdsZN$t*!k!?>qLW>70gx8eSXcV)yE#y_n-pDM>w3}rie{i;cp$V$dIQ=&gBaljc6t)yV^4s`f})ke!EQ6&!JpM zFb4o}om#=p6YFE80~~FM7yh@yi&TB$-{sQcxD)xB&AATLJcDqtZ_d37?(ZY%Mikut zBw=v5-?m;>wkM;iY7|quk(H6HM!6+|Vf>h|H#r!#?pbvX^j&p*c+q?KNZODa1GQCG z-~QkuCMN!)cwO);M@gcT)tk{shSl}6^<=vHp!?qnh5gr?vO#X%H#V}nkO?&;p=Jg{FQ~sqi0hSSN=w1|HoWtlLBUHv{hMiNQYH}A8~YThv9`& zR`13egXwshUKD;KTlfKt&AQ)fDkHp=5GQdbZJSKi?=^11bdI!rqZM-McT_Lrj6$@N7WkIJQwy01;HLa8=`qB zK^xmdQw}t)S#S8S1J8f_0+`{nQ8ho1`LTG*XHJu^kU!3O)Oel_#*6kJTx3t*yw`bf zp{bB$GX<95<<6|MvWMx1l>)OUZ5c!d?S`ZZ_l=RgGVim!SkD6#O@-rXf0YIoH+Kn@(7WmJ za!aNIPm+slFxepMIgoVPYZoO$fjDE7W!p>i~PbjlOT3@Y|=h5?U7*j zP%mL4QYB?PTq5*O4_}+kg)8R0dl8X&;|`P)A9lJ502+H?Gf)81 z3aDiDU632-<7ZG^8GTYEfXiv^rnI95pvz(A<3N#~!x4ayR}n68%f!G-aQqzB37|2Z zX3lUr@8AFOPQm~Cv;mf>fBm^F&z4UxN1<=vJ}yn?C6G)xb=ipU39rE zGFa@OF+@dIQfh~UiaYE7Veh>Isc!rD@teqwLRMDUGBT2VN@b4*l5vQr$R0=LDJw!q z_Nb7(%AT2>29+e4$KK8{56irQiteQqk8WkNKrIWr781Xlp0gP&8yDD~ zECxCIw6ht(|4UJ8PJ=79(Y$>__f%`JLl;dd)F|q(KO#ijUjo5q0brgkg6BOvK7$O;-}L>DzdoLa zE9fV!^iM;tlDCq(w^{9V5BsT`_z#6zHAy?o89AsAm^3q#pOFg!A z{Jk=(5{J_Iy;p}z_Ea`gL%kn2zI+|KO)J2oPyuNl%gUFFa}=pm()&Ruo&Db;$M z_MjcMCj*$LQ`Pmi?B4#M@}BEFR7B3o3cl zQdnDCBj@D;&M57+#UbQ@E1=-iMCEpO`Y`F z3Ys1}hyD%gx-&U2Qp1m(a>9KsU7k$Phk1jSpAZ&P845^w`v2mx zpGMr^mWr4sNf+a>wZl>W`wx*b2Cz#?THyLhaqJ&ej8ki<)Ap#av)YpvDst>%+@O@;=BOW3Z4}2&T|m0{I`4Wb>U%rZ2zCv4 z&&dn+;lR;{5Y^poC}o)h^}k9DNC0oaT^g;OfNuo{sDy?ndhq_?g~_e#^svqjH$CyPrQcT_?5(^pG3u>O z*wv9(CTQ50%D*mKL>%xFyPC0g=YsQSFC%M}WB-ZW?M~U0=m&l6No{1Kb1!Y6Dg?cH>a%DNV=0V@3$n&mNyC=u?)V z!T1H~-B&g#FS3n7GR%yXmL?+ZFAchEXJHW@FdgEW|J%k*G6Np$#?TKj?T!TOEJx8O zuYGIXS0$+XGHRScteTOrUv=XRw<$`;%gZ`Nu!J&TXTWi$Sjz7Bzps3jjCw?Bvev%j z7>l_(l1efFTO$#al$6An9zk#6@4ffBJHvJKgnpZXHK$+##@E5kss{CV2nl}h|4(M) zF!j2O-7kWG;qOMM-4LF_W%ZaJ+DMLo^*&^d&F44-BF}kKc{9k#Z>J9Vom=H(*Fen~ ztZ~z}sMSDa(Q2pXc1D9lJ*)rD$e!NschgDE--B6#yhbox&Wo~rL9bqY*s8pfvUozG zZL3NJhuBb4{U0iQl+;i2#P<4G_YY6DhDP>Ux3awII0}r5sO9R{#gIN#BgdmS6@U3Z z+MPzBoH3YaU%vW1zh$a3XU+)Ld#*ewD?{5vqnl`O!@lR;jxi8tDlt-GJt{_miy46*DZ`_SVYDW&N{=0rS z=R@wF7%Q{q#y0P?v^J>2INQxoMj)G^$=&<=a~g5^ZWH#U#XjvnX*%Dk!k4 zpcz$94sS(O3HpT6r@3}*EKY|+`_2ISyG-@3G+@YWgb0i0_uHOgWu@H1jqLd#X`tBa zzf<^X$J@n98s|Q3HMEVlOIX){yFFV+c6OS6sqojMTE?i*{r&yG`QSREBfR{_x%VFZ zuJ!ngbyLM9>GS)9j&M0PjTcW;C$#djK$-k^?E)0qa0urAv4#vt-ifi8s@?~|`naF^ z;=&E!0m@SFRHF0R%=azpvGj3@WA*I7@;kT4m(;uR=;-Tn2RJ%AOFHzIZ(+v2e~&>8 zZ`S+ldSW%b{*50zkjzTbZ0#_w(+%M2e$+&qKBwwh1a#Z=_xtXV6T$e+x ztK@**y*_&h%HKc+My&92S0eOvBSvskaiZ`LWO48#BZCkCqU#+s~~F1Mtm zrIFwq?J*xHjQ2}dm$*U@@R`mVCU(K|C3OO{v^QP760dYtpb(wuzoqw3kIfZXR2Ki; zHPm~6c5*`O`{Pe@o@Zq@jNCl z2p0MHzR=BH*9A~z(+meCyKZ{Q6iEnIdWVCQpwZN=S?4VtCJX;W4e?#7xOOQ+T zG%|1h{+HbR=7og?^u$KX4h`e5N#x>0&=w*(!M-Yu)oE{Gd0936Z1m=T$k1oNc?rP@ zkH5u|nem=rm32#9+M45D;co-I8Al&8L8Y3}i#ji=;wI2`JN~}^Aw~@3d~FT?q2M=f z@d!K}c)GmN9ba5uj6&(pJUX@c<;xeU?skgB%ifBb!+I|=Tr&j^mHdGO53j`z0|yTg zGC|VF?)*>`@JmU@T4?GFJY5M!tORSW7!}AiCHwMwD7+*>(adDh6Jx#4QY;Q}i_GQB zG_2#E!^cu-?x_~Ot)D-C`uey`!W8AX0z?k=VV&_gLkUzTGVE}m7ScuL(G#Ov6lD!_ zjYF=A7l-v?t1>p@4nL^fpD8je{cxtA5KE-iWa9J4=y+Gk_ly%R)KQ;c)o)PPB36POS#vXZH$$@>{DpjUMjNghu1BotRnF z_V^sSx=72%o*995ZMz~tBzwd@+jGX`|7N>6b=$-}GxDX^iRPq6*!RH*^hTw~xr>h7 z=x_=nLYM{rLkaAJz>A}YcETVFqDaNXh@^%Kl{%ZoZ?s>qb~QURGD3RIQ0w-7d+{r!E6|HoQf81nNO3PmB$dAJU%eL%s7l@ zAdi4R&6?ytJtWLg(#4=G+y{GxFVys}{EqAGJTtx!R!az0UR(#8d13Wkn8+@8J^7u} zN{%L00jT=P3NHnC@Xj;(W5;U$nw~AKze*$l1pMjiIZEA-hQ9 zto5uoBIAawbgPtO?dG2!|1ckH^4? z#3!gvu~C=JT=5)uE91zKBbC?hYmG({^k>Edti$dS^Wi#fUgWXJl3Y5zbSKF$?4^pQ z$hTo@C4r7{BatGbf}R_k>O`^50%Cop)$tpFwD2j)wje8=pw6J`OPR%_Xg`&6=gws? zL_b9X|6F^lx0<+iWgy*~ZPPY~UE%!s^8w$RbDs5Ipvn?v zP}K-;QbT)b5QVu#Zx_3H^eC3`oVj@gA(Xqzi0aep zKmA(ukg|f5X9rg?K`cr<5FSJL#se3hh_|2erSPQ8v?1MKkT8L`hY~evln!3~z{A&f z@T9QQ^J;aT8zfC`Nh|rO`2Q~i2b`vQoJn&y{9Ed_-h4(zM&4ouV@igP`aHW`?IX&j zOp|uS{P;O|R7p&8ChUp`{~7of{219-u(b7Q@!gx03_^N5O9R{i^y4Q*aJXOBnOUgB z2>ZQHjVTb&)%7?GQrGwx7@b`rm=LIR)-)X+SvaPSH9&BDIfrOgbDx0KalXDsOIRJ8 zowCgkS$Qw_A`jiGm!$rx_H0H^@Io5NRC-tIKXqhnQbSl@X)UPvI%%bWiB<<8 zB7($|6*81uf4>$_Ad-PJ97Mxg5u5#|vu)wBseh>3MtWf%zGCVMh{~ET1l)6b?yNM? zf*&QlapT77(~6p!8un)$43skJfKnY00_ zJQ>#1x`A_AGi@F{5F-db`2w#6qI6b?f^BS-~;n#ZX2zm!; zCmR#_kw{wwg|(Buts_%l3TqlbdnxS}ixMd=1<-bayuvoonC8L*{X*;+F01i;dlfi; z#GP_dk|24Kz{9u9$P!nU+XT@Gse{?##vOvlPEunUpt(pwY+!I6eEOe3uI%yB>+c2N zGPI=Tlo(qLmV0^xRdYT5oS{3|F1NZuwWfEERi4U+S z=iUqrk$_{Q=$1$4NX|=3-$2LAfXVMuw$<=-QHkfKgybmTxdfL17Nf`DCI!*0Hv6_{ zOAT_s|ANPn^R?@rL?;q7W#9K`_&p>l?}O9dEZ9^O6;0!gvmFIPQ@7Q8&_c^x>Aixt z+U}w}yu(GQt3+WSnRp$9t6j+mGDnCsS zt_Fa5HeXMh5v8Yr!YW0Av@WRy0%4AUza)!8E@y_5x~QTr2nrMDe7`Tbu{Y`e-XI8^tnS=-ji<-lX@=>n z3v!2_|3lC-1xQcm%Ti@oF@Ok;e(nL2jv8L+_`%jBE;6{oiB{_z%%7=h1V9DGG<+#b`I?vEUT&aMm5dB3 zMEBr-T?c#DC%MK<95bJ)EuyDAz=-0Ej;-5#wd>qo7`^gECKHiOC51W49!rYF*< z3r@FSZn~zV)AYRK{UT7+*vN1+Hv8g}qDDyt%=W`YXXq`tA1qz0i}W1E>!G>@J1xIt z!MXjQd-vC38%|7D$Hc_&HEISDBbVkAKuWZmVaY^!5`-rTg=@M5Lwd>Y+}W8mwr!Cv z`5I&gO{41OOr?@Im8|P1Z6z{E-jZUp8TzhoJ=E=2RZETC`<5uWl99^d7=DTIom||9 z5s=Ddt9z@DCj>+jXoL0%${}Kg!iL{c6b|fPN+`q(iJNJhMg9KVgM5mUMxu>#S|c<` zm7-TZeeY**qOX_qtFMtoXsxWuRkkdBJz}-_67GzA`OCKjiy>KJ0;rt*fn~F*2Mt|N z2i{dbCCA1ajE&9^xteKA!jdv?_-*S7Wn1qsed7gAE-gn@4aaW&f)AgsNAV4mwvmC5 zpR4M24Qv1cTTMEGESIKe%|_^F--2Tz69H`BGA&d7PT-TlRg!?B_;VuLmkIK!p=tTx zfk<}pO*I}S`{8{mAd1QcKt=8Cw}=g~_~_JQtM~T`UM1nk>jr zrRBo=b*jDL!I>ycR9$S)ig~wQu$}h%6ZOWOhKP2Bl78^Uj<#dpGAk`dY=no%7Bwv$ z9l7b-3HxH%15;-}PNID>pMl?xsP%;gnSL%c%;_M4ssT8zw`w^_$MMFh>f3@cR^Kb< zJ9DO5yfRW#o7!<5BeialgQadl3x5W0UsFD|WWnRl^ZP-?B`6fS8GnHgPvxcoRam_A z076s+%e&Qb7lp~k$VHsIAGq%R8h%puf>XEVM)Y#VG4#f|x?qc97dQ2?j^hTqKAZQ` zxjWYfe+g@k5+qaRX7fv7X8L-u8zNkgA;AN;z()C7g#XA*!wo*v98i@-n~F8BSkrm~ z+n&!MhB#!099=Mn7hSM+ERCy3KlN_~ep6`0ffI!1Q(@){9vtt163l+{eX=nlVeu?) zb{>gI5lLCb7CG(=4aYb{yOjB8MI^T>59Y^{apbSJf~`JY^r4&Pl1!csrSVz=f{Ph0 zdhb27{^ZY{IapIKGjLUo3u^=f&*K~p(ZN>RZVR7H7lMp-O2y>zH?2DV4uiaf${EL662qfSrp(IP$dxRy&WK{0uFmy`)%6GQG(kUnz= z8^{(S3upT6<1FAS)-SpZ@(ZFpTjB09 zU6CN}ebv;|bXxfr!RPV(1B!e!;jvKC<2A@?hVqNHG$r%3aO<3?`}B#tF~Q;03QD^N z*~&s6O3z>Q(4ODPxVUR)8#}u0%*ytgP7r1jl)FA!WqH} zTK2HWr>OW)ftI%ShRBAt11qOK!cDU;2db{KVZCDwmg(+}JEk%&+50YN-#W?|H$zFk zMmEF{FpMmSU!zUqkgQkR$s9+dnH#ZB(9Yd%;>k(2GfR&=MU?z31s1$L_EO(s)U;X_XqPVN4G6J!w{N=V$pOja6bstu5zKLohB#Xx5~tlv%(b!Mv< z$x1mPjQR)+WbjT$tC)UGn0@-v=3*MPgrH~#{V5JA?i!m5-8uICMp)agD9O&-NBc4l z+<&taFzlcI@+M}r42<@pC` zi>IWrB8&gjpKF?E@gu{H&9(_|6(jMgotp``PW~k4Gr?EBBQHGW<#PPeIKMn0>+-#&<|0i{P}A zD$GhssnqLqTbnoACn(>!WbN7$abqb)roxRs5^wQ0UO(4~w}f*bf;3hQxk@lCGCIw} zNIDwW#a7(*o01Y*iPjBXaBEP7Vn}Q6fO?DUKxnIT`MPF0zhjLnt}ABC)IqM8wP`vD z?Y#Mp5xF!mt@9ybx+&S=KBGkG)@ok~wSDMn1w#6mNd@!t&4C=7>;enC`%&4iV!bFa zee^T0*;;=gNp%ers1%jkT?j-7CLfzafkX{;G^DS9he0B9%g2jL)V&*3J+e8_%}wQ` z>*%Bz``tw!CG`^cKg^S1;B3VasPxX@VUsUR=Op)!+OQY6PthP%6|C=VGtYzh)$08ISo?e+n!K)Pp6L#2{R|Y9|_Ema|k8O7io-{ZRH4t0B{Q5hpk;XW){RmwelE?(4V=hu zID(Y!E2486k!5%E$K1kfx2ne#*{$pZTHSdh-j;>gcctvLPa6dF->Kb-2;6N~Q;%!Il*Loze3stePD_iPp6bORV;}A!`h?#Yj-_eIM;)lj zP19zmdT&(5FhNb}jvuJ05oy52C=AoX$D3}_QT zO~rzk*klryl$K_+wX>sH4n6ks#%PpXPD=)kr^yCGZc5P_4J{MEYQ)kyY2D}Fn&ED8 z)&1RYSIBpE_Y87MeZ@pZXD1BsTUHVsln&@2{AC$huyYs#)bFx;e$+ji+=F)@Q{>TsyE7Nk<9k z2w$4`H*s#r?zk+BH-{+_JCSo%;@hr~UO-ck?aMw_GW=}mfqSjS61I;BsV5l?ple6T z6{lbMi}ve{i_+`b4A0fZ?4k;m&A4~xy^5TCrF?leLgONyUX8PlRql8vPS3ydG+-UM zV4b#pVWn_nFy(D!B|gM$1ny|-kv+kX@_Z|69vn1#{$e)qGhCDb#@m0IUqB;T_iNE; zVLbPvjcqu}E6xUES8QIl635}(v974zGUDC2jVd9rczmsd-5ZjW64j{aIhT3s@do`hvhGxB*HyF=iN%xVx{qK*A%BKYw;# zC)bU0M!8!zI7Qk*xZZjkf@!zOSfDpceHbfeTusX{P~+k}Jda}&Z0Gj1Qo!ErDC>SM zyqW*?Lrt9h^8+=RI1SQOH1Dn+&6fUm6!6B!Mp)4x*?!t^a6l1e6-Hmr2hWSL;8Cs}FaqP~W z^LgquXD_~V^Aq0GXDR?1^gfMGC(wZIcw$-_9Xf|W^Pt?GvRv+o1HbZ{|_RjH&6QJhKgs1FSP+DV>ikH?+hZUWx)bER{{m|c{) z^t4O%ov7u@qo(>G`I+%`=~8k=y{#_BJ(j`v5li*lAQCm(=C+z_v>Y#XU9G-(sw!?% zt^7&U4|t$_4Y5Q8rv~C+EOe_@ivUg4ENul4M#5y*nJ!#VVQE~o@f3YLlD6Q3o3;NH zvfId{IE2a{PB61veOqi1mvl)dEI_Vx^Rg|cMCKhg*Tb|68-PQ0VFeF}0f`p*nAT;M z9<#jU@dU=|$vlMf-mrsF=<**WR{xd!1tVz*xk`m5uzBuoXBu`Ybl0%5cyWJH+#9@N z7y`pwa6%YIi0;^VE&1=9X-S>u5zLuxDbl>86mh~hXb%%_-x7~F$*r|bdV~t4&)1lc zk@nSpY(#gMrD_>5^(1ypHoWNjpjlzlFMMpeU(3G#AV1Y63B)W|X!ggE%o{As z)r+%v0E74QDXaQ>SBfUGa2m9x``#!g-BT~Q#dwvXXCzu6$+hL7Px)49mZMd;+dHS_ zpJMqP2WcN&5H>kIn25xuTNps%oTe&XoUdZWz=*1wrt(-w^xf(-burWp_BIL$3ucw= zsb1k;&pWbJ%F1k9Lvns&aa>{|mQfZj+T-w^$Q7(Ko+jxS!BcoJmnzg3$A~$a(KkwR zF2Mv+dXeWY`h0l#VeDvM=}XmE7&OtBGRE^Mi`myXL~-{ib9b`$`UhP80W#hC zo!7+h7V|H7IvMZ+YW2coKbWd_`tu~u$1g<0xYoFA-m?{bd1L9p!~B6XUkvJ%cDV_^ zzun3!O`T_=Z&@VuGln}0@aq%V*Zik1{0UNDak6x!^cPah#yK>WYRb#!n21O3@Xf%Pb}+y zD+p}3@5AiAiy+-pQDwgKT6z(<4&z`ie$lpgEcvgfwa`uIdy%-1@trFs7R_c2^)YAg z;?oaM#AhyE96qKcdmzEk6rw6;SNHf2g~Bw+aGe~EY&sda3-AhmtJ|?js;>=l=zz}R zHEU;REW?P;y{Vu|r3;2UUA>i63cc;p_$_PgZ#n#BBXP@2C}!;Kkcw{?8(iJb4{rKy z7qpHf@!csIN!oqM8GOgE5dFaj3iCQDy0*!gM29|I_-Tc7YGE>x(7XF-A6-q&%-|s% z&o@dE=m!vWx^Yg>TcjS7$g2M%x5Tqhys<8+o&ikA1sMgzQQW|mCwJP1M z4>UKBz1Ht^c^2+JtJIx++Ks^P(itQ(Thua-;6()zNAA1ci1^-ZyU?SlvKr%O0aO-X`yaWzQ3?_yV1Fls_{)-jxm$0qHT-SdW=wf~puDg58TEst1zd_6^SScbweNy>1Dv@*x{*=j7e>Qo zsT20reAw5hR`hw#60~Q&4n$w2vXi)>%`EIIEpzJ$1qP4ELYI962N?otGtXr;PEZ>y z;n9MPY+CI}#q~k^S%EfFMAJ!e%@f61-sI;??g!IU<#4>QyY9~&Z(OpOp7hyA?k2e4 z0I>a|DX2s{xhxV;A=wEMO(v%&XUWo4UpQU@rx#w8+OJxkG&i&hCuMQamAl%_ol3V8 z{pUws97EFQ!*Y#K0ub|>u~%{gNmL_SP#$;=nO6GJpm|#QtLtu#J7dxP4PA35$}HTg z_K7t!7}~jZIa}_LX^GF&%A@w4d;0>D$p+N+YuLMM1hwTqQTn>{@`v1O#&=GvX1|C_ zoPNlj8)M)XdP23D)nPqbq1i9A2UmG9KTXu+?$lZ=`DJ`}=0Ech&np9&gYQS=OHePU zp69UO(DpK1j-oRPGe!=1bO9*4us-V#L$AcRk7ye@FH}ZPtsRyf!htoG=rG4y(*2O9 zP{6?%C4FjJRDJq-2`*Loc3xjziv!t@s9w>|9|5X&rB}x6W#6)JA5q2w8Bs6*^yy1$ zA~X;N>HI{}*CKkyHGDiUY;SORB?>CpJ?R>{mh*qyjl)1o*EnQWr#W@_(7~Dj2mAR1 z6%Icj89OhJ%a1Tg7O9U-b=_sgS!-`99!`YWq0d2h5j2%|NuFtrhXPafYI z#rCycnB5dfnO_W`nWT_epX$3d&qZp#zOh)GUa)?1wFX8L$A>8Bl;fn;WZ6Q z$Iq+mOG$1Vq&7gdSF__5Uav_=*(h&aNhHY^nI@0Y%}HrC%Wz0~eN)}i?-RG>DcvpH zO-{tpqX&-5U0+QOL?V-tBw+I7t71YPFtdy_Rv?njZ|Vqlik2L2G#qyLl;#FDxw70v^Wila!s7=A<@Wsy(^)bB+aE<9?xhk#)V(kB znr94Z(aEVvG}4vFmoL~(ZARst!uRD+vj9#iktq!_0bQr12Yd9Y8(fp6>t>kaDHh}iNgSr#}= zMeqJ)D0Td!Cu?t0=rg$MoZc5Mh*?HKlM>$G9p*LC-7jKV7Ig#_0sSf3>?|v06oUz_ zmwqm()P$5wcU<3n4C%(*ze7HS5x6>(xc@^?>;tasS+WWNUBojzKbvRsTcl?e{$j5@ zBi5=&XTe&%XIM(`SO2Fw{oaMuIqj#QJ5vy(<#o+y$J?`W&6c+eS&QKzUJl^9jJ#-3dn;3@N{4yu>c%c^23MT zMy&LK&`=Nth?(&zJLTP+zP&$X?yAkVq*Ir6@`Tan`sDb3bR0AQ8tx}gUDwtK#n{|u zfqa^GFB$en73<2wx8}-{KHZin8^7Nvy104c#+^IGPFh*`)}?=>Lk!qRpl?caazzHd zd$i8(-VYd^(J8%JuizAl)2#n-c3%C5pK5l0l~mu|VhK0*HGGU$FFsmwYME?b{`U>; zF;XMCslY*$K-aDKrIRcYoas~&oLX{-KPZN~3fTA76}*$1H*%gxT$`NQK0&SqT4unn z{#o*Ro)c*J1fW{`bMVMFvwQdV2JLS|$WGRrpst7AQ|PsLXcoV_BiwuJ<$EbNKg}a= zOb;fvgahe6X<1FI;D5Z-9RA_#&0g>F<|$d6Rj*}jL0g88>=55P!f)dOCmg44+wxAh z^MUq?|Mgl%$!V|Ysj~;$c%A?TT8aII56*eM-69b^%E7U1M$z~vS0c4Wd`NY9^AxCO z%Z8bs-}otd!^%Nqh;szQ^R!o8ljWOy6zvWyGhB)62QETBn#=wP0i7G1BSFN3lNYuO zDZ81A_71DojJy=idu)5NpOLL?wy62$jW9g&U2za)35D+JWrorI_42Lq_P(6PVIH7UuV{#(P@0v2^$|BuO zeJn*>(EOT1EsFzF@fsP|m(e2;tFfCgKNEAe3PJxAU^B*1pozU!C%BM%7)}=jDUJmV%hSa)ZMvZ zpA22O+1t-_aJM75Z)V}F+LtD9)}LPtkBCm~4%7AGjb%A#HR;weYQSs4U+~M2>um!( zPH>vath!4|8+++|Xm*L=+!xxT#meJ|Q*n+N<*>c1fz}54>x|KMo*w<}P;ITheXd663H?p2 z=6D~LFSx_BgF67^!{_3U5LqtD@|?+}CQ14c<1NKO7IArLoZ%RV*M6CHrl#dLZ>F=; zs1C{{JxH^Awh<(F0v5JS~=b9Uxj6+tb#QR^umeV$xe4AuQBQ{oj)B%u8`ZhCR zC1hqddweok;b|bp7XFUnh7)!mIy$%$ny%Gg!Cb5}Y8uT=b3=O8Lf38G04lJY6dzfr zqHfA-k#UQi>c9o)1F7~uCwm%i$TBaJ#-8S&rdiN+5dcTYSRen@x6+6kkv>6+Z z9C>sW7r$+sCe1qh9vtJke`R1WgV>}4*#?`NP05cT2ou;GlGHdungIy*UN_E(j|xoz zElq%3BZ=bHc&3|Or=S!yImZVY2no<7ndkW~^rNnU^i`r&4J9?A@}!(B{YgI7e!N6p z4#zjG9ctI|mEM#;{ZX?*E^10WDi{O5{D;5MxL8FFM^lzF)Gg9$w{+OGmn;B8;e8l~ z1YYC7nykr+2h#m7DUJEzkZ*XG1dAsGOZPtNVE(9ewm57@w5s`Lq*io!3U6Jxp-nLE zF<@g?=IjY60g!DndcNAJNVXLRy9p>MmcEZ3#8>HBFM zK{Qd0l%GkV*SoG*3Id6=$=1PN9rvyXIyt})=rg-O+l8d1N}`uP-{w8fV&)AU>q zsqelTuea~UU?~_(+{cO(L#6s}3q~~N6Fcpn?O&325p&%;UeUL+X zo0lg};3H^(-iT4AYHPhjHte!%@VksRB|>00#$g&Ayv!|ZW9H$sHc!u;ve(R8;L^CN zt7Zl8TEQHLc}Y#vccdI_e-xn_uv5g5EFXfE0qlIl9ELz~#7)>4fwxe(s50uNosD|s z%7M{Jq1=-{r!1qAg20T=p}g*5(m!VPh!FRg1@@T^F!ta3d|^J?VXkJ?H|1dTw6iQ= zDg6vmf?M9mGem1`Iq68xD!1f*19?fXYhV;7+0naNk5SR2f{WWeH>Xj$JShm1?*(I}q#FI`U4j&WYAt^%352 zf;|DJ!q5$z%HO-x;zgy~7@`ajMrnw$61yzY%H4sK%;8R#VtOnsY!+1C;lJ&)#^oDF~{;)i`I^ zOfcdqyO-h&IPq5TW7BQ(pvM)Qi+PYj4y8uY|45k=SQw%zk-VAtaJ6s!iT%jZbT!TNkwWDCdd1! z?PSEtN@50wJRy?5r%sM*V!F#Z2Bnn)ncDs7B#&$_mr3s2DqG)Z}n(uSf z4hgu>&o0<;i`duB0GjxzUH-{JO}lC zyWz7a^k?JHX!A-1T6!64j_CagDb#=TUiBmbyK$rGv(dOq*SSToQIC?*j`uZTDaDLV}r)4j$FxG#f9f3Lnc#!Y* zuBmxCHVuIZPKbSYr*Y-U8>A>b7o7w*!qYxESgpUZQWcB2+X{;3Ux(9eUp?I+@Bj{y zLQ8(cEDq?Y6Zt^vVwjfP{8AQ&6cp#CDmj%#7rl_8S2R2+Qo9vnjf6KaBGnQKkI9*r zi=?_;_1pE90tNOl%zpW@TCgV27L=&rt8vE9f;hT9@4n9Sjw;Z4n6y*CB<8nok>EL0 zKc^+Sa;|j2h@wnJnI+_WzdQp|*DcSUu4nWxdb32gY^uk2ee6{dP)=^@s%18M?&^Dn zumIPAQjt*IulgfJ=@z&pMr$NTG#AYX*2;h2&DjN%zPY?Yli{b9=|KW$r3Ac#TpCm) zHf=tC1$-IXSiXWG+%CiKywZws2A$o;^0Dq>KcB?eZZD3wYCo-dza4a$^Z3&Dt$|+^ zz5PpPOc=Pp;gAj0r8pJY8(%7ps3b2??L8GWzbxGgjS?4;-t>Y`F&$V)fa8K-0LKwT z2cSIRA784CAO1YYw%gzBfBsoyWN;A@F4-f;ly1Hmbt%MUZgKBIl(zzd0 zr|Wf})U40OzmY~FZL||8HuSnmETcC+UoRdx$GZDV_KekZ$C&C_p$N_IILS>GPLf4D zlFtU3l2C~zwsdCNk!Z%GQyD&wX`YQmmLVD?Il44s$I!zx_QhXwSwssqf}ivNN^hXb zB&B|{i2qSw@^oUOt&1Jl(scFR34xc|UPxp9;d4wU_$|Focgb!#w5ZWZs@@%DdzZ5d zIa9@lKxH&~$}9{oWO&LudkqHFG+B#K;3L36a%}Gl#hRmdiG~YMX@tuN|LJ9$cSWE! zG`6R6T5Cd`X#CvXSuOvWAJ9)2o5uV!tCr}uR~r6vcRb(df}5XcYK0?@gGCSZes`zz zRnt|?mFkj>ZxHCc_08b@>`s;PQ;$>WiFBc{hBFjVUqf&R|IwY;tj%G*SuUr$5-uq( zs-?`N>V0FRHWMTS9^v!re}G&(q&mDFfDN?5+XUu+N+(m$4XNUoO-V`858n*s(@b^9 zII($B!d~9lK|s@?J1EpbsM}M(#H7J)(*WaMZinfjtJFk%s!n+H6?fQ(Z3EIj=|v@f z2)hoU0lUW18I&VSWY~7EZcexKhc43=^&_^jFgNYjIV5Tl>YCLhIFDu2y2?0skbE6n zRDAeta3t@=_yIJ5?2^tplqLi;RS-=#$Z)i2fDFfclxGHQz>~WJ-*;LRe=Sqhoi~lg zhG_Y39yRp??Gw*JppQO_AW+!f#)Gl)0qr(=cz|6)eTz3;w5kISeBc7$1f#~_yIZ^l zFCgp))bGvD5=~0JV~oqR`!$+I*dDBUwLkB5$j@re?%RFb{$ndKs4}@|8OH@fj?y4l z@9CT-GRpVl$FTIqmCIavHRyn*WsIK}<7G$|=_rL|T(t$! zL!#OHa#aUEOC{`bj^5dE0v{H}uX6~LrhNMjnH8uS8^2ho6T@nxPxj#E_WM4ow zz~>ARIY^xZp*QQTb!}>!7+NPe&!uf6Oq~;yvrEt4f9nGpHHPfp(Du&}LVec`nT|s$ znkh+N>2)ZOnzoxS@H|)*C`bjtN*;F+&EnZJ-$s_p#Xd85dk2&5_y2hb4#X>!J1H!v zDsY^S+6Wcx;-X#l?J@YhA;)t2ixk`N(h_9lSJVK^LG?|1Arm)!)pA*|)<8~Q#yJwM zIOM(yzigMSKstq;Ytz!-mx#WxovoibP4?sClVrb^+Xf}!H zH;Gas%BJPdN3C)Hp*{3c89!r}%OqxbM1}eMa+7r7XJNMCV{JL0>&C8xgANqDDWUo& zHmX#V`~4B!$H>P*spZUNPN}$~omtst=22%u<8_-;p_O4X_~Ql_z)2$PW%_91Y_jx5ar;!`*24WgYo&b4v_{IUCCzFd@|e9Wblm;S ztrsK+O)^=K>=t9VCHtF2s^celrk!px12fLlxZZXd<5}Lh6+^{MdnIK) zE`Du!SeD6gPT_Bm8C*$>Hms%8EHVpDOf5GYUXv2K{lN0?9NmKyTqTY=UheO<8{`t6q0Ihd-W@M@HeAx4og;=4@&Q?>=^ z)b?RbB^`{u{;c2{VRU{*FuDy%9>nVr7(Mj2=5?jdHn2Kw^mOkuZP&4v`2Efh9M}L*# zg#hkKr4jo=l+z=%GrCOTM-ugX;@7tEX%7f9{Y`0rk5iLc~GGu2v!95MaRRq@#V=%0nX0~Y{RzUn&h3D8ct}Nx_ba$TSQdg#(@Wg*a5Pq$;*R#dGR*;U7(F-cThzk z&oZzb=*cth0HoIsim0RwsyKs4=Vul=C+}x6_>!-t;`79pL2N$S4*?rXyyJ=m)p2A+ zS&hw3e7`ea|Kqz355%A8cYiIpkfG^1?ehK!qF4arUL=!$);uVcDAcC?6}cuT+OX4- zV^gsS`v0u#%b7n_Ruq*so>l?TTf}k6PL}av!-GYYUWd!=#+uD0MG;*I!>yP=8$@_D zyNmNRK&YjM`uZVu#jHsqJGD5oUjL3PPqPY6P?|bT{sn!QRB{&|_3=+Ll_#FA`xX~S zQ@q}0To)Ii7gBXGL-ihXr!qK$td?1_$xC!?I9s217r?aA!8)Ed0f)9bb(`2`bJmjF z>dBKP%bC02_B`>gU1Bqdb!3$8{FaW(;a@cmf}KnTpqH0^%M#m%3?Vg^4n%ZGg;XDDP$9HR@g#1e@#!&dQwWwCKC29nvRT z-f_j!1%4rPKihJ|Knuu&)bmG*(%6*+7kV-=%`H$32O4>ycf`zd@Q(BO|(0wsS@qd{6%7Cc0 zu3;EQ1pygpBpj4(RJuU{K|+u&DN*U}lx_tCq*XwryF*eM=^S8?hM~K@Ga$-yulN1^ z{eziv_FjASUNxF`EB4v$gFs`~qU*{dt;kQmq*VgIR&mSxU`EKYIqPE`aO6t$|-1QeEb#44CPASHdu}pO0?77Xp|I@te8Uk+HUMjlgqq zPl4XjH__2siQlcbo80{b6oVdJe($3q&@l@<@g2zi@LB0%ox7m#2v!RZQcPNQ1N7~Q zKYow}ujA*8DOSPM&MGcm0{&_m)7R7VIKTom*DhbVaz)ABr!Ei@hRGtL84GTqdDg+K z{dn_is!9gX{pn1l7IGe=)Q3)_?+_=YYNY7fwP~t_LXU*J7m2*0WcKs+Ye`U*r*_ASM?O*am>nM` z(V|+}JXs$;+jkx)C`>c_LVc=H0LC2vo*ie`d`=_jbINg%_^isx9M(K%V>bSgp_7Xf z8s(sZMOdOq_(a{g?kJq}7&J3~_o1lvsofXa0Uh`CRmR^tQyr+FFV|EYqUj9>A|LtK zNzXn26%w$D5Aal6Ib|g*Ag5#|mxJ{yQ9@e`)Q<&*hU(j|v2|Sn8Q`;uN3q}CKg$#< z0U`dXyDZ|r*aHxdxy3~cCFt|Ua^nU7B{d{iqd#oH-~r(Zq;22ia1E*S#&KpN^wHBMhYS~5%W7PE6e-3a`Z z8ZxUtlJb=4)&5xu_8kFG)G^%1aJD*%hX^?1L0hQiT|Pl0rW>EX0wtVZ-}IQBA~~l7 zm@@@u{yoGBj~XbC6xe(_xyNOMYH*o|1T!VMM<^FFW!`1(E=q?CXuc`f4Jygzi#TLLT{?a+vfD)~ml0`O?T_ zh+2K{uWEDPnw!0thWk}L;XS5yi5X)B2S==oH-CS3RNTqEfe@cW8B-w2F^%WfY(AnC zd5^>Kj1L@v%FPv^x$+$Cn3pr;mdJJ%LuI@Ov88-=n7>>BwclXf;h^akJGFW3$ZfUS zf`8>;K8GO@`l3(`f5D=(Z2vpZU)EumD*1zsp-$??m3U}Q2GH9*HF`ekVGD27ZO^f> z@AEIW_9nW@mq8a+AR=$$W*J~8>67O7g&stV5p8wviqcuamsSOk#R-%b=iOd8aqfKq zt>{cgj@oSx2sJ3{P75eAgldW{mE5Q0PKhJ;1Yp2`D>B8u5dIupC3jG>V&M9Y_Zts* z9{la(SOZW-6M(}yKtPqPdHPORBEa9S{c7iPS*)2L;rCq(R1l+EXaU@7o=le}GkLFK zyad7{5Zhp!IW=fUE)HCCgZnIX_f!l3^Hc?%qB3b7^!jxJrENOGwWpyD$dWj-Jf#|0kT!Phk*BdJ9tWw<9b{?@K0e`L|TiqM;S40?D?g-q*HRnaNpfM5zxpdV{=o}2_6tjM6T4TDJJ z;sVqil)&QL7Zyi`abIk^Y?GF;>4?9*Rb$y#pL)MoFg_H^OJLxSUuus`YXbE^*R>ux^|xe_u|@L7y`h>K(El z64cmpt`@!m^T+tY!^0KlEx#O;T8T2$tE1gXL8NuufaX|wL}P|prT*#lB!^$@^~A}! zEOa(AQ2%xpOqV{qMe&#O{11_FubIE>>u7L(|bmnzF$pSNN+0BexB)+{=jUB0?>97KT{|nI^;!?&;bty z7HJv9FQXR-ppV59em?L@NbxeI>)8|npsDs2-gBz+ZZ~N_o4jh2&OYB=>RNp!s#<3M z+iWLfPC)vGpOsD=?(gg&Q2$xMG5^2jJCWvCvOY-=FZLt zPm1LeWL>V~4L|ji`cm2R)DRY$*1+2!*n$pcj6^Xhj9$r@P(LlxI^u6Gpi%yUcW#iSF_Azbn9fmah{ znvBj)3QYO|#)<|0o(=rDR0uhB3%HvEx^rj#4!?$l0+bQxP&-FJgjmh1mToT*aiFIA z2{16i5o~?tE5AVYeqMTQ`u!Y{CF7<*TLG}%S9gbu-wul$a&%tqvD*1<7jRe%40JYc zQVS)CqmEn8-{_h@T_EWj03O!$s^oL8Ojo`lI~yC>iA8@0GRt`2qfD*Ab0$5KfF{=} z3!8(SQCbKX9F@+vk>8Jl3YtgTwUy!td36Tu| z?OO0Jr_+nraaM&je-9r`0t2X`Li1!kzgx6WJ~Q$>b)4_3*C@%fhgAPK^8gtEm7XuB z_*)#|AZ9J)HIxMbVBl5Bpc$4Y00okB03Qxm5i@}Kyey#w3JHG#bTR>>z|2rLWMS~( zGpw`&7YQ?&jNpi~3n4T|7nR|@^5YpWAUSxeSdrwY@xMmu#R1od!venZ!4GHd!v>#ggYUq!Bt9uk zn{zICMF~+h+1@$W$Q7di$dm%8qrk|?6m;K^Q{;H4VeAr0XVw{+pHpBHyuZIcqiiM_ zkY@N5xVY3FUNr%V4&wCA@{hpw$oQ!$M*6QiFI4W1hpoH@{HvHSu>R$1(F)h<2hK)m z0W)5_>_sn`4W6%UdYLk(?DP_fak-5OgZ(^-x{fS(lTzb7f9@uFy@`Uch1^H?o7X(z zE)O@GtFumHX8+{#hMu^%IPXea)4eI*<=5OZOG>$ z_fPhPQ)xTkb%HR=PIV2Zv(5e~_0XK#9?^KWh>6jQ1XOOszDB<tB#eahRF-H{ zfFse>eNZ?D^%c6xmMYSw022|NV=4cX_DcaoW1*UI_@$OnJn+#A!r_@pMh|DXqftB@ zG3vR$J+xmW)BAYFIf?)deivB*l$WzaeYE!Ws>BZ3Pev$l!o8B2Gj{MW0B$W&RF=OO z47dsd{baAYfSH_;2{S-t4?yr)cP>KOa{%uGa75AF+&^cK&u?nFy5xvRNi%-54b045mow}o4$4k zFiniuf4{CLW>tcg7SDp<~iBtK1mS9C;@O#@H zfD`0CPbYyVEc8GwA>f)PTmkh7BrNVDE$D5}TU!sToHx?A+DCoGh^IT&ogHnqoz}aO zD^DwI(yMq~qK{VQt$eXaX1v$vhY8d@gxYZ@@-;WAK`8DhU?>VI+Ed^sB-aAUG#Lp% zkn@i?P#xY#;zc!ap@Sfwok9DIi}x}+Ie>r89{_%nculfID&xkVkBCv>n94&~2E6Q# z+;=YZ{xmV{IeXkAfX3ZOreR!!1K3Rn<@62uaQFKA-fAyQOsKN#4PYWlnjgVGv9f&C zu&}UzK%2Ol}Z`R*679dsZ{wD z(nX&$v;crAiV0B=S%*PUJl5~j%;p~=&>1{`efjJe*pEVh)imz%?;}CwK%jLYEQ9`$cVx>6rY1?FzbtJqd?#^bL`eD`o=f z%nTqe3A*%=Z@NeVAyGz)gUVMQ2!8wW`~!dx0a8L*UmPv8jf~Q5Y;5rDET6wd0bc{| z;prP%lNDU~(AzxcPk(*}?5Vukt~dW@&tY_lu<&B8T8+Z-m)pwB;N7;!*7#>+=MO{# zpm^GU`F@w>45LVT2t7gju3ngu;!S8u;7uJal*Eea!XTQ+?lL2B{+3XZ8am`|irNa} z!8xjsc!XA%=VxZN^YHL|HMTRp3KA6;(wdZ(magEknlnXJK1ca82s+dc`?fLj1+3;c zf;VfW9de3_iw_3j>6|2n0B@{co4s6gNdAkNpmI`RNWIa#X}e3=VDXb8qN%c197nt#i*xPVs(p+O|08rLz&Hj-Jw|@=)!!f> zca)&*{Q-j^u)Wsk%SzcR@X;r)g?@Mq{v&BQuRw==1+T<{eyJlQAAG(I66T9w?Fi&d zpKI(NRI=B39z14Vgz@Vwp&x)oAjG1=75+sCq~^mx^;(lGQ_o->@{$`AQ&IQ7E+@S(5K9@o+@BufjpSOj#0!5=e_ju;8 zDhXSy(X3X!!a2>a_@a33PMFWo|E3BG2wwz>Hbq88c03*1@(4m?401%xa3zcc80q)H z1H@5;E9@C#{+B=!e!Ud377js+P~oIraP1{x2cQ3WNfvl%_i@Z0Reg%%Xk$~;qSVyX zr$j3Y3tvBw2o0X1*V=XgP{jw(ie6TNM*n+S4>|48ibR}O zDcn1#&awB|0eFS|gaHNR{Iq~590PJuK@k@K51L|!X$KT?Yhf#iIGfjg=$%UzUAfN#Z##ofj*$glba>8IrzlE+qt{Y7Z zbB$Y8U;HMHz>Vg=k-_Q(?B@#+h&n$tl6lEMd-WC$p}0yZcipa93yNx(M?U%uAqpr` z7@*-@1a3NDRL=PUVEA0FEIIl~gE*Wf^i25#PBpEGT(m5ni`=n}w1Y5yy@m^m0rc}4 zksE!P0#UoXvX)%koQo1dxZ5?3t#pCYkQ)-=#a#L$m?)r!w;@iUMlH}F-wKH+o%eiT zPZaWXKG7Gyl+9C8k0N61;kVjk97#5vCmkFvJZ76wZbs51%Ux-?n4UFqfO@&Lz+1C* z0n^Yf3=c?}8q3VnYvey$&~v*nN))ZVA+*AWO6N-K=^a$`zF-o>vt<@OmAA_;P3u?R zCK+_&+?dF&!tpRr`;A!u{0L8XFLnPZCMG5h=UsER&lw#4v-L%YN1Bi8Qz4x7s|jr{ zJdh~#Sh&sV+?gF=ESeHmt{?au{+`<1*Is(ul>_?%>&=5b2N}L`QdUMQh%Y_V!hrq! zw#fSvr%bV5_}7_x?|R5P_)n2(wN@)emfL~XS}N@_NG~GI0UdmUD{<@ zO~OQ>R!kJVqTC&dO5M>g`K&bC&rJ@ds$1rp9GouawBD3S8q|W@`|fna!q%zWp;}ct zJ^&~Ef$musI#d9g$C4TC?9fE_K@FQYO}x%srX+;)cTu&zs_G{_zWN6ve;5Qnp(Q1x zqF&j~#NIcXS-9htBp~*pj}nb8NZ`4BM!p8vcD%a$aw02C_`6a(a2~*zhLcI4|5$s0 zDyIwyy7J13SmqL@aD@`${=o(2zo7Wt-S6b^ki*igm{%#}t^=~wI?0@Kha^c0AB;2|5 zC@$FKYgeO^XXr?-fG{ik2bz=O&^H@4%31VU96~d&Kx}~15PikqKd{jY@lZVFUeRhy z_B=)K+Rf4*#<+j@<9`mghqgI`3RBmvDt+-17WM7K@6yba+voKkz&B z^&3LT7c}1gfLtgB-9`&-Eo}5SQsVSzT!4|6{|7|?UtI*cjRV*|k5`m{qy*bV@?Vsc z3(G!30k2}-Lb)&Vg%&s$zD>Cb<6nu40+tj<>0Is3HJAayPMB-!CD<9D|G+I$VkI8~ zD!1M}hW!6{rsXxju@0kGl~DgKH>aOcQ3D6it$BPwlUzO zAc@TOEY+BW~MXULJdWJ)0C+JA5& za$Q=afZ<$v?)ZN_gAHspZE;KG@_+CN^28C*0A>AA@A3a%&s+sI`~QrMl5+XpeftlZ zef1XtE>P?yzLi2rU(tH|`V{+I_w$LtYsX!>f0r3|8uy8I79jK+Rr6J#x{opXj-N7O zg^A&>97sizLqD1E6Jr8kA3#UaZkA?WNhTF`?sAJSf&LARv}Pdh`kZww_H;lCNJ>MC zup;S0?)XLR7klmfjiZDvL;Sq6`ZP`1X4S?D%>}^Fu*8~$Yr|`^&Nj0x)wSIPxBa4g z81m2Wb{9F(BLE5sR69~N?{_F=nQP6Y!5u&t9qx<1%Z1P~dx&HgFaIE~L@TZa+2ve4 z;?FMOT^=z;gS$-C)BcT<)j zfyFgZ3KWk%${c!&vf@qyF6BhKlbDr{LJ7Qv(T42B@)12Z>H|IBJo=lM3hm*1$4^_& zyieAHjmpPQGwxLYC{Y99r0T>Tm5L62&dup-Ka(rFeAqj`HsbLV4=$s@8>m~H{|e({ zw4VX0rLB?&cW&?%Ogp;!ZhKn&wB1bBdeI>e*8%~w0RZNW1RK+;PJ`%s#hsyci++_& zb%UeR-c}e}vmq>sWWp6s^<&O&>;I!MF>iQ4`S8n}hZDU-(6Nl;qRt5iv;8G3A2ynYFI zHS%l;vob{ zT-T&u4)2=2@|nDK;H6tP;mqpt8`hacf1!6fr06=2+ypvTSy=#=hxIW+hLtp)_c9)w71mtIE6CFg2Z`yv&Z_F(_vQ5Fv;_M|D{uiHE?tdksGN#AI@R=xEG-Vi-P< zkxysTH?ohrX!5Z+ScYhYpq9#2iZp7DX$0P2R@kh>Ri0E85)u;h3^9BtF0emwm5tAD zG>@rDS})v^IYDH(bn1${IOG-@d&lWb?SI4;Fu9^YzV%5J9++}k=K)`T@uCKe2;F5J zbpwC3$+(d1?I0pVb*YC997vq0i(oLaBr*AZFW19mf#IEI4 z&rp*{lWZDU3IByKSE7Ujh?|PJbtFBXj^1i{nU%srEV0!^;AK8O^U!R7=0=4m$RVop zmP2wo!YQ?m+`g!efSF|U$dVnnP|cwS5$kMcNs}0-wZ{on>4dZ2|E^HM94-ZoIZ?KwZ$f02C53mdJG|J)E6ta-C>NyQq3KoT6o+VQdWt#=czJN0KUdZPw`U5M-)05 zvzYH_L!byVsp(@ONcN~xQ_H{As0#%Ij2O+W8uOP}-@i^5q)5KwTejYIz+BG%jhDCF zd$kl}WO?P}RsQ0w1?#oyx{RMlg_VbXpC{8PdwJ1hoGjKDPDCi*;6EN?PLK6vw&dr^ zeS%W*(Pk|w4k-g|yB?oWZHk4?D&5p~>>T6n0tFO)JE-#9*uoH&+48#Kf1A5>@tVM4 zhg7+8ujCTJh{&cR0Y=Gg>iN;8OR{|5c;k40kf~{_vh`rfPDVlcai-OVMi@1c1su>M zs$nbfHrxL3>c+dQ{*!=^bXIuvIQcL{1n|mkONuWrB@E_3&3!eZ|v7!WECrFk8<9ynmEX2DJy&ys2lG16?YM4Ir3}$cI-~*+!kb?F?#@Y54-Q z;^yl#nA!&_|cstuBpVq(r*sIoCky^E$S7?Pgthf{3e*c+b=LN zKN(G{fA@tHyvD_%h=vbd!#oZ+@`q~W7KeEM+nK+HgLc~vfr9?P z+}e0U`|^+?+gR@GcIL9ec5+v`9eP0P0TLKgW4jnjw*QS<-Ap8$or7KNBW|?|7k&dl z=NiEd-0s!`i=hfXuLrSOk2CGIHeA!Bu)4y_Ny+S$q*UqO3>a{o&ZEOwyH56|j z&WFIzEvfwgw$Mm^ayaR=YHJtgrWZSQ_&KU|N=gnH^^?N`IZ~|baoP-S_m3sE}LxkEDkR>$4qAI(nlaMj~C@mUQxNQ)WNxp z$a|z0u1s=Yzm~gMVRU{*^+QP(B2!`0BwF4N{s_DQH+?tsZ{|ntx_^3R)mIpvVZ(Jq z)52WxPFY0EvgQun#oSLSDl^*?5(>LzDhjaJG;)9hQBBf~u1j1)-uZx2{^5Qa8vO^9dIqtbS@EM z5hr4l!sC%hcuNbF5dXeqdc5O9-*(meXe5(3NH{IgzHfiO(oE1y-M~Rl(C|7~A=X&q zv*Gj`=^z%|#(ER)7Bsl`_pS>u=Rb}-axV%%K~IX;hRG9s9F6*DyF!-5=09LS@53v6 z_#;Yfd9&JfP@UoMK2q&LSt-H#uk{17q=Dx)nM=@&drUq(1(_PdZAsogJdDEjktBVxgw*kd+fU-u;qz9sJLm`;yox>A zU5PLHkm+{?s>ntCxL2gqi&utU1=Dxl(gyFd>^x5M2 zUoS-<4~=AT1;-z}&7ztnRs3r~Pr3aj*R!6Mit5^zvsklI^Ydm~2d8&abO}ZqPnFk~A0bFS+|qg6+xyWE3cG}kg#_)Ntn=&zT0JOC zDU1s76Tj}Bh`e}Ot0o%AL9@uFV8mhI#y#g32&l3*3Rvl(5L<)6NBwmDeEsqYtZ*p8 zSapdGVe;%J7P+x*R;ETD`;_Z{#jgkk{*E9uW@u>Y_7>6Rqqe?Ik08H zE9ENJY!1AS+bQXwe0+SJhL*cY5(gl)ha?3wcG@H=UnftGtRr=g(3qM-=0l0GHdlra zpGBeJP=^)@)Ncpm%lsE#2rBm&iTJn+=1JU zKrrGK68|ml-HoG+qY3Nd)9hDq20j?vd%e7|t-!(dGL%#C`~Gx(DH@!OyX9}B0>aSt zxzy{%K@G9c)z9s%6F5F`DwGzV^F=M{G)FaOrAv(+d^L|dg*EO+A#JRjJ}6Ho&mhJg z-XS$Q#AUV^*S>*$Wo*mS1+(ah6q<=ZsPRj)R-|#d{yXk|G2oO0aH4rQuO^^~tJfz` zV~U!Mx(gW?h0?I;l1e6J_+A<1GaL`;1itfDwKPmaDukp%^zS~+@0wGai)q5AEaIJ+3SFkhWV;$P1vhYt4OB{1?FoO+tbI4O>?0h{#qwf9|& zQn_#T#8>lxb-g1A#>IREkYq1+;~3-j#<9f~c~*H2!kBi-?S^;ibk~P^y9j4h+WsSM z%<2dB6xU-6Fs!`ak@+y;jTTt4MT@Z;V=nH+W~eV^95&n&i0=c;fO8{^DO@_-WYL^M zrl?~?(2n2ik^#n)QMp;07oPD8JE^((m^*$u`XU(r(h^7^p+jYX{j4wF@(jhJu=`|C zd@XXCV%|#m-R!6O4-Kt6OEcncY$Y8(Mg!RvAh)0QGS4K>;+qs-k%!vjSGTN;4dyU( zl&&$6rmOy!&`JOm0zXqHnxp#&o%j~K9<0uXkiq7?Z#&4r_MnfjDYZu~ zCS{Ujv_THb3+`a{x$1vR!jYB9EDnw$3m$peBG55Scr-KDJdeNP=o~|4^`oMos?1xb-Ntr= zSmEeCPMx6n62qnU>tnH4#fhYBKN6i*!dsW!nBztk`Fy3dd#(?;v}-l}Ty$QKjI}K6SF#<}EeR%5)XatFbEtR*c$t$)b_?z}Hhss@@TR*O=x!WuoM5bNuMzDa zG`EoVMi@_a-Ci@9WpK0v8~eXfZ*ugYH@+X3DZWwraZv1-X1+{hpsXzsNwv1I84lbi z%NXOQthw^~Z2pHxKKPXrcwRna(gT&D|gu zGdYrGX)`T!2;?!YeIIib{lxkCL$|bN&crvuGQ-;|XPy{((ST;VWXR`jw|# zJBIqMt7NfgS04V=Z2)G-8_0j7?!4?NM{eoB?~`Zg;A>ZQxaI92llldYE>VLu&pE*I znExxMT6r@^;#+i7oc(4e8ffQwpsAX^onY>$%X7zDQf7O&VeR3|;aEW?AJTUl3=8oG zLyXOc(kOr*)!IS@9DfH9E_WxlDGj>ng&UXlQ7iR}>k1vBf?}5WTKvyG zk!N`rWa}ZpzI)3Bg?2;yGT+Ar8@?ScUF}~r31B+j%-C}oM$Aoa747hf4~rRbI)!dD zX{)`&?o`p~v)D6R0P_+9rnu88FlR6Nj*?;vR@Y)|y=J;=maCPY$#xeP^w8*q zO;D=Li@Y6Uwzi_UVcmSff{|Nh+Q!$~KYS|sap$f;jch5QmCyEQdv>AN>*c~aiIHcP z`Rrx$iS`aD{QGc8r&rI@*-Lut2CYj34Tb__oZ2kfqJ9QtsI2go5eCbU_dLswv#V|t z_}TwuQ6_d!KfKA{=YXMM;jm}%y06E}R~h;IMIDVO^axNKgcqf!JxrVK=3mq*V4ct;KKpyGnWuF1lhIS%+54=i+jW>i ztiu{alkE(`$$9NVlRaa=z$-2C0#d&->iQ|(ZVMEy0#lc-SkuEMUwQb06>(`qAO3cH zYxgei+FQ;;QXFk3sqtaAII@C`Icw>g43jGJhi;6Uy1)-ib%$mn?)BRaQf|~dt5(o1 zbQ$Mwsmf`3uc}*Pq_Nd=7gJ`g)bdu8*GKt;MRyi zf#7m<;Ovm5L;d{nSY4QcVEMaXlCh0^m)%V^SAM}g_0FreNu*6B2ke)tVR;y48v2B! z{M=Zg9|I-tXIl$9i<=a-ozDU|?gmJ(dEL97pbP~t)B9a?0W=9rj=mPdZUSr?KvL#| z(7)qLfIdi}46|o>t|>zQf_~k42Q1t)nbUVRj@YwU5w8(C%~ro{sCgFVVxEi|r{Oe;gAGXWc#;~cde7NC`uBIZSD$jLfP zZ)xH|O>ignbhfj7TiCUX#6g<^7v18ZS!Wdmw+;T$OFk#u=5ZU89d0uoD`d;1vn%Zd z*Ui4h@%z3_f-e2uUh>X8NODRkFDpMZCuE-@)`wc_t zFA-b*P5S`VToo^-vRIyoKS34Il#(y)Y3R}%?io@X`*e*er`@NnoA3p*#_-D>!7-QD z*>2`v$hLk2?d0kP5#rR3&(uCYTn$72LL^Y<-BGe|Otsya7UiU)G;YVqbvm3Jba ze>OXRM~o#5I8vnWW#fzK-y>`~bWsmoO@KS1&dE{vPj++MJ5Zk#jW@3R#=27)Mq0M8 znbqz)@+grsF<=s#OH5gC_1)2qccef;b4cv<{7&ALjR~CuvqrI5Mc4jhT$8{rF;4l; z22n?dcMrE$45LOW9+DNsW2okhJBh{cRa4m$N;+D6t>~(2eacd5^G4HhQMWisW@U&e zdsi>6>4a$3|CpFiz_1Fp<;2;rGb;R*>zH0j%*OC?UOB-CgN)yJJ^$mEi*qD|Zk92} zNCn$k=)2F4#?tguo5F0>c|-)#DelejSJVoDa?L-|IrFc}w8e9fC$=bmTYMs7567pY z$|<}fAyk?lp?oycGm!sI(QC#}nbe7iVS7!}P&&BWi7DGU`N1}q>GN#8mcorXW(`S+ zV!n#r;X9}bIto=Ywcfqu>Qx^D4f%E2udtN(tWliwqfT|R(goZ(>eFtMsq>{h-n=8T z1aPmuf9c-aimuSZxxs?PD>Pmw6S8LZYpTIk1Vyp6S+pn4l<(7MFm;6&yZ1%PmaDz_ zXX~QFZY^&U5lO5H_ItCTw@t@na=`h>K+jB;X5q^4qI{x$+fF-llz(fBFSw_Wo(;?H_UzT- zd4l?EsoE5;O4{p%6(Nz70V{=~b}u4X#aK*w1BoIx88$O9W>R(Si9Q~>?pQWpn9?4K z^<$UVc-arLbeiP%9FH>jG;JL2mw9j3+>2pvSbnW|9EIzk$5tUY5LvwK!;C0;%ah&DOfaizQTLi7&HpBOwQ?b zzRW*F14j$`3T8I7q~Zh{Dxc=dy`QThhIBjPu1l4!)4DCC)Ec4BD!)RQB<6bv_jU|+ zsNC#?#Sk{UzFG=i|3oS_okrx?{5LiL0&bx~Aw+j_sS}A{>guW49ZmkGD=L-Kn2kg0 zVau{DTkD9B>|a<>o33JO0OI>7s$28%Eou;n`u{5N$ox*iVP!n$=!hv zcXFHQHI!e!?aU>+=fz%5CDMSo!n8#V+OgGQ+t+f*cd6-_dl*H*za?ozJJX){UNu^H zo6o!HC7fo=W*r^A4#9r8xw@~V_s-X%r72_qCOTThqXBnl$sL`Tik)kCPaKQ0ZlC$8 z6~D5sBxAdtz^*6MFd6e-em*h+$w~{>o#*o7TJxSNn(<*K+~C@M)cCO_eRMn;W>*$H zDU26YQ#oR%O_z;@@4)Vu3@<`>zdw?8EPcL&PAZ5=H0{*~d#hW<$vJ&8Hs8sIWA018 zHB(ykmA!!l7RNdYk+ZkTJ%8~tjr##%cgczJd#>Z)Bg zeXv!w>8gC730JQHg%f{?`U3fJ3z|eFW|r?i>Ud0GZ<9B=$gWZM*-Fn_J5}fNYP4jJ z2GVDjq~)M6>1++J$mX&!Yczh>+1ftN6d&BeX5LaEchLcUPgW@E(S2pwP%=)k=ZZHy_$`+m+MTzZ#fKH8Q`_S&3pOaR6X%w+yyIV5jeB)T=@i>w z6Kw{2i0H@`4J9=w71->R%ns%Eib->@*t<9Jz6XtQz=*OP zc9CVqR^*++z+HEwS~Pg?wA{s1n?^(FeUPALiZLn$jijtd+=+Zdt-~dA?WNVW4z9`3 zBYtfh;!uWxJigrQqXG5#b(#HM`-2*eJMywFHWIXgJAvVk*~TzZ+zy?-ykt&kPrL6# zZ9x>{nAU~Z$a=Efe$<5jzSdiHzCisXwsZyVxG+n-IguGY?cs`uq8?hQDl9ts>E~bc zHHYgmi^?~$Jcrz)2rlv^J+~tKP7hyux9@C!`p7QubA-DPV}E^5`k0eA&kYGcB|z%+ z1R_;J_zO?=HZ9eo(SB4ePy3uO7QVLaus1iW{=up~;w|Uk;!3^LNbDA4M)KISXp8#( zFre2DrU$6^qIhKMe(Fgl-mAyeNai|eel4`ZIDCS zL3E#?AhtwtsyR)Q#{B_|Ug?f|ZcaPyQ$7j<`G#61z(sr5gxAi^QwTP~XLw>$C2hqb z8CkqXu*g1Q(3G`UO}Cm6E50M0u&*||THmU{0&+2OSavx!*w7^@kyMX?eW~>Z6&J0d zZ(hLBg+C+S3pHL+RDMH*cg%?{T+urr#p8zNfWvJ05x4B%Z31viek^7||F8VO98T)9JOAXh-A;KtCcX!29Ro{Yid314MI;82uHNl%uIm9Lbj1*j z(0K74>Z5Htpj*D$I2?43IhJrKk+AXJ_pwe>k{FJyT%hXymM|OUpPJVsXEa9Dyn55B zy>}Ux+1c5L#0BzXl}3c<2Q;iQ3kwTV(qs~=(t=4iuC>2*rLn_duYOtsBr;c#BG`*IR;SI<#OR*(+HiV2KYcnr0-gaQB(pSoV=YvY0 zuk5Xw5kF(AV;1#N8LsSpVvBKk@szaz@j%{qo`E1i2gW+z*Rm&?o)XgCwwQ@E$R&&uV<_Jy3A5oFE*D);`?MWX?)Z2at!dVmJYy|Q&DX_lu2UV5=NMB*O;2V= z+cw7gjyoHOMTI6xiCGTPP4j*fP?YdQ{YfT?iau)$A~fFNPu(fmRW*!%dG(g{v(WA1 z`^NdpyvA$rhIu->QP)7}*v4@+I>@!l=zN=9b+!}2x18F2Bbn@yupMX2l`f*Nse!3h^0~23z`-c-P;uj|SqU z2hPSDO0ze}E4{J-{WKkSNh#yt@+*H5w1P#$xkqR&fT*a_en0Z=+N_JF5B!-KcVrz;-`Id#Dw%cibv3e)LWDFy~DeuN%4%i(ki!d zhHr7YFP_A8ia*xyf$_2?HlAfTIcy0qawNQEu;Z1Y1_Y`Sb+06!OtQ*mw=|XiaCTJ; zx&v;gf9v`c zOIp0?Y=V_76;o_sKdVQIRMc?c!0{cbq%Og$q&aS<;`S8VL&VcAnXFMOxQbErdueii zxn6iP5K8c_`ElJt3yt)|f32u9W_b#8hzR#xz!S~ zkwqAhurvKAHF{ifJ+3qOa&{NZwbvh_*CcoNa!2uQ`}PWg@@(=P@?4JH-+BiI@pxFKB}B5NV% zE+mZ;c7N8Jgz#=dr2Hh!oon3K7PD+sd&A4NM<3b!eWgX86`~z(%uj!TRyFgqZ~LC8 zHZ@te)f7rqz#Lx_@V=P+L7?k!vIV2su3a1=hj&)PUYRi?BraR{FO{3|b|YLYV=CeB zFxgmI?9C^sdy#l`MGWPT=rnQqoTIDQw~TT`-nHF5{W7T^&HfwjNh;O4zNdhlQx?5-fbP`7ptWUMFnRw= zDJA_1*^N$l)yx1Aa(RvGCO;vxS3J~jsm{RDS@J}8G-Xl$l^-pSVVea)PtEGlMOr3CEGp1exAepqVs8L}) zBw%={T%l3RUVUgRTJvpiBvX4hJZ9ax=RzAH&_PX;(@ae=vb#3b<6U*w!e9$?5R_fS z`{gW6KZd?D*7XoKAS0%r4NuP~%1nEzY&^>!5<9Q`=}Xkhua7;2zMyHC*NN~R?`$mX z4XABsi6l$A+O^(3Xda&-bSC}+_h1-piQHkzjWij6y(y=Y_b>Q={ z)B!S6-;NtNSO*)-Qx_;~qC}*QNwL=sHGpYvzwdvap&-4+pxis5z`(q~RRTBpJzV;LoB!iH;-+6>=I!R&+KBt6d z3R6mjTQ6jd**xtZ2VA(w3O&S8Db4E>*ni`)l;y0`v5gdBe&Jeu-nPOXS&DI>gsFNI2l`&yYRqNr@i%7mXVgoKK$Fzaeg{6 zlF2sv#j^ndEUUb0pD!{WW%_=cngY4onf%zHh!>_Z|bIQQfTna z!ErH~eNpjXBax+0-K=~p!C@wbT$DyOLEmYmGRoyp@9Icutm*JaK~wvswWc03tj{h} z!5n$>Jv%|Z8F?93Z`zHy$nuzm2Xhwj?~LBb+(}!l$CVu>vxCJX|tCPJalG znl&u^(mmR%FHUMyiH6F z-4<4G|Agr0-Vx^5qT#L3m_j?RnA1+|ryQthuboDew8xj~Qohd^JXmWRPj~#5Dx3Ev zE3Vf$+}Om7ZWGXzV*UbuF3!ld3%>fo!8;*bZCU#VeP6=pWrtSWPVjh74z(k!S#YYT z>a`~y%xK);t6C*7tI#PPwM-Y}7&X6iuw7g=-!NwXn5{)wV@Q2Wp+d@hltSR>xG?Y7o*eZ?M- z=6>R$Z&yfulE6Mn>#l}&3N*Q%97r)%rIlVX>`c%j)ZFBCTdF#^`u_;~&akGot=+An zh)5SfkS0w0M2&f2%2#7SLiUcBr-XhYwbTAM^lp?)_PLN&$NDZO4&^t*WK0F|+~rSTD|1=2=}j;V*v*iIHG zF;*QN#a&MM!}TWOZx->k#`zNW@&5j|HmSZ}$tu$K@Ima5-Sf^lEV8i0gcR3CKT0fr z(s71?m>i)-q;C7W&qhb)MzEq>GvC7`8I#>$av5**ktdy)x8A4;5}e|*6K;mwLz6s| z#N?)L(w*WIk<+J?Rvzzh?AaiXuUxZ*j=wLm;O_?E5Jkb%T!+iP_#s_woa^vo4hKm` zIL5Mq{>kHw{EaH)7jtPrgNdCv?OT_vx?D!a#uiK;j=txbP=2RdgQMDuIRmKX$elNt z0+2MFZNsYO?rCLyr7*`Zdn>RCvp&C;ukp}X`Y-tZw3_|Y59Z4!U9scYiU&_g&Eyj? zdxez+U2t~Vlm)Nawb5{`k^^8m}XNd2E zDZC96;>@OodBw;d><_x`sIt6?qmI-GdjK7IE>hRsEvi+6ATA<<#ll%cklH>+Wmzw{ z9RK(S_kyrP9B@n!`hqbDb}($Pf$-YuX6$u2%?RdrhdLb=+3@E&ek7-=e^}0iaB!RQ zFwlpe4wS7G){b3=LpD{W?!B(+H}%}%uf>GUFs`UDj*9pk3c1eHjAFKDn^mBi3m@}B zu{{EL@sI8;w18f3{1QrPXQ>@CMrrRJ=!d@*>&2fdUDs&kxbJ6Ifl6o zU`X01EW6u^W~X9iz`(f|yJPsL%Z1wGLxtCNiwj=RdAyH?{$GGRzh6AtXqMA;|C; z?x3R;PrWj7a}Mczx0{FdJolFe@P~acG_BnBU+}pW&%lJ3Vsd{o9ad&7Kh9-xP)oKx zn6;2~Ih(xwKm>0?=rtiEVz#foWDXUB0to#P28%o>O=!Q=W-fq+>ozF#?U%Vd0A z8oDlIcKGH^(l>Ip;weu-u(H2b?kk61{0`M#*|dJoxVgmyuGh>XXYUTIhAn8HG3^Vre;DX9Ns+x2BN_^0*n>rcgnw z2y6%S?)}$kAHt*|k42Vd+G>zj}oSlM35@1gw4KUi)F^X3ZXm9Q{cd zM_X<}t|BIQRlmO%#PU_cPA56#VZB>++Pc@YY?ij27Z!^wE%S8_;_z)r`g5nnZY1Bp zzAN5k5X5ZVmzQ++ zbK`ZpqK}~bUN$!P$@KD(wQ(9OBa1o>IO`W|=D(iK)b0OQVPv3_8k;uqE}SiNdTMFu z#d6{ZROau(d-RR%a_W))R&CYnq~lL!YSQ=HLv4=;?kiRp9tFMzg5FiS(fCRt89^w! zw=>#4+kl%A{Q(#OEosaYX)5jLL3UGi-SKYs%4;#XtvV>_fLlqdxpLaK)|r;Muwm(I ze$8Er_Q>83Uh|PsrK^E=8AGmp&AQ(DQOwUMWBTei4`9mph8{mvj%0CGE^K(*@sz~q zsD2R9ZrNt{5)ns(rtN~ioQvrqK~O`Bn9&en^)vF6M;L}Ly7_`Ez|RNlE{l;`JQ5TnFO8}NBgYLC}_JJOqT_& z$rHwSA;(*KnpN0B%&b{q!_hcrHn>{V?YX_nl>59UzVQNiRV*q9eEwtik`m4N1ZD1y zVbh6DL+AH<9()0IujxIUeJe!~RPgVRza(plP1Yg`$}UuzrAi3toq17<8jnC4NDWXA zw)BDVGquY}z0`Q^+HJfTV;i7i-xu1eJ&UV#l6XSeAKd<11IR0Wzdo*AY2C}wU-swP znY3l3Uy;(LJ=ZoyMn)15mAxRNGZ*vg2+8On(Sp({&1tW<(z103y?XPl)e*vLzq{5* zgfDWiK^TAZ=%s_)J`Ukk*goYt;i%3o>-t>A$IGkMXQ?bW*>pLD-9nb*@$Z>7k#iJX z>5u3wo1Q_}GE6w5c>;@0gG;)6q!~Wdv2J$lUNs>8Rqrl5&tK@|zfotKS8vn&^PSAU zYWP+FF76pH%sgzAG>=@ajq+pZLmAIUtXMVsdt=X0ogIm7a9Ugd$UKDd|A<=jG# zQhfs2h*XfqRmHuC!3_BvaQZ8ew8WcK5(f?QD~Td z39tPzVBKTqXcK!DoW*nbMGEBaBY&0TVmyMS-soDismOU>5V&44oK*wP09&ojZj8qt zkNr?o&|VzMI*Li*x;)2lHSBNMuVIauGoOgVsl&$PczgOMTyEHdyW8I*QgY-8_FCRY zy_Jel(>}IRErx(Kmk~oO0_LkGvz1p=um4KPyXlSHPiWCEQ7?Szs~jo|Gxyon7seaL zd+ndA1SSSOiqoCvs9cw#(c<#-A#tWMzvc~4N0H>a8?~wGhYcj3p=*^sLpeG-{a=Ne z3zi(D*$WxZGdjn=ED_M{{Xp&GxT)3QuJY`rlL#jM$R#5p2=`mi_Gu=jYXHAQxoVhkuCPK?mJ=^-LwR%xY8ht4rbL#gCO} z8H~(gsn6z%yYVFSf;uY`*nT40>240r_5Xm=KdN9LBE$JPy-d1w4J_Ffw5 zeLXo^&*zD|1;OP<`Mwg+OpTY6A+Q;yUC3GHy5^$^T|%#{^`DFMS}UmBMGyi-Zkmr8 z`~2**Xm}BeBi0ipZGiZ&1lcS*ZQt&@GvY8oU0wT1ego;-YhAl8I|IM={wKk9OOf!M=H;e?KJprlh#MS)i4MfujD}A1e$r zf;Gh_GM_rJO5A&FJ6|Z`Mp>56E>n8P2cxtuHFo>g+s>`#sJXE2y2|4O15+!hDd#vK zQJ_4vBV-w)v&E!`^Qb>tpxcl( z?kUTIr$onKZD9jr6A`E^bG0Z%V<7n!l>+ea6f{OYr zIyDKFIl;34YL4-}!}>nR_9WBHtY6`Qk9O^B8~oVxAb592F!epT z3jaZb^MO>+8+rrxxQF!$vRDhb%{4m@SM<%bCF9JZy=xW|<92TCgc0v6?{)z%yVfY; zPMfN}SbG~gWT7Z`4V@<2w^>W}t=&V{u1Cpk76($ZSf!nOr54!>RH1VtY;T=~roA62mKB{)Sn&FOdfh)Yr2jr>IMmD@A80(Wv3_4pg#)6>mo0o>C+q*KT4D|LiF zD%6?NNuo~s?q>D=)YI+B>pu@%Hq{Lb;_Pc&^EevzylaUKj>tM@9l75cKw0~$_&JXt z*t_gQw1Bi&T?vMRv8i@Gs2c$^IefYUenwwwwdW0AqeE)jck(v%2-gjCf7qd8g;wV5 zB@_o#Tju(vltufZ@7~beccl4LeC29%%2HYYm?a z7ntr~OY@4%M>866FwAAZ&tF3#w~=%_~8SB_p~ z^o->#x4E{NV{+0dy_%=lsudz;Lu4*k#LBRrF$T{iLZ%xQWZ6*~WG=ZSR}5W;(?=7~bNZZ=6gKfirH$;c2A)T;DNnW|;ZZA^KavTrpm+ak7Zor!{{ zB6qzkf__1Tn$P|ybyVoIu-oNo?AplLCOd zjro@}uF$R5MLt{CD>nJP)QJqF^v}3I*6@~c@L~%{f}y*%;Jr*&AIpc!bAA+m_pUS< zh&|bgR#=Bx%^I7)i_)h7aT8oCd9*1&ZBIA5FbN?QvPYeBa056eD<<3yYWjdGp@Y-WXDz(j0 z`Nxi<2oLGBz3V^=YBJiQuG(;Ft{3DRDI@s&ez6lw> z67Dac6#MP?6-BxGOnIW1lM@1Ykkfnnw_a&K*CbHwdofbQh49VlO_7kwD-cPb7A6+7 z-YPs*`Z#lra({6sHcBUiv4H;vaMbI_sZ*<&N=4t{hVT-B)62JmR)NUm3IusLdF=^0 z+4akcn+scH?yY3+$Qn8$`)VtFgH8F@uoJM7cdpmDU-&;sKZ2RF5%^}kpm!_X#({0i zsxKX1x_<>$VyouG?w&uyc=ISNj>oab`NPnc+TbhH})y~$AGpSwk`veXLM}Ref3`=Z@e9HFi-vXU# z7rlOJbRj&9665QA;!HHwQ&%%mg-fERW><(mK5-*70?vAS{u^}jsF!}sJiHgse>#qS zU&YfMfBRm^(dT_8#c%yMT=qvbKiioNo^7{^3M4_pX2qj{=w#)Zt1fJczI7XWv-M?( zj&ndf3*@HX>l;B5QY36JZYYwx;=*t8aXandaRzWS;|XNsj@z_Pw9o2bdIi=2)x4r; z;tDvzV+W(tUnH|CpE*2?vz0zi%+bkwE;cal+?Ha~I{bMNNGw~_0=Xq>JWHm)w``v|h?s&VZiXulcG^&crp ziq`u2K&&2N`s6TI8`dUF?q;?%%20m0)5bn2LY+V)0hu4+wRph8#!MZeIZDT)WRBQf z7ZVJuDi-sOm!w$6yNl{#T{|;<)+%k<-GDlYm!@`m&PO11GY+I`pXwVqENa7QhI~)f zsGZ>9rb&WBfK!nyxh0J|Ee}qrl4}Q;1e$ZNUaHJj)d9#S!j!o~WUAvXDsJ=_$!QP= zs6xj!>f8Od3#>z*2@|GQp9b)6S*?uM-`=c~;8&A8Vgax6!-c({LCYko`!DLYjba&U z@0DMughMioYNo9+x?|4tZ9n)EI0PID4*QqNMpjCDdRXtC?^Uz$|I8|E^pnz~6jJ(b zYLg$-i&Z(e=x1b=ROjPtr3m_X8?@ ze_wthF8%oNNOc&lZgh$?W`OeiLB}8tnUdQ&oERCg7OCHlWifY~wx~&S9bYjN`2&*XI+bqAUr z{z*c8ut`14>|fvWr#yB2kA8&Mi#;4TIcsqbhRq_yz%sd-O4z08m{*G{Wq2h zS376ToOc$qp9e!wC$6^D*DkjHh>kN)TyuMZ;$=C--;!PVv4sWvoWxe8d5zxtrc40k z-8W~7x))3oTy80^tElFp#_O*AkgHr@EgT?d7{4?;AII`_0%pW!T>ZP1u`gs!bJGgW zlU3Dn7gxVRkwo}!zl8(8%Yd?+<@~k z7=xYwraE^DllA(lfpm9Uwb<`M5BT!xDji-7`7)yy7ju6j@?#pQSrU<1S+bwNiUzz?Ko7P0wbE#;(el`=GBuF1n`0f9B^TRp~}TA7R+}SJ2D#_JgaRT{!Hu& z8%)C?4J%xt3sIQ2{xs{m-KUmz1r_=ZNk!@8JToi+97(Ixj;v8H+2*{oxsM=>4XAUi zTs-Z^$3(AN;7-;jUTE$Gb9#=^$}L;i`kWk$R$?Kw(giGc&+t9?)P~AlgnVs3{q*Sq zQ}kEPnU>t4i8(tRfFB`Do!cO6$A#)q=wqg%1g`-#4@9Q!{A9*NdR+Vo4DubXMfj#; zvENuS$5x=kg46nFu0PbGYc|x8L#~-jjDY^KOW8+l{Bxhi;MJJ6*)SfTbr1UWGwQxalaQ~Q=vi82eqVHbTBl% zJi5!s{&ggdA2%`_5$t|G`0r>XBvtA{UHs^4i%4IUey-DOglE{vvbv3Xbh07r5fb1Jk~;K!kC3yEpd+8 zexV~qUYN&q_pt#nft#__A2jU^t=;c~-MbxRw>}%p@!_m?SVJDTrajYj*s=|j<(koo zWZcM?y}9mGU4vQ~&;9r0M()w@dJ(3iuSRAgjjRA+%mJ1A?>4Ftpz*CbUE0hdBd=wp0fdRB_b@Vs>&G8Np$b@~83rD%FyHVER zqB*?3OuDXV;(v;8yt8O?MuE%v10XOGw*Inb1yggjX4;$guQBCkRbrsdK`x$eaEs7% zEI}J2JXorlkE$?oXc%yIFpI4#*=ksGm0is#Ita~Z!E+tYkX$z;4N|)5`91EWIdyg7 zgB6d_Bc@&(Q$gcHxoemk+3D72B^S#5FF!^*sht}L^|F|P%87+~;z4xV#1DwlGFRl` z%RAMJwVd{VSHH^CAvm6+DXzV&%Na#{_lQ7*gVe1J8A?cS&V9+ z*miZ^8eIHJMrS_!NjpS5I-5Exadj9h3;{Ddw0R9B_ z1Ahklg9Dl}Tadiz_EhHX3h-;3Gaj-_#qK0Qc%m+CizT(c$-YILW68!xcd z$)$U>x_+n|@fVM7*Xi|=NB_H4`r%6>5FxC)vS^T0StPuddJOTac}3$P47}j_JGynr zbsI?RI0(D1$tSGt4L~CwCT6GmwpsUnwJMu9-H%SY;{XF{PEq!yJ8fA>K&{`ERKwMJ z7j=TiZUF9&yo!ms8Op@2U}uv*XAJ{ntL6gml`O}>T9DC!381J`1v^|R>yx(;X&`=& zwl5@Qx=($r?N|Kf39o$Zvx|hy2C}Rl;%pvn?W@6;O=o^hCpB!}dJBBGRE+>Jk4Ob+&_prHsj(v zuO1XOSFGI(H1KdV4VTA7u}tiAeZJoGYgyq7_X{hEYqVCYV+qLFfCOZyEa+qKDed62 z`q7fHd)1P~=Wdcwuw7DcrATcJXNPSnI>zK>ElW)tDB+~pcXZmw5Jy6F$2vBwqiL#z z+~FxBab7V-+FyOtuI?nOT})(X5!%iwvHah{|F_?%{74y^`YP!Q)A+nx$mEB;U@hlG zZ)Nw1&31wBRb6abBoo8AN?;(*cM7!tew%fQZLI|U#M+WDDPTzE(WIS1R9;!PsY$aAjyF)_y~B96VWKuWwKUN#Ntrx<);b!2f|%HN#k2znsR%@%?l z2vcb?B4SHh1Vz3GD#x=lx_l0}Ev0tk%*r%(@WI<84Go1##~97&t0ytlEJ$x2@g77=6B@pAHr}@$#CerP<`>H52hj!oHkt~Vp2Jx0Sxj|@T22*J%{Uuzeuy> zY~Zp3^!1_9%BqS^tkL;ObC?ZGSaOwMYju~`6uzOxzrO22LqpcJgQ9pmDe3= z;s8!!pI6Cse`kzXWbEK~)!>d^1*p^hxL025%_SdR6L(qo@o^*7`WFyiGEf2Q|2Z7V z-}jSGBTv(_j4V zZl`Nv1=A82kT=_tCNYdk=sKIJA3U^O|Hb&3`0Mh(|6~CJhIa}6DPZyDJHgBHO3!Is ziXLmc?qX<_)Z&~q{pPgD{n^X!nNN+HQ-@bwXMN=(``v4!uSLGq*2t;xe|9s>q|3Oq zBYSzi5StbkvU691m0&Ow=(70yiXE*Bkc)r2P4xq$lBBgBzOWoooMtoRdeb{}rcnD?W^7$CgMkHcHHk-|}oz=*$YJ zQ6Tx|gTK(iXhyRRl_wWv)O}<`;(bs@@pB~&IiN=b|Z7!y_UfHIm z_bq-<{D@aYle! zgdk{f;=z`w(z$pgg*)c%{-K<-!D7Tv0z;3)AH8!r6TN2~?3Yp=5$~xd(VQeF!HHZFQz=LoA7nBo+vE&TJXidJ=qA<8m+Ok*Bw6oim)e84c5#dm2^gX+dIM> zZYaqmUH*@DOY|`X-?}Bm(&ohgq<3{dwu6$8w7Pw0&VtcgjSz{?&uH<-X8YRBNS6x$ z`w{0fTi(LaG25$GDB4KvrH-qeg?XBHIOA+*ft<1E7{&f!ujYqvtdH~|*v@%8Y3$r^ zy-nqjGEBUvXzjd1ep{etvP49mfdQPQt~ph@dP}1)QzKvjcO^k#3E+jLXchfWmQ|FM z;vXI`pr_zPJ}@x=BwKFIjtpd&S&gsL-Qrs%l&LV&i@*Bm13h`6VhN z-w2AkZbYa_+|i%-@@$tYfK4%^-%i){Y0JFUvRZzJp;2#?_?m)XVQfUK3x@j0+tS$s ze59UTgJPX^8JqSx%i2fI90$P)!}AM$k?cpW)#$f)ZwLJ+x@^A;zL`Lt%1^JkyO_hw z8H_*2C)M$ZKV8?N5Z#(A@c7J~C=_3dr+=o3>rgcIxEGa&KxgmN1hM1d^0GTCSe^~! zD66~&Scxt@`L-=6k|OF2QbB-h(EI5tKSX+%vD^u13?1HhJy-SdtZHR=n2e>(gEqI7 z>|dQ8DbKPv$K#A$o1zDkZvo7hxBM*G{*we>+&jGMpgWOl&&&}UC!(GxULs(@BJ zY}adY4}I>NdNeVsdn-a?;fiw7R?Pc^h&}N{Av;b2?*ZrN;fh=e=D5$>J_Fmwd>5#X z0~BZ5>C>rst@eiLnm!{YFHwq3II~E!b$}~G;(@R_Q42SGI3Oou0^&0kiU@~7V3yIb zl0@h!s$OECY$FFvs`eLHdMfVEz{>ZCUVAHG$re=B@8Nf&L_njm*$~UIy74N^i zKYIDW`N&7S{r~f&k>>Fyn)HnzCy?K_V6Jh-ukK(zpuaLJc7-7T1p2*4QEji~OITjk zlxzR%X;F*+lQ7${tv|qhDzBfPCzjB3t-k znMHARTs3ltz&ky^alD;l?aUXoq9O}y2fIAyRMF;jn*8ES zxo}{tA0ru(N4c}so@BI@n^ub3w2N6~L8N|5M>XOCH7gyzHR16Hxf330v$VyB=j)&7 zMWdVCV0+ioXb!__>Un%sKURGFPxAUNAxd5M1OH_&6_WvPvyM~#&hf@M#F@l=H%7ix zjMHc3TRP3&SkK@B@{S=S^&MB!tHjf>^{=m)i!MXGB~aM2hudK2@Ps4Nq~DI|xbLhg zv|ndvg33qHb@Z}N9kSC~ez!}BRFK0yfOa@o-W*t<9Jq$n!rfh)qDMXZ%c%Z8N$tNx z$?o?_D!xrX|2QzQ7a-aU-jb04zt)VH2eqlBOEqF{W)G#tp@{#R3xJe^nHdM0_MTu^ zoVzL}hDv|?+5z*S%PU%>701P7bXi1%_~442F%*IcITzD2O-0JQA5&9%g?ELHO; zg*MtLL_gJrFvULCM_W1a;eXEMe^2mC5N~7K3sBO$99$I>L919gTZUP%w*}RH&;JUN z!My6r8bZh)-;zD%@|2O=1>LWXm-h@YkvbpQsHw!=exc|^0V%$JrB=ScV=(CL!g0Ji z72Ll*FzG^G_-dh<~2`t$zs34|~Jq zxw6S}u()c;^ zU0&T=lXbI_Dk?u(kP_5XAhkbeYAGmF7cW1}W13k5tS^Qy_F4ZAB?O)v`l zzRYitX1!$RK_y|123y-)*K2*z9#iISc-_PPzy zdz=OZT%st8EhH-Rkfp1A$M$eN)JQp9nCreS`( z1b3?qWo;CJ4}^DL z9oQKn)y9x6)g^dvbS0p~BcVvoZ;PhTHq&eBi7arw4&1D)$l**GBh|UvLke&yn+KeJ zwoIv!I|arqIhjcoP4{HGRb4e|O;3PD}@w$+srH#$+-d5l~GF0U%N3?9WPZS4gE=_L^^PkYesf$8xdFd=z{hTamXmdX%k z)IZNKPW1d#giNuH<}*x{dEC*D$Q|A6zBU8zUikaCbBKG>iK;f;%f4r`DnU^?W#ey3 zkl@(>dqYO^j*MinzRw>iZm2z!X~%@tujvtjhzH8Z4bVUAAHZUYqwi1~bY$<7P-LGE z_*$g~m5~C-^fv@lV^V z^4nS-mp@DUJQy(02i1Yw)-Da57}?CnZk$cG^yQmxk_@-@z9J`}A1`=^e}IHQ7*@`v z=pXJVa>j5Bg1B=exmwzsB1}P@FZ(|0lE$_~5SBF<;Hptzi*n$yahZ*V<%dp`E{T+7 zRf1UR@6TUf1*Y`=16Gb_|9p2THb3y&4f~Jjw?dXV80FC;r8}-qa&6CcE)|A{r9nj> z_q=HFAq6QO;T6DIyUzZFHv6B|5$@Mmm*FxIgtwjlYM-W`y$Gz!nd-nss7o5~C{R0u zOZk76+Sz7n>_)K^S(rC@6Sesp>3=4xcb9wGgV>k$*<@E~cI>Xcho8;Ne_nDkhXIX_ z>~HIJPQBR{(LWi+)Mu((P$CBt>j%IOLnmZb|MPYKGShd@Ct*d`X!hVTavOCF4;lQr z3#OS8(&u}o=wVTGZ-b}*X>KAL3ql&HJ(@T4Z$?Mu0&=$y?NZbTR^l3-+ZLqMKraAn7A1SgCN^uTfiW|kqZhEdnjpDex-3gn7IyVA>&;TQt zovy*K^7t`}ZUJ{tTim=OnV;CNcKCc=$Z$z~k9NT3bOK?8!}Fx1;Jx=@IF8CK08~rc zEQ(_@wjSRTBQHFa$FUtfUpw|Xu`<0WWoCUO=eC3gTR3pVrr64pJx@&>8upKkqUZO< zQ?L?2P|}y4=W7R}YgG!5`B&PPSfUh1O;llC$1Jqw!RFYuC3jwwjm%Z>wSR2F<}FM^E6D>L%ioV zU5dOWfj>SQn?NTKw*K^>XnHb(#!!GmJ6_j9&Ly=kj&a;oMSgea`8c?7PysDmS~lhA zL{xDQ?h_=Fw@8ZmzASE#8Ul@%dylk2`d**6S4I>JXVwnqBrBYvasCRYX@*)JKF6?A z1ervfZikJyrIU}2M{%eIa?jznBG}Q9Aj>D8lhILF3iZ%liQlRB)bdH?6wI4v1Ep}X zKUfPp8HEia2!pj;r`y4`5=C{mDGi%3@i#Qx*iq_8Eb?hiHY;tfpwF?zc-Um}%3_Ip3R$MDfk0$rO z6#Q15j{nZv?3aop6==M8GC4)(Rb@CuhR?w~Aq9+uFXPBjiOK*XvK+i^sg`VtC#84{eIb zB}Zvtm@F4$guTmP4Tj$+w

      pBKJ?1{X~yMA5t!l@{)<)5%YgF?E~V55yS6azAHG7 zLZgUx3OuLBA1{p`6%pqIUChVu8D=8nu_^OUu&_O?`*RtGQtcn=Gj1L?Ye!DDKPx)To8bSp^JjK%`=ff&C%nKl0sZySVafy{}Pc7)%y*)fp5M&mdr z_Q*)-A$~w=C%JO4izCx_cmbD5j+l3xSup)P5iL~xPB97=!kK0?i6Yy_Wvyb$Y+P~s zBB{d5*Qsv{n=Yu(Dy*lBe_c-5`#PM+>t^{bHNkwhfqPtfMe*Q)-5R~JYVFJ88-fbn z8J0a`k28Ahb`%?|_xONzGmh~(b30$wFxR>KoKZK2sd*-HpWI$VN{0OjFB58PQS~>i z$Wg}&-r%(I`w#1R)I+t$$C3{++1bSJ>>0$gU3Zy#M0>JuUZkWsoL0QtLluOqJj~>( z@906k@8d6B=D$wtjKlMg`@b`#4`gfkB_-R)`0g+q=ZYAh(-k2e3#@TXnIpQ+8MASW z@S%Qph700Dp_B^cLU#r*bEt|KR;^MlBcsW>8{k4bgRLr>7fkB+S(#)4fn&> zDN{lFk;0u7ijSQJ7Lw=C2-za)dnSAnSxhZaOiyS`8Rfi|^0j2NN$<om2~*^~5Zl^G(b`xq=NbNHY9RU3X({1?);*>nya>e?55 z4;vldMcw7%2Txw^6I|Uj^CTXOJ#E`vHDhIAZ+Y~-HKxvo&r?}|#Zi(oM4EQd;MKs- ztG#$VCPfQQxW-KtUTLf~)w|(jY1#JkmBJH_&o1Nhf)03I{NVBm9ds@`KyKg2EcNrQ z=1*q}U!FUPSfcZRs=ig|AIVks~sj zA+B;>M`7E2_|Zd4DJnKYr*l-!9^J;T!C^}lxDaMBF1LF|RW0hXS&ps~rFYhy?(w^Y zS#5-vMv6Rq<+U$;i4WG&qi*n$^ZPjkvCc~#e3vMQhJhN1brFI{(a+tUx*T2uDn5?- zcs_XY_J@YYsVpDR6%N*nOGI%!g(lOrK`@4FIg?P}_8<%p{ojV>axb=7Bj*NXx$1%6FuIXO| zwZKF5Bn-Z|Agu4bj1m-M3~KLRm!xaYfBSu_iZXG#G}Ql1s~w*`KO~^6<*}}3pxa^` zG|S?SXhB$n7{}@oT*CY5bu6?0I1@spM{m8KDyy7>lC?Xk-DR8Q=!;U~+LdJmx+m(D zgHe$cZ*;izT3^%1K=n*D^pCb1zgEo$drAk*S$GB;Eu_3RycLbq!s z%utD{r_>g*R*;sB_#^+B8v40Z(OR|J%hFo<{m*&nwian~-tq$9# z`l>LvVYgs<(|0#~e2m}eO0{lk!)lXxff?y5)|I?;-%Up2v4k-BBrb(ukWMz5+VwgL zpRL4z@Y2(#N24hGs9nPXzX+y&Syg1$jFw68*z9E0pq7%$JEX8{HGS+1XtoJ}zl6Ce zi<>2R?Di{BCmWk+*{zBCIp(6``y=8=gy(ARWVYgoEh+v$JeNQRBSyQ4cwxG)%PJCo z)47@*b{VuNEiDsK`mo7kpn~0ZG<}G6+lQ5%Vm3$zEd7unvq#x8aZLhtXmxO@btbby z34^TT?3R{~%VPQoCOu9$@&u&=LY;f0Dzm|W`-?V@mbN(B;}!w zEL#YczjPJ0Y9W!h^wX8}M0bV#48`I!B4uXSylbAy^b*~Cj5;R<_&ymcK69`W4V&;( zBp>#d^b&s{5w885Pn zz%S~vUs-86#*(k2m}{BgZ7>+RxBkBGw*J-h$>V0V5#{lrJ9#HA5lz^Uvb6g}N2y$) z5?&F(Kcljp>N1K?q3anadlhWrGI&MmI~nYwF5+VTQ#)mkcI(aXj^i6IXhhOr7 zkaM`iuJCoNkeU|spexGap(sz;yVk7hf@W8wo<=cpHLUPa-lot?-<9#bm=fo@!=P;Y zSWI-A24k-7eZ{HmQK>`O>s0|Q%faM_;M378^U3^K7Eb|YkAbXs)%6|O||Bj4;OqDc8Q$z$Vm#0~% zF7I$@VmsYH`_dEGQDuZr{O3x##P4{a!~()fJXL zN1bF!OIh3%j4NMy^(T8|Ne67;X93qz@(Hz97_O4?m!)0vFXw^nQ{uJEcJ193(V^8` z>LXB&)chMqy{o(YsO$ai6n5d^n}?veo%i3hH;xZRUI*?Ot2P%UR!wW4+ zpF9}^e4<-JD%;p@xLZJbI1Ub&6zsP@Mls3-i+LLrflBNBHlzb&on{{D?OnS0jHP~V zzPM*7*bIlhWAjeW;%auRBkigmW&7^e<_bLVWA-i8O7ne68Y|49K4;H`iko!v0zU0e zHk*^ynPNtxp_EMKIdZv!biLrGFP=G-C&-3)33oKuS+YWWlUZI`BP2d?+DX=DsZs_n zM5^w08a=K!Q2J$;neA%NEne8;SC;fa4jq-&j)(yg(ePkF-;%7KSZn3Pvk?(g~Wqb zthkM^3MMiO^YT*3(roq%&L! z%T;wlWJS1JE`9gbVGN#cDGDW8q$SvMc|Y-tkIk*P!b;Q>Ex%c7)y<`Uf8N_7;P`=o zo_+*a+IIMebs2xiv=)hMpy&XO*H z(C5%j;@wx)H?2D|M_BAtZ?Bi1mlwRL@Su}L>w>OCv5w5Fk`}uW*7Znb@-!+lPytI7 z>6tZ%@EM%i9SCg*loB_3V`(Fsq0_f-)CyaCu~)1{dF7-jo0xGi^MwZO?M`jf-2u3L zP@>GyN?+-Am&1==!YNInsj;<)(@v`NYHR5tXrngluxGPLTX4SQXDXC4s@^8_&w(gqf*B|BLtSHEJGV~m^mdTc z`q(uxrq5TnYxX!r!-eL-^V}xIB8=k0lL4-ioz3AQ-vp`G3J1B`num$xT?R!NVJdf1 z@V3J7N07ULA?QdEXqELEBqOot^{InGwkh3sa{I<5~u;ddm^n=Sd1#7qL$2{%8aFEYghAHUY(A;{gr%o)MZbmniqvVX$43a zAV<99Ty3A45TuGksg=}Dd|#L1sY<56wCrY;1)=c*-FgGiX3kY?=<3fdqxaJ6kFob~ z=?yJTz%wXvH9MYT@j=|d?2>nrP~L=K7%>t}vtEtf ziuKs=_KTmdNRejD!9#@Jdw60(kH<;Hxe7<6U}U!ci*I>yb)6R>*UX>gx6DQA@61iV ze%8h|!I9S^mhw&NWsYWo@r&zf%+%)t9?5m3MACo~UpbTRw9}F%e;Zbd6Xxlp$W~iBTN8$8aUZ=z9j<;Im zklWjuoBJHM9{7D~VXQs$7rtfp!}*6~{4>+73+dpft_Z7pblAfexX-9IKK8V2>UP`w z%XBEu?-P6Br?(aG#g~Q%vPbV;M!QEamv}~Wp%T93Qf#%T$|3gVio^;wB)4RIzd-C~ zxc#v^nbM2dNx^2aOwn?zW_1?f(n{%UvMm-zjkycYuKyI1{J$wc46z?eV5%46@59~b+XL^2*H$5JDd~tx-7(vr<&3mkDlf<)?DD4F zOb;0yzw}zQ zZ>;ywgX1>nip({OIJu3=-Sm}m{}`yAqJ@9OyV5ys2Xjv76>_{JC)B?0wkk&1GjID6 zYQHXvpQWeq!J+y&Qq&Ezu`r&B)n;ZUA^pSKQrw2^R&R71pWxeT1l=OnLc%N7=8Gshg^l=r3F{Sz)h%s~lzwYW z%Ju4QjM}D?c!>r_ZN{WKnc07extp=|eFVnbGcpqwG9QJ=3TgcSW}yawu*NoOmN^W0 zsWuo2r@fOn_Uu=j+%hmzI&j2;kt*#ZMb~FGy$UCGF=Vf4l4%j|2&48>MSy#6>SmjI z!j)sA=_6Dvj7W*-7oIpI>z2Vlpsjj>>7Mk+PJJ3UL}T1(j|kiHnm!B{@XJ&0 zv;Wy{4!-;Tt?HQ2<8|8n9c39SBYLMh`ybW^zmDzjiK~1K3DNR&e*C}r&2QFU4!qm~ zM{Q;-599y-_rK3R@WYeqU--hqnlp8;M~sE#8U4k>BYr9z`}pTC3ebUHFJuqpRQ`** zzGM4ntcfu(+u|nw=$&r;XDnCG)oTC2k+~dn(rElW^9)DU`gY!2tNF(`U>nSXe|)9S zv8H6QW{_w7Z*}OGz37&$>-kWk-=_khZkLHXxE~|PJE;v-^clgT=?65=-0A7@07=dfemZ!;kZr$Txf98$VIqL z43gDUa9tIXRWvS4#-<5&ax;!Rn+Dk9#+FZxX>;@C8(r+lp9e>Jbs00vGaw^2?wu~` ziQHv9VG|o{2;org*dsQv#s!keMX{-pL>eV}JoUF0bg{G2h>Q3VBeK5PA|QLhPRSQ; zdiqklOOCzb@J2gQ!pArfph|6kRy&i!`J+ow9bAgQd&QG}T?i&7sL`b*eKr_Gg6g~o zb=dcfu=0;@`x3t{GAk!6dh9&5g)MoSK5kfPg8^e6Eo?>3!eTH!-T?9ihIAxDOjxt5 z>|)w+iyj;1#jyR9Ehd&j5id8?QWCj@(I+5pSjeuiA{gIT!_!L!h~0A9bgie^rQ_Tx zF8C!{<6#p-si%4DLj*q=Cn00Z)X+eJn=u)2$YkXyHYA(|ql(qUp(mflJT#u_RSw<+ z)W)_xv?4EKHO4r3K%-P_mT*6GW3IftS?k;r2l)^@MY*VHeBCdbVCcN$6P|5SuYzvl zn^(=Tilwj}c%!LfhUFM9ek)a)rqjUgl9%N3RCr-q3cMr7+DV&`%RdngKPHMk;zh^y z$wfblj{HOiDs5&qHS-L++roUo7KO^=&R=s#hmx^O+_i4e(WbPXUWU(jVh5RL^uHUx zhaVXmb~GkBesZBs3?BBd)lXE`!6!7+i-J!!%)POsakh1@Mdb!4cu_?h9H)KUk`sRT zK*IKAkN8;2KDMBvAC6`I(2#g3RLmc8Q2Uaez$O+)!rH z-}y_%#|dHNa}P2@E}>>lph_ObJhmic*fDMMi3~I44{X55ex!fS^9(FABZpndTSa{P z61EU*2S5JN+7)Kd7z>;(ZO0&bFf`v1*0fQ{Eb-gEe5o$cig)oTEw`m%Un7P(9*D-| z5D(l`c}{sg;e$l@)!ZrLBM;`ykYD0JHnFIQTXcgp?G$t?U(FTmJb5jO&zKWq<{h>@ zR|kGs3)smz#*g(i_MYR+;{w9RRUfAeK?Ojcm>5SF@#@1X@RJSayy9PJp{n|a7Tcm3B;DTS$2XPq-OFA(q)5PK_M`Im|Cs@^l4 zX|ec1CN>wMC)qNEM85IC1MHKKh99 z=WADZ+8aB34N5(IoA8g~&)0PDq&ZJkgT-6k@|N8{{^LJd0l&~V4)c2S(MSFDDbPOn z!9UOw+7HLD@n!reTtDTQj*ZX{kAJOu?0YPvj}B$OE+W@Vxeh6*dXFD!Hm=E?ujk;& zdu;O%TKU&?xoi;MJlC;;90fkH9P$tUSHJqDK0J7>Ww1|)f7;1E`J6WY_}}*%94i0d zMC@~k|LDTw_|IJ61C}cD_^;S~pp z^Do)0eEYBCBESWksvG~BQ}w>isp^B#&7FT-yD(<+I90oj70mth`euzEdNPZR9J9kn z9l4uV&-oo{hgR!&%|Gk)e94-|NxLRCCp!s= zpPPAgrOXM&n@YBnlYBX>=~3zVW*7_dLmcS%hIL#N$g=4bE1C|tCW4xrn7ycyA6Jkn z&}i9ysYKN|VAm&g?CFJnO4a4lH|3($hUDN$EU`wfZj|dQ3vlcWuMs~o6vyL0=~QgF z*~1>2A=G+b@OA>$t~@I?bnB;d#*Me!Fp-_J>`>!$#jh?VM>v&(<4JtdMV|ah+xm>R zFWN>NsTd>1n8F1}E<);JN?6Div@Fi^o)5X$EC9?S!V#}=AVAnoKzWN-b8YB~&WAU9 z*hvOm;;cBFgluU3Iwx|(V980y^2A;=)`jwClK}rJ%iO@!u#W{|ra)W9StQ6_C*vl@ zLVg3&8Y474Ux}sMlo+r75OCw$zUu!Ab&@b={yt8t9A9bu;Y@#XOq1~txB(;G98F(Csk#<5GDSlk}5qUUj$V#lA4U8+5n@N9$VhArYsd*PQn$1wa`*6+$s zG2wS8nd%RvL^ItK%}w>m&+@8iXG|BoIG%I-8hP5NWyc3$vSq$)7B0lp9D}@M#6afu+e+Wc(*-~HX+YxDO>3*(=!G{FwX!f$?)C&Me{ij6F*%;TT$`9_bY z#OH!sWb@=TwqN_&-`V?4aCGp2Z2U*B=tvy(pX&j*rCVxt+mJb|Br4`|7MrqBMN$M+mFe&>Gl=Q{c0e=ED+FEEl* z;j!jLo`uU9e>Du>^G)1*zdT<#b6kmk>iFYB6#8KLv!DIUPlzkS#RPICyZYy=S=c!L z{O3Qv`_6a1J!CJRe+fQ^jz0?cQ2yX`v~>OlVL1X+kN>>>0?$5n>-<_}*ZCD1IvnnD z$V(rawD)bUw8Qf^k=*=xj&E+yksU{$WsYm-*g5lOdugYh)f?J=OQ=P{->J0sPdCz+%(lqmnWbnB2NeM^(fpBa>8KJ z)(sF&>ZXK?Ic{8rKFau})(O~JYWpTsCpD!=43g*KWLyv+F1mqdq9dc<`0&O7h9pH* zw@BPb(MPjvnvY*(xSFiyxR6k8#Icf#F9H(?U-pl_WY{1;c$iZM-SUGRCun1V7+mCs zZegLmbucsRD_`P@uh>J9;{J%){UTaEe8;Fx-6#&f>PL6k@KP+$cfr zaI@Z$Gd5}?8^7gCcnJdqQuryi(l6cetIY`6K*!^)mxGPz(L2m3MVC$S-nBmPf z)%OOB{BC1K%<&Qy@~VgnJ=Z2{-1w1<$o8WRMhvhS+STVCM|} zAgRNv3NcG(%>UX@k*s`T=7=wp;Emw0?Kb{d5AumU|2aJd>}y1ZPumrPU%gmEbdrnL zO(_k#Vw>;xl8=84Q{_=}%h*eoTq+N4G{$kuE(_<9!+#xrya|Sz0ZP^*N=H>*Sx5_Fy?WvaGAnBR!g3Cz{f83q^o#nBZEZYQ}Ycg zK7P}{mR|Y50D|YTj{{=JNFC2HhH-4V61|j(oefqvqDZV_w|`U=Pu92Rreq>p=Y|?n zV#K(Qt2SNsEse3MWS*BDave4t98plvhXB@QC{NMU1eeko>j$C>x@s$y5su< zPDz6Gz<(SU`3os{9_L}J{EH}Ahve8~3%7dn_#ivNK>uJ7gZTiS#*U|q`G8M)j43D( zH|B>aACJr%$E(6lD{-8U@k5)RT4VK>aZ0S>a**|bKC+8pIr2Ony5x|#i4gbs9u|9G`hXCbE346YY z>a|@s)`wzX$XA|m%<%_hPN8gi#IdEHinVf-NX1kkJ2b~eOcV*M=Zy*-4*$Oc{8@HR zM{mozL(gfAd@w>EI%U{K->ktfHfFDwAs+l_Qz92U!=LFTS+a-ZqLX^or5!qU<~IG~ zWM?{Zl-No=(`d)`tUJrjGPEhj$f58IL=NIw39!6f!a{Pl{ za=YE#uV9^eIeQM&l8E2b_@~M_y$xnVf_|d06>i-wN_=V-rW21HTRWU>7c+OMTe8)InkHH#v?|a{~ z`{_@AGHrlX&hejhV&jgV*1msak8VOI*VO1$EaZhw*)H1FCOPmzhF3iyU9$0)hZ15J z8?j3~RrdY!;pE%j{*K-6{LVebmrZ280%R+TojOMimaD_DCLZFH+9>gx8gjLlTo&WK_V!j(+OH*T# zxwPs@)MYLW92_(^1)3hBhUB4%vktn~^;v7n#(@+1%QT&Cusu zW*hJ+;isNywA()@96zS;f)Q=XjPn*(__KWYsiPm6)W_M}+KYbZTf3oCQ^HR@(`cX0 zKg;y!F{Ny+#~ZGfWzlPzx^${r{$m5$5L@JP%*5*DN@P=?Rvx+IbdIB+Wc#!_v)tUq zcJK;)u4jJX434FP+}uvz#OW>cZ9Rz`+e9bv&Hhn{y)AufEOOg=mWz$ZYcD)`3IchI(=H*T3IyyLGD=cdR{ zYr@4FS`>-4GQ*_*yR_p`sJ@KW@^*c3^6McY|e!MFRNj~7I1yv3i&p$D&@v5=K zSgm7;C}*%F9%E{kI8K31{u%es%f@h{*!45!E%=fT2GJzWb>46sfr=00z_R>%jKwBq zf1o3g9Q!NIl8;?*Lznkj>(ur2S3G&+uY_P}Ii14k!Uc8wYohhBQ~6h1Io4v=85BU4 zVM>CB*NeodD@(A=Tpn0xE-{vT{fvto)p`Og+0k2JtB}A!cB#`w2YK=ZPy3<`34M4J z5}=r_XeFZGH z=`m!BDg%GdmORHS{8U_HoJK5{pbsr8 z*oRxTVTiy_bpOv65jT{{9ua%h>C3qQ*4j^2vfbn+L)VPa)@EyItU*qj`09} zCPjuCA1R?9>W7y)GTZuceB>iT{e1JU?6!~`=xYQeR{xh`#UI_GM`gB^_EsjcsUw&E zp*l8@z5f2s^QDz?gD0jN=fi*aKfm4m;HOUy|7*n{51MX1;LVYXu%Ej$Do zjT{@@730hw?&Y6* z#{Z*_KDPVpXFs=SR|9NIHvNr&x<~O(9Q%0f#}<3UfLwI;?aw-uAJ>laaW4L68`yf{ zi6{L1=)eE_zi*Qt{NM+7pZw(i@K^VsL&;P1<$LwT*Tz8O_0ymJRFW&tihFNI^DlPj z5uRd2*ksE!R}YyOv1=+T*NrM;DjZ0g9Rf2fX)_TTtl&-qu^ar-l{=BJkF zky7h7WOQjKzM88=t2SJ8e4RKM-1d>9K%b98Tixi*^(-HHY}x3rOB;KXSRF?^h3p9w;H?y)M4a?QWS8bqJL^<)pr|`A8R=!Go1WU)I7A}5> z8!qT8p-Yi*a{`DEL>VoQA@fcG#GrSv@L>)6pnXQ`Do>1LdmC%r7PH?QDcpM~K<3Yc0t-h=a3x7ysCuJZueO#A!a;|Y5 zUq1j%s=Vx8IU0Lmpol~)TwX|Fle)*J8Oe@1_mRci+h#^n<%eXP`Y;2?U6(eX;J&Y$2Qei>C=jf}5- zL(*{Ne5jsv>6cHd5r<>fn0W54e%E6m>$&7G zi>-B8*{=F{jSPw1Hqg5T|?>CJ4(1 z^9f-Uq9FyM^OCa&>k$eSvZaSgu(75HVSBwJCwu;YR>#@2ml!akAC7s92e$T)y_K(y zwu-5~{zOLX#H&#D@lbCxRLD&g^co8jz4;D2_^^a?9`Q*hoTK z-Ec_Dx#H`}%4zgYBU7=CV6PyA)7Ut2+ z_Rkyz0zXXS`40{S%9Z6`7-NjDTEPbE@LJ^0*HmzwM?Cyf$doI^pW}Zvqj{Qp9`m`K zv77VfA0g)HayICH^PAsVzmDPS96{L8=We)o5OclWASy~^@`@+TkO{mtL}t@*qm8~+PYjeMX3 zjqjPqRto0ty6eszADl#=I=LgqCi+*u`qii`_2K-3%OYl5_?i8N3!PH7s=d;tK#R5a z-u@Z$eT;&0Fa)r9{_g>(PUIT@6^j*+d4XP9hsT7ZJ$PFt8>~u zw#k9A^^<<;lWd+wX4VgGGi_@l{nU}AkG?j<)ex0;2;7uJ*fliWfN-zNNlv}>MlUxo z(q8}=leO^Bq~=CPD(G=>!36_1i8*1~w}U}WH<3glqMtT(V@!TkWiu&YR7Br(7cX%q z7H%fF2y@(04xbbVv+^T&ekCg+eu)tq@bPKC@>7u@qZdDp2^n~U3lVF>X7xnM9jtg3 z;SNx32cmZucZc0!!&dR9hHs=zpg(9}Hq0E2AFEP8SphAZ8nJD1DOau@UFnF1eeji@ z&pAc1D`+b=)pq>Ri+$sS2`Sr+>{Y|!HRqsJsW2C_!jjBhJt2CL2fEOypfwXi6mAzi7f-h9vbSXh{omtzF3>y zS5ku~YfG>2N4VCbTbYOVro6H5%|L4tZ^c{~D_X}?>mKYVm4A)Vf{F6?=9h7ngpL;#v)Tg2`3oDb z8^vHeu{DknPF`&(N{tT)r4JxB16>Vy=J@mU(@(i3R_uZwT#v1CqVKOs5Uq}lSgW;- zU*m%Au!(Jtfv|h}Y5lbhn_3u@&N)5x>sTE#v58jzcpl1(OU4%_8)JN5HTH$3$J5wp zj`7rQ#SORkOdiZs4)qsC_^A&u>gyG1To{|m4cz$pg?zveo8DaHyhBuatMFu*afMU_ zpPTULr)NbwtJrFDxZ(phVy^MUuY}MwevF3-6AJ5d>#~C8fJl`b8aRvFh`BugXq_9&2l^ANC>&{uywN|iIbGM!(FL{6H zn-rV}x^s*&;8Jn2R`FkBM2`BEL*|<2g9)->sUc_m@^3xM6PLzJ11eSfBu>v~<>BKJ zHUvejuUa>SrT%d(^O$_lkv_+2;*MT{V8@P;0po|6Ql)aVE_28B;23a{vV2jP5BvkM znj2n!5?lQ%NXN`Z0Am+9+3@tmS7d5FC+@l6lAM@R(^#s%_&A_5%b*(Dsb?B(%FHXu;rH40aXPci zY!3h%fUJxmk8!zQ!Fs_Dc@uV-8Mc zZz=x@@x0fI){kOj?R@Z^FIJ1WO(GnVDxYK%43aA;qDSBVa8r8pu^ZVb{XIOP&oXm6 zIy|6}weX@By{9F@GXMYqRY^oaRQMSA%i|v#oM(6#DrNRLx5H<=)_)Fp#!r?<&c}Uq zvY`r{znFRW;fHn~{pd%1etY172X^28{`Yr}J@%MlpN^A~w|$kesRI@WjGai{+oYsRSJu5n5`{>yGM zS#98-{NYCy+AV+l0Xf1PWp0N?J`{Lc{@U;Sd;G6%{;%t%=G*+f&Ozo`&BLPAMj5P002ovPDHLkV1hHcwIKii literal 0 HcmV?d00001 diff --git a/img/trigger-3.png b/img/trigger-3.png new file mode 100644 index 0000000000000000000000000000000000000000..db1543ceb328808d683e36fbd50c8c4e0a0a1879 GIT binary patch literal 196366 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

      6E&p@GHSz2nb#E-na3)KlrR-+ZEb%Av{uq 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

      Z|jc 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�MxGRD4>~fu9*fvg~)Xu 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

      gJES1rxpBlGjggm`#Egg&$f&`9N!%b27 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 literal 0 HcmV?d00001 diff --git a/img/trigger-4.png b/img/trigger-4.png new file mode 100644 index 0000000000000000000000000000000000000000..0fd030e5eeef560503d396c7955795cea90345d6 GIT binary patch literal 207940 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

      j+N@hdZZj_gM%ub97A>y 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

      K1h_lSUpqDMhA2jMF^%Urv!Nu&J1_zX)%py39E= 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 YB{6cJ8;%~@2K>3MZJ?EX+3NBC1OJ2^lK=n! literal 0 HcmV?d00001 diff --git a/package.json b/package.json index e648c6d..99586d9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "if-this-then-ad", - "version": "2.0.1", + "version": "2.1.0", "description": "Automatic management of marketing campaigns based on real world events", "main": "src/index.ts", "scripts": { From d91c9162f86224894673e2c2aa1d6d0221cc72b4 Mon Sep 17 00:00:00 2001 From: paranerd Date: Fri, 14 Apr 2023 16:16:40 +0200 Subject: [PATCH 59/84] Added more details on Google Ads parameters --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a063f0d..bfa88dd 100644 --- a/README.md +++ b/README.md @@ -245,8 +245,8 @@ Given the above JSON source we could add the following to our Sheet: **Optional parameters** -- `target:loginCustomerId` -- `target:serviceAccount` +- `target:loginCustomerId` (when accessing via MCC; should be the MCC's CID) +- `target:serviceAccount` (alternative way of authentication) ## Advanced use cases From 930ff7913bc397c4f83c9ad41e45fd9bfc2e3691 Mon Sep 17 00:00:00 2001 From: paranerd Date: Fri, 14 Apr 2023 16:18:54 +0200 Subject: [PATCH 60/84] Removed leading 'Error' since Error itself provides it --- src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index 3116a33..a5fadc7 100644 --- a/src/index.ts +++ b/src/index.ts @@ -191,7 +191,7 @@ function main(mode: MODE) { ); } } catch (err) { - status = `Error (${Utils.getCurrentDateString()}): ${err}`; + status = `${Utils.getCurrentDateString()}: ${err}`; } finally { // Update status getSheetsService().setCellValue( From 8250192b4fbf8fe4f1f0cab57cbbe29ff1ef4527 Mon Sep 17 00:00:00 2001 From: paranerd Date: Fri, 14 Apr 2023 16:20:35 +0200 Subject: [PATCH 61/84] Fixed typo breaking updating Ad Groups; also fixed some linting --- src/target-agents/google-ads.ts | 57 +++++++++++++++++++++------------ 1 file changed, 37 insertions(+), 20 deletions(-) diff --git a/src/target-agents/google-ads.ts b/src/target-agents/google-ads.ts index 5bb3e39..d6bdc03 100644 --- a/src/target-agents/google-ads.ts +++ b/src/target-agents/google-ads.ts @@ -187,7 +187,7 @@ export class GoogleAds extends TargetAgent { ], }; - const res = this.fetchUrl(path, 'POST', payload); + this.fetchUrl(path, 'POST', payload); } /** @@ -212,7 +212,7 @@ export class GoogleAds extends TargetAgent { }; if (this.parameters.loginCustomerId) { - headers['login-customer-id'] = this.parameters.loginCustomerId; + headers['login-customer-id'] = String(this.parameters.loginCustomerId); } const url = `${this.baseUrl}/${path}`; @@ -260,7 +260,7 @@ export class GoogleAds extends TargetAgent { status: string ) { const adGroups = this.getAdGroupsById(customerId, ids); - const path = `customers/${customerId}/adGroup:mutate`; + const path = `customers/${customerId}/adGroups:mutate`; for (const adGroup of adGroups) { this.updateEntityStatus(path, adGroup, status); @@ -315,7 +315,7 @@ export class GoogleAds extends TargetAgent { * @param {string[]} ids * @returns {string[]} */ - private getAdsById(customerId: any, ids: string[]): Entity[] { + private getAdsById(customerId: string, ids: string[]): Entity[] { const query = ` SELECT ad_group_ad.ad.id, @@ -330,12 +330,11 @@ export class GoogleAds extends TargetAgent { }; const path = `customers/${customerId}/googleAds:search`; - const res = this.fetchUrl(path, 'POST', payload, true) as Record< - string, - Array> - >; + const res = this.fetchUrl(path, 'POST', payload, true) as { + results: Array>; + }; - return res.results.map((result: any) => { + return res.results.map(result => { return { resourceName: result.adGroupAd.resourceName, status: result.adGroupAd.status, @@ -365,9 +364,11 @@ export class GoogleAds extends TargetAgent { }; const path = `customers/${customerId}/googleAds:search`; - const res = this.fetchUrl(path, 'POST', payload, true) as any; + const res = this.fetchUrl(path, 'POST', payload, true) as { + results: Array>; + }; - return res.results.map((result: any) => { + return res.results.map(result => { return { resourceName: result.adGroup.resourceName, status: result.adGroup.status, @@ -382,7 +383,7 @@ export class GoogleAds extends TargetAgent { * @param {string} label * @returns {Entity[]} */ - private getAdsByLabel(customerId: any, label: string): Entity[] { + private getAdsByLabel(customerId: string, label: string): Entity[] { const labelResource = this.getAdLabelByName(customerId, label); const query = ` @@ -399,9 +400,11 @@ export class GoogleAds extends TargetAgent { }; const path = `customers/${customerId}/googleAds:search`; - const res = this.fetchUrl(path, 'POST', payload, true) as any; + const res = this.fetchUrl(path, 'POST', payload, true) as { + results: Array>; + }; - return res.results.map((result: any) => { + return res.results.map(result => { return { resourceName: result.adGroupAd.resourceName, status: result.adGroupAd.status, @@ -430,7 +433,13 @@ export class GoogleAds extends TargetAgent { }; const path = `customers/${customerId}/googleAds:search`; - const res = this.fetchUrl(path, 'POST', payload, true) as any; + const res = this.fetchUrl(path, 'POST', payload, true) as { + results: Array>; + }; + + if (!(res.results && res.results.length)) { + throw new Error(`Label ${labelName} not found`); + } return res.results[0].label.resourceName; } @@ -442,7 +451,7 @@ export class GoogleAds extends TargetAgent { * @param {string} label * @returns {Entity[]} */ - private getAdGroupsByLabel(customerId: any, label: string): Entity[] { + private getAdGroupsByLabel(customerId: string, label: string): Entity[] { const labelResource = this.getAdGroupLabelByName(customerId, label); const query = ` @@ -459,11 +468,13 @@ export class GoogleAds extends TargetAgent { }; const path = `customers/${customerId}/googleAds:search`; - const res = this.fetchUrl(path, 'POST', payload, true) as any; + const res = this.fetchUrl(path, 'POST', payload, true) as { + results: Array>; + }; - return res.results.map((result: any) => { + return res.results.map(result => { return { - resultName: result.adGroup.resourceName, + resourceName: result.adGroup.resourceName, status: result.adGroup.status, }; }); @@ -490,7 +501,13 @@ export class GoogleAds extends TargetAgent { }; const path = `customers/${customerId}/googleAds:search`; - const res = this.fetchUrl(path, 'POST', payload, true) as any; + const res = this.fetchUrl(path, 'POST', payload, true) as { + results: Array>; + }; + + if (!(res.results && res.results.length)) { + throw new Error(`Label ${labelName} not found`); + } return res.results[0].label.resourceName; } From 327a83a2b763b675c7ea6e5a7a2fd234d378b033 Mon Sep 17 00:00:00 2001 From: paranerd Date: Fri, 14 Apr 2023 16:21:00 +0200 Subject: [PATCH 62/84] Updated bundle --- dist/index.js | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/dist/index.js b/dist/index.js index 5e9deb6..9874143 100644 --- a/dist/index.js +++ b/dist/index.js @@ -479,7 +479,7 @@ class GoogleAds extends TargetAgent { }, ], }; - const res = this.fetchUrl(path, 'POST', payload); + this.fetchUrl(path, 'POST', payload); } fetchUrl(path, method = 'get', payload, forceCache = false) { const headers = { @@ -488,7 +488,7 @@ class GoogleAds extends TargetAgent { 'developer-token': this.parameters.developerToken ?? '', }; if (this.parameters.loginCustomerId) { - headers['login-customer-id'] = this.parameters.loginCustomerId; + headers['login-customer-id'] = String(this.parameters.loginCustomerId); } const url = `${this.baseUrl}/${path}`; return this.callApi(url, headers, undefined, payload, method, undefined, forceCache); @@ -502,7 +502,7 @@ class GoogleAds extends TargetAgent { } updateAdGroupStatusById(customerId, ids, status) { const adGroups = this.getAdGroupsById(customerId, ids); - const path = `customers/${customerId}/adGroup:mutate`; + const path = `customers/${customerId}/adGroups:mutate`; for (const adGroup of adGroups) { this.updateEntityStatus(path, adGroup, status); } @@ -535,7 +535,7 @@ class GoogleAds extends TargetAgent { }; const path = `customers/${customerId}/googleAds:search`; const res = this.fetchUrl(path, 'POST', payload, true); - return res.results.map((result) => { + return res.results.map(result => { return { resourceName: result.adGroupAd.resourceName, status: result.adGroupAd.status, @@ -556,7 +556,7 @@ class GoogleAds extends TargetAgent { }; const path = `customers/${customerId}/googleAds:search`; const res = this.fetchUrl(path, 'POST', payload, true); - return res.results.map((result) => { + return res.results.map(result => { return { resourceName: result.adGroup.resourceName, status: result.adGroup.status, @@ -578,7 +578,7 @@ class GoogleAds extends TargetAgent { }; const path = `customers/${customerId}/googleAds:search`; const res = this.fetchUrl(path, 'POST', payload, true); - return res.results.map((result) => { + return res.results.map(result => { return { resourceName: result.adGroupAd.resourceName, status: result.adGroupAd.status, @@ -598,6 +598,9 @@ class GoogleAds extends TargetAgent { }; const path = `customers/${customerId}/googleAds:search`; const res = this.fetchUrl(path, 'POST', payload, true); + if (!(res.results && res.results.length)) { + throw new Error(`Label ${labelName} not found`); + } return res.results[0].label.resourceName; } getAdGroupsByLabel(customerId, label) { @@ -615,9 +618,9 @@ class GoogleAds extends TargetAgent { }; const path = `customers/${customerId}/googleAds:search`; const res = this.fetchUrl(path, 'POST', payload, true); - return res.results.map((result) => { + return res.results.map(result => { return { - resultName: result.adGroup.resourceName, + resourceName: result.adGroup.resourceName, status: result.adGroup.status, }; }); @@ -635,6 +638,9 @@ class GoogleAds extends TargetAgent { }; const path = `customers/${customerId}/googleAds:search`; const res = this.fetchUrl(path, 'POST', payload, true); + if (!(res.results && res.results.length)) { + throw new Error(`Label ${labelName} not found`); + } return res.results[0].label.resourceName; } } @@ -718,7 +724,7 @@ function main(mode) { } } catch (err) { - status = `Error (${Utils.getCurrentDateString()}): ${err}`; + status = `${Utils.getCurrentDateString()}: ${err}`; } finally { getSheetsService().setCellValue(index + CONFIG.rules.startRow + 1, CONFIG.rules.cols.status + 1, status, CONFIG.rules.sheetName); From 967a0db2a1e413f2871f3b4bede654b5c15b19e5 Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 18 Apr 2023 14:15:30 +0200 Subject: [PATCH 63/84] Added appsscript to dist --- dist/appsscript.json | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 dist/appsscript.json diff --git a/dist/appsscript.json b/dist/appsscript.json new file mode 100644 index 0000000..ff9c7f9 --- /dev/null +++ b/dist/appsscript.json @@ -0,0 +1,28 @@ +{ + "timeZone": "America/New_York", + "dependencies": { + "enabledAdvancedServices": [ + { + "userSymbol": "Sheets", + "serviceId": "sheets", + "version": "v4" + } + ], + "libraries": [ + { + "userSymbol": "OAuth2", + "libraryId": "1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF", + "version": "35", + "developmentMode": true + } + ] + }, + "exceptionLogging": "STACKDRIVER", + "oauthScopes": [ + "https://www.googleapis.com/auth/adwords", + "https://www.googleapis.com/auth/display-video", + "https://www.googleapis.com/auth/script.external_request", + "https://www.googleapis.com/auth/spreadsheets" + ], + "runtimeVersion": "V8" +} From d44fd0007a963e5f3d92a4c64d2a9af754487820 Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 18 Apr 2023 14:18:27 +0200 Subject: [PATCH 64/84] Make sure appsscript.json is in dist after build --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 99586d9..f401ed6 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "src/index.ts", "scripts": { "clean": "rimraf build dist", - "build": "npm run clean && npm run bundle", + "build": "npm run clean && npm run bundle && ncp appsscript.json dist/appsscript.json", "test": "jest test/ --passWithNoTests", "deploy": "npm run lint && npm run test && npm run build && ncp appsscript.json dist/appsscript.json && ncp .clasp-dev.json .clasp.json && clasp push", "deploy:prod": "npm run lint && npm run test && npm run build && ncp appsscript.json dist/appsscript.json && ncp .clasp-prod.json .clasp.json && clasp push", From 92a2f3648a0128970d569778a886bd62445feecc Mon Sep 17 00:00:00 2001 From: Andriy Kushnarov <3335483+akushnarov@users.noreply.github.com> Date: Tue, 25 Apr 2023 10:15:14 +0200 Subject: [PATCH 65/84] Corrected a tiny typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bfa88dd..a035b2f 100644 --- a/README.md +++ b/README.md @@ -280,7 +280,7 @@ Any time any of the referenced cells change, `customEvaluator()` will be called You can easily query multiple source APIs to built even more complex conditions by extending the Dynamic Column Notation with a group: -- `source:url` → `source.1.url` +- `source:url` → `source.1:url` - `source:params.lat` → `source.1:params.lat` Add as many sources as you need by incrementing the group for each one. From cf52e9dd8fc3c236a57d97a4f4b300eba646f3be Mon Sep 17 00:00:00 2001 From: paranerd Date: Wed, 3 May 2023 15:54:28 +0200 Subject: [PATCH 66/84] Move Sheets singleton provider into SheetsHelper --- src/helpers/sheets.ts | 18 +++++++++++++++-- src/index.ts | 45 ++++++++++++++++++++----------------------- 2 files changed, 37 insertions(+), 26 deletions(-) diff --git a/src/helpers/sheets.ts b/src/helpers/sheets.ts index 4ce5ecc..011c95c 100644 --- a/src/helpers/sheets.ts +++ b/src/helpers/sheets.ts @@ -20,8 +20,9 @@ * spreadsheet directly. */ export class SheetsService { - defaultMode: string; - spreadsheet: GoogleAppsScript.Spreadsheet.Spreadsheet; + private static instance: SheetsService; + private defaultMode: string; + private readonly spreadsheet: GoogleAppsScript.Spreadsheet.Spreadsheet; /** * Constructor. @@ -178,4 +179,17 @@ export class SheetsService { getSpreadsheet() { return this.spreadsheet; } + + /** + * Returns the SheetsService instance, initializing it if it does not exist yet. + * + * @param {string} spreadsheetId + * @returns {!SheetsService} The initialized SheetsService instance + */ + static getInstance(spreadsheetId?: string) { + if (typeof this.instance === 'undefined') { + this.instance = new SheetsService(spreadsheetId); + } + return this.instance; + } } diff --git a/src/index.ts b/src/index.ts index a5fadc7..e543924 100644 --- a/src/index.ts +++ b/src/index.ts @@ -29,15 +29,13 @@ enum MODE { FETCH_AND_SYNC = 2, } -/** @type {?SheetsService} */ -let sheetsService: SheetsService; - /** @type {Record} */ const targetAgents: Record = {}; /** * Add custom menu item into the Spreadsheet menu. */ +// eslint-disable-next-line @typescript-eslint/no-unused-vars function onOpen() { const ui = SpreadsheetApp.getUi(); ui.createMenu('IFTTA') @@ -54,6 +52,7 @@ function onOpen() { * This is required because when running 'headless' (e.g. via a trigger), * the SpreadsheetApp.getActiveSpreadsheet() method returns null. */ +// eslint-disable-next-line @typescript-eslint/no-unused-vars function setup() { const ssId = SpreadsheetApp.getActiveSpreadsheet().getId(); PropertiesService.getScriptProperties().setProperty('spreadsheetId', ssId); @@ -62,6 +61,7 @@ function setup() { /** * Call main() with mode 'FETCH'. */ +// eslint-disable-next-line @typescript-eslint/no-unused-vars function fetch() { main(MODE.FETCH); } @@ -69,6 +69,7 @@ function fetch() { /** * Call main() with mode 'SYNC'. */ +// eslint-disable-next-line @typescript-eslint/no-unused-vars function sync() { main(MODE.SYNC); } @@ -76,6 +77,7 @@ function sync() { /** * Call main() with mode 'FETCH_AND_SYNC'. */ +// eslint-disable-next-line @typescript-eslint/no-unused-vars function fetchAndSync() { main(MODE.FETCH_AND_SYNC); } @@ -88,7 +90,11 @@ function fetchAndSync() { */ function main(mode: MODE) { // Get all rows from the sheet - const rows = getSheetsService().getRangeData(CONFIG.rules.sheetName, 1, 1); + const rows = SheetsService.getInstance().getRangeData( + CONFIG.rules.sheetName, + 1, + 1 + ); if (rows.length === 0) { return; @@ -143,7 +149,7 @@ function main(mode: MODE) { const results = row.slice(resultsHeaderStartCol); - getSheetsService().setValuesInDefinedRange( + SheetsService.getInstance().setValuesInDefinedRange( CONFIG.rules.sheetName, index + CONFIG.rules.startRow + 1, resultsHeaderStartCol + 1, @@ -157,7 +163,7 @@ function main(mode: MODE) { // Sync if (mode === MODE.SYNC || mode === MODE.FETCH_AND_SYNC) { console.log('Synchronizing...'); - const evaluation = getSheetsService().getCellValue( + const evaluation = SheetsService.getInstance().getCellValue( CONFIG.rules.sheetName, index + 1 + CONFIG.rules.startRow, CONFIG.rules.cols.activationFormula + 1 @@ -183,7 +189,7 @@ function main(mode: MODE) { status = `Synchronized (${Utils.getCurrentDateString()})`; // Update timestamp - getSheetsService().setCellValue( + SheetsService.getInstance().setCellValue( index + CONFIG.rules.startRow + 1, CONFIG.rules.cols.lastUpdate + 1, String(Date.now()), @@ -194,7 +200,7 @@ function main(mode: MODE) { status = `${Utils.getCurrentDateString()}: ${err}`; } finally { // Update status - getSheetsService().setCellValue( + SheetsService.getInstance().setCellValue( index + CONFIG.rules.startRow + 1, CONFIG.rules.cols.status + 1, status, @@ -207,11 +213,16 @@ function main(mode: MODE) { /** * Validate that the Sheet and target entities are in sync. */ +// eslint-disable-next-line @typescript-eslint/no-unused-vars function validate() { let errors: string[] = []; // Get all rows from the sheet - const rows = getSheetsService().getRangeData(CONFIG.rules.sheetName, 1, 1); + const rows = SheetsService.getInstance().getRangeData( + CONFIG.rules.sheetName, + 1, + 1 + ); // Extract and parse column headers const columnHeaders = rows.shift() as string[]; @@ -221,7 +232,7 @@ function validate() { rows.forEach((row: string[], index: number) => { console.log(`Validating row ${index + 1}/${rows.length}`); try { - const evaluation = getSheetsService().getCellValue( + const evaluation = SheetsService.getInstance().getCellValue( CONFIG.rules.sheetName, index + CONFIG.rules.startRow + 1, CONFIG.rules.cols.activationFormula + 1 @@ -339,17 +350,3 @@ function getTargetAgent(agentName: string) { return targetAgents[agentName]; } - -/** - * Return the SheetsService instance, initializing it if it does not exist yet. - * - * @returns {!SheetsService} The initialized SheetsService instance - */ -function getSheetsService() { - if (sheetsService === undefined) { - const spreadsheetId = CONFIG.spreadsheetId || undefined; - sheetsService = new SheetsService(spreadsheetId); - } - - return sheetsService; -} From 132aa367b51c8f2a04d0f060a8aa148c54ff1b7a Mon Sep 17 00:00:00 2001 From: paranerd Date: Wed, 3 May 2023 15:55:19 +0200 Subject: [PATCH 67/84] Cleanup --- src/helpers/api.ts | 27 +++++---------------------- src/target-agents/dv360.ts | 7 +------ 2 files changed, 6 insertions(+), 28 deletions(-) diff --git a/src/helpers/api.ts b/src/helpers/api.ts index afdb57d..5515e5a 100644 --- a/src/helpers/api.ts +++ b/src/helpers/api.ts @@ -95,33 +95,16 @@ export class ApiHelper { } return res; - - /*if (!(cacheKey in this.cache) || !this.cache[cacheKey]) { - const res = UrlFetchApp.fetch(url, params); - - if (200 != res.getResponseCode() && 204 != res.getResponseCode()) { - Logger.log('HTTP code: ' + res.getResponseCode()); - Logger.log('API error: ' + res.getContentText()); - Logger.log('URL: ' + url); - throw new Error(res.getContentText()); - } - - this.cache[cacheKey] = res.getContentText() - ? JSON.parse(res.getContentText()) - : {}; - } - - return this.cache[cacheKey];*/ } /** * Convert object into URL query string. * * @param {string} url - * @param {Object|null} obj + * @param {Record} obj * @returns {string} */ - objectToUrlQuery(url: string, obj?: object) { + objectToUrlQuery(url: string, obj?: Record) { if (!obj || (obj && Object.keys(obj).length === 0)) return ''; const prefix = url.includes('?') ? '&' : '?'; @@ -129,11 +112,11 @@ export class ApiHelper { return prefix.concat( Object.keys(obj) .map(key => { - if ((obj as any)[key] instanceof Array) { - const joined = (obj as any)[key].join(`&${key}=`); + if (obj[key] instanceof Array) { + const joined = (obj[key] as Array).join(`&${key}=`); return joined.length ? `${key}=${joined}` : null; } - return `${key}=${(obj as any)[key]}`; + return `${key}=${obj[key]}`; }) .filter(param => param) .join('&') diff --git a/src/target-agents/dv360.ts b/src/target-agents/dv360.ts index cba52e6..a101480 100644 --- a/src/target-agents/dv360.ts +++ b/src/target-agents/dv360.ts @@ -180,12 +180,7 @@ export class DV360 extends TargetAgent { lineItemId: string, status: boolean ) { - const newStatus = this.setEntityStatus( - advertiserId, - lineItemId, - status, - 'lineItems' - ); + this.setEntityStatus(advertiserId, lineItemId, status, 'lineItems'); } /** From 672b81b48c47de9083f23d651140cecedae4e922 Mon Sep 17 00:00:00 2001 From: paranerd Date: Wed, 3 May 2023 16:47:49 +0200 Subject: [PATCH 68/84] Updated bundle --- dist/index.js | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/dist/index.js b/dist/index.js index 9874143..e41d12c 100644 --- a/dist/index.js +++ b/dist/index.js @@ -240,6 +240,12 @@ class SheetsService { getSpreadsheet() { return this.spreadsheet; } + static getInstance(spreadsheetId) { + if (typeof this.instance === 'undefined') { + this.instance = new SheetsService(spreadsheetId); + } + return this.instance; + } } class Utils { @@ -374,7 +380,7 @@ class DV360 extends TargetAgent { this.fetchUrl(url, 'patch', updateMask); } setLineItemStatus(advertiserId, lineItemId, status) { - const newStatus = this.setEntityStatus(advertiserId, lineItemId, status, 'lineItems'); + this.setEntityStatus(advertiserId, lineItemId, status, 'lineItems'); } setInsertionOrderStatus(advertiserId, insertionOrderId, status) { this.setEntityStatus(advertiserId, insertionOrderId, status, 'insertionOrders'); @@ -654,7 +660,6 @@ var MODE; MODE[MODE["SYNC"] = 1] = "SYNC"; MODE[MODE["FETCH_AND_SYNC"] = 2] = "FETCH_AND_SYNC"; })(MODE || (MODE = {})); -let sheetsService; const targetAgents = {}; function onOpen() { const ui = SpreadsheetApp.getUi(); @@ -680,7 +685,7 @@ function fetchAndSync() { main(MODE.FETCH_AND_SYNC); } function main(mode) { - const rows = getSheetsService().getRangeData(CONFIG.rules.sheetName, 1, 1); + const rows = SheetsService.getInstance().getRangeData(CONFIG.rules.sheetName, 1, 1); if (rows.length === 0) { return; } @@ -707,39 +712,39 @@ function main(mode) { row = updateRowWithResultData(columnHeaders, row, res, group); const resultsHeaderStartCol = columnHeaderHelper.getFirstColWithNamespace(CONFIG.resultNamespace); const results = row.slice(resultsHeaderStartCol); - getSheetsService().setValuesInDefinedRange(CONFIG.rules.sheetName, index + CONFIG.rules.startRow + 1, resultsHeaderStartCol + 1, [results]); + SheetsService.getInstance().setValuesInDefinedRange(CONFIG.rules.sheetName, index + CONFIG.rules.startRow + 1, resultsHeaderStartCol + 1, [results]); status = `Fetched (${Utils.getCurrentDateString()})`; } } if (mode === MODE.SYNC || mode === MODE.FETCH_AND_SYNC) { console.log('Synchronizing...'); - const evaluation = getSheetsService().getCellValue(CONFIG.rules.sheetName, index + 1 + CONFIG.rules.startRow, CONFIG.rules.cols.activationFormula + 1); + const evaluation = SheetsService.getInstance().getCellValue(CONFIG.rules.sheetName, index + 1 + CONFIG.rules.startRow, CONFIG.rules.cols.activationFormula + 1); if (evaluation === '') return; const params = columnHeaderHelper.getMappedValues(row, CONFIG.targetNamespace, false); const targetAgent = getTargetAgent(row[CONFIG.rules.cols.targetAgent]); targetAgent.process(row[CONFIG.rules.cols.targetId], row[CONFIG.rules.cols.targetIdType], evaluation, params); status = `Synchronized (${Utils.getCurrentDateString()})`; - getSheetsService().setCellValue(index + CONFIG.rules.startRow + 1, CONFIG.rules.cols.lastUpdate + 1, String(Date.now()), CONFIG.rules.sheetName); + SheetsService.getInstance().setCellValue(index + CONFIG.rules.startRow + 1, CONFIG.rules.cols.lastUpdate + 1, String(Date.now()), CONFIG.rules.sheetName); } } catch (err) { status = `${Utils.getCurrentDateString()}: ${err}`; } finally { - getSheetsService().setCellValue(index + CONFIG.rules.startRow + 1, CONFIG.rules.cols.status + 1, status, CONFIG.rules.sheetName); + SheetsService.getInstance().setCellValue(index + CONFIG.rules.startRow + 1, CONFIG.rules.cols.status + 1, status, CONFIG.rules.sheetName); } }); } function validate() { let errors = []; - const rows = getSheetsService().getRangeData(CONFIG.rules.sheetName, 1, 1); + const rows = SheetsService.getInstance().getRangeData(CONFIG.rules.sheetName, 1, 1); const columnHeaders = rows.shift(); const columnHeaderHelper = new DynamicColumnHeaders(columnHeaders); rows.forEach((row, index) => { console.log(`Validating row ${index + 1}/${rows.length}`); try { - const evaluation = getSheetsService().getCellValue(CONFIG.rules.sheetName, index + CONFIG.rules.startRow + 1, CONFIG.rules.cols.activationFormula + 1); + const evaluation = SheetsService.getInstance().getCellValue(CONFIG.rules.sheetName, index + CONFIG.rules.startRow + 1, CONFIG.rules.cols.activationFormula + 1); if (evaluation === '') return; const params = columnHeaderHelper.getMappedValues(row, CONFIG.targetNamespace, false); @@ -789,11 +794,4 @@ function getTargetAgent(agentName) { } targetAgents[agentName] = agent.getInstance(); return targetAgents[agentName]; -} -function getSheetsService() { - if (sheetsService === undefined) { - const spreadsheetId = CONFIG.spreadsheetId || undefined; - sheetsService = new SheetsService(spreadsheetId); - } - return sheetsService; } From 4f4f4c6b8d16e36c76d9d26c6d60b7763442928e Mon Sep 17 00:00:00 2001 From: paranerd Date: Thu, 4 May 2023 11:31:39 +0200 Subject: [PATCH 69/84] Code cleanup --- dist/index.js | 2 +- src/helpers/sheets.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/index.js b/dist/index.js index e41d12c..2bcfac8 100644 --- a/dist/index.js +++ b/dist/index.js @@ -241,7 +241,7 @@ class SheetsService { return this.spreadsheet; } static getInstance(spreadsheetId) { - if (typeof this.instance === 'undefined') { + if (!this.instance) { this.instance = new SheetsService(spreadsheetId); } return this.instance; diff --git a/src/helpers/sheets.ts b/src/helpers/sheets.ts index 011c95c..073d180 100644 --- a/src/helpers/sheets.ts +++ b/src/helpers/sheets.ts @@ -187,7 +187,7 @@ export class SheetsService { * @returns {!SheetsService} The initialized SheetsService instance */ static getInstance(spreadsheetId?: string) { - if (typeof this.instance === 'undefined') { + if (!this.instance) { this.instance = new SheetsService(spreadsheetId); } return this.instance; From a9fd114ff95e8a8e2176ba42ee847b070ac2dc37 Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 16 May 2023 08:29:58 +0200 Subject: [PATCH 70/84] Fixed typo in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a035b2f..d87e42c 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ You can get very creative when using this tool and it's capabilities are only li - Enable a DV360 Line Item if it's sunny in London -- Pause Google Ads AdGroup whenever socks of SuperCompany goes below $X +- Pause Google Ads AdGroup whenever stocks of SuperCompany goes below $X - Enable all Google Ads that have the label 'performance' if it's raining AND pollen levels are above a certain level From 64bf4bfd141b0630664becb12c7c860b9ace8ebf Mon Sep 17 00:00:00 2001 From: paranerd Date: Wed, 24 May 2023 13:54:40 +0200 Subject: [PATCH 71/84] Added FAQ about DV360 YouTube Line Items --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index d87e42c..4fb6199 100644 --- a/README.md +++ b/README.md @@ -452,6 +452,12 @@ While we recommend applying for a Developer Token for the integration to work "n For more information please refer to the [Google Ads Scripts Extension Documentation](src/external/ads-script/README.md) +### Can I manage DV360 YouTube Line Items with IFTTA? + +Sadly no, according to the [official documentation](https://developers.google.com/display-video/api/guides/managing-line-items/youtube): "YouTube & Partners resources and targeting can only be created or updated through the UI". + +An easy workaround to this would be to put all the Line Items you want to control each in their designated Insertion Order which can then be managed by IFTTA. Note: This approach should _not_ affect campaign performance. + ## Disclaimer This is not an officially supported Google product. From 90f267de863cd46a5cc0a9404a7016f0917745c4 Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 20 Jun 2023 12:17:43 +0200 Subject: [PATCH 72/84] Added note in README about Ads API 'Basic access' Developer Token --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 4fb6199..e15bbfd 100644 --- a/README.md +++ b/README.md @@ -248,6 +248,10 @@ Given the above JSON source we could add the following to our Sheet: - `target:loginCustomerId` (when accessing via MCC; should be the MCC's CID) - `target:serviceAccount` (alternative way of authentication) +**Important** + +In order to use the Google Ads API on production (non-test) accounts, you need a Developer Token with access level "Basic". Please find information on how to get it in the [official documentation](https://developers.google.com/google-ads/api/docs/access-levels#applying_for_basic_access) + ## Advanced use cases ### Custom Evaluators From f9ad0b959ff11f9e99f7561d76f5c13681254b79 Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 11 Jul 2023 10:35:55 +0200 Subject: [PATCH 73/84] Added 'Do I need Cloud' FAQ --- README.md | 4 ++++ src/external/ads-script/README.md | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e15bbfd..d4cb7c1 100644 --- a/README.md +++ b/README.md @@ -456,6 +456,10 @@ While we recommend applying for a Developer Token for the integration to work "n For more information please refer to the [Google Ads Scripts Extension Documentation](src/external/ads-script/README.md) +### I don't use Google Cloud (yet). Can I still use IFTTA? + +To manage entities on DV360 you need a Google Cloud Project. The same goes for accessing the Google Ads via API. However, we have a workaround to manage Google Ads entities without the API by leveraging AdsScript: [Google Ads Scripts Extension Documentation](src/external/ads-script/README.md) + ### Can I manage DV360 YouTube Line Items with IFTTA? Sadly no, according to the [official documentation](https://developers.google.com/display-video/api/guides/managing-line-items/youtube): "YouTube & Partners resources and targeting can only be created or updated through the UI". diff --git a/src/external/ads-script/README.md b/src/external/ads-script/README.md index ac41abe..fed097d 100644 --- a/src/external/ads-script/README.md +++ b/src/external/ads-script/README.md @@ -15,7 +15,7 @@ limitations under the License. --> # If This Then Ad - Ads Scripts Extension -This extension is meant to be used if you don't have a Google Ads Developer Token (yet). +This extension is meant to be used if you don't have a Google Ads Developer Token or are not using Google Cloud (yet). ## Setup From 7fb9b59267c3dc989b9ba146ff9e9d79edb3a76a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Jul 2023 08:08:56 +0000 Subject: [PATCH 74/84] Bump semver from 5.7.1 to 5.7.2 Bumps [semver](https://github.com/npm/node-semver) from 5.7.1 to 5.7.2. - [Release notes](https://github.com/npm/node-semver/releases) - [Changelog](https://github.com/npm/node-semver/blob/v5.7.2/CHANGELOG.md) - [Commits](https://github.com/npm/node-semver/compare/v5.7.1...v5.7.2) --- updated-dependencies: - dependency-name: semver dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 148 +++++++++++++++++++++++----------------------- 1 file changed, 74 insertions(+), 74 deletions(-) diff --git a/package-lock.json b/package-lock.json index b56452a..18e59a0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "if-this-then-ad", - "version": "2.0.0", + "version": "2.1.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "if-this-then-ad", - "version": "2.0.0", + "version": "2.1.0", "dependencies": { "@google/clasp": "^2.4.2", "@types/google-apps-script": "^1.0.59", @@ -1483,9 +1483,9 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -1686,9 +1686,9 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "peer": true, "dependencies": { "lru-cache": "^6.0.0" @@ -1816,9 +1816,9 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -1887,9 +1887,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -2035,9 +2035,9 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -4326,9 +4326,9 @@ } }, "node_modules/gts/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -5599,9 +5599,9 @@ } }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -6752,9 +6752,9 @@ } }, "node_modules/meow/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "bin": { "semver": "bin/semver" } @@ -6995,9 +6995,9 @@ } }, "node_modules/normalize-package-data/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -8171,9 +8171,9 @@ } }, "node_modules/rollup-plugin-typescript2/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -8268,9 +8268,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -8829,9 +8829,9 @@ } }, "node_modules/ts-jest/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -10324,9 +10324,9 @@ } }, "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "requires": { "lru-cache": "^6.0.0" } @@ -10443,9 +10443,9 @@ } }, "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "peer": true, "requires": { "lru-cache": "^6.0.0" @@ -10515,9 +10515,9 @@ } }, "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "requires": { "lru-cache": "^6.0.0" } @@ -10557,9 +10557,9 @@ } }, "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "requires": { "lru-cache": "^6.0.0" } @@ -10646,9 +10646,9 @@ } }, "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "requires": { "lru-cache": "^6.0.0" } @@ -12248,9 +12248,9 @@ } }, "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "requires": { "lru-cache": "^6.0.0" } @@ -13157,9 +13157,9 @@ }, "dependencies": { "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "requires": { "lru-cache": "^6.0.0" } @@ -14013,9 +14013,9 @@ } }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" }, "type-fest": { "version": "0.18.1", @@ -14185,9 +14185,9 @@ }, "dependencies": { "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "requires": { "lru-cache": "^6.0.0" } @@ -14952,9 +14952,9 @@ } }, "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "requires": { "lru-cache": "^6.0.0" } @@ -15013,9 +15013,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" }, "server-destroy": { "version": "1.0.1", @@ -15415,9 +15415,9 @@ }, "dependencies": { "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "requires": { "lru-cache": "^6.0.0" } From 1896c95b3222ce5b921894a86b5aa43cd0d62b1d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Jul 2023 08:10:36 +0000 Subject: [PATCH 75/84] Bump word-wrap from 1.2.3 to 1.2.4 Bumps [word-wrap](https://github.com/jonschlinkert/word-wrap) from 1.2.3 to 1.2.4. - [Release notes](https://github.com/jonschlinkert/word-wrap/releases) - [Commits](https://github.com/jonschlinkert/word-wrap/compare/1.2.3...1.2.4) --- updated-dependencies: - dependency-name: word-wrap dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 18e59a0..1f462bf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9097,9 +9097,9 @@ "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" }, "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", + "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", "engines": { "node": ">=0.10.0" } @@ -15617,9 +15617,9 @@ "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" }, "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", + "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==" }, "wrap-ansi": { "version": "7.0.0", From 2bf2bc30faae5cb10abd2c85acd5c6ea664af237 Mon Sep 17 00:00:00 2001 From: paranerd Date: Wed, 9 Aug 2023 14:49:02 +0200 Subject: [PATCH 76/84] Bump Google Ads API from v13 to v14 --- src/target-agents/google-ads.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/target-agents/google-ads.ts b/src/target-agents/google-ads.ts index d6bdc03..ca8ef51 100644 --- a/src/target-agents/google-ads.ts +++ b/src/target-agents/google-ads.ts @@ -54,7 +54,7 @@ export class GoogleAds extends TargetAgent { constructor() { super(); - this.baseUrl = 'https://googleads.googleapis.com/v13'; + this.baseUrl = 'https://googleads.googleapis.com/v14'; } /** From d5cafd6886d976611b5d93766c4532545e808de5 Mon Sep 17 00:00:00 2001 From: paranerd Date: Mon, 25 Sep 2023 15:28:27 +0200 Subject: [PATCH 77/84] Added support for having more actions besides on/off --- src/config.ts | 3 ++- src/index.ts | 4 +++- src/target-agents/base.ts | 2 ++ src/target-agents/dv360.ts | 31 +++++++++++++++++++++++++++++++ src/target-agents/google-ads.ts | 31 +++++++++++++++++++++++++++++++ 5 files changed, 69 insertions(+), 2 deletions(-) diff --git a/src/config.ts b/src/config.ts index 08ffee2..492e621 100644 --- a/src/config.ts +++ b/src/config.ts @@ -32,8 +32,9 @@ export const CONFIG = { activationFormula: 3, updateInterval: 4, targetAgent: 5, - targetId: 6, + targetAction: 6, targetIdType: 7, + targetId: 8, }, }, }; diff --git a/src/index.ts b/src/index.ts index e543924..d35617d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -182,6 +182,7 @@ function main(mode: MODE) { targetAgent.process( row[CONFIG.rules.cols.targetId], row[CONFIG.rules.cols.targetIdType], + row[CONFIG.rules.cols.targetAction], evaluation, params ); @@ -250,6 +251,7 @@ function validate() { getTargetAgent(row[CONFIG.rules.cols.targetAgent]).validate( row[CONFIG.rules.cols.targetId], row[CONFIG.rules.cols.targetIdType], + row[CONFIG.rules.cols.targetAction], evaluation, params ) @@ -329,7 +331,7 @@ function updateRowWithResultData( * Dynamically ('lazy') load and return target agent instances. * This is done to avoid ReferenceErrors on direct access due to wrong file order * - * @param {string} targetName + * @param {string} agentName * @returns {TargetAgent} * @throws {Error} */ diff --git a/src/target-agents/base.ts b/src/target-agents/base.ts index b9a6834..b06c91e 100644 --- a/src/target-agents/base.ts +++ b/src/target-agents/base.ts @@ -28,6 +28,7 @@ export class TargetAgent extends ApiHelper { process( identifier: string, type: string, + action: string, evaluation: boolean, params: Object ) {} @@ -35,6 +36,7 @@ export class TargetAgent extends ApiHelper { validate( identifier: string, type: string, + action: string, evaluation: boolean, params: Object ): string[] { diff --git a/src/target-agents/dv360.ts b/src/target-agents/dv360.ts index a101480..5eeb54d 100644 --- a/src/target-agents/dv360.ts +++ b/src/target-agents/dv360.ts @@ -27,6 +27,10 @@ export enum DV360_ENTITY_TYPE { INSERTION_ORDER = 'INSERTION_ORDER', } +export enum DV360_ACTION { + TOGGLE = 'Activate/Pause', +} + interface Entity { entityStatus: DV360_ENTITY_STATUS; } @@ -62,12 +66,14 @@ export class DV360 extends TargetAgent { * * @param {string} identifier * @param {DV360_ENTITY_TYPE} type + * @param {DV360_ACTION} action * @param {boolean} evaluation * @param {Parameters} params Additional parameters */ process( identifier: string, type: DV360_ENTITY_TYPE, + action: DV360_ACTION, evaluation: boolean, params: Parameters ) { @@ -77,6 +83,29 @@ export class DV360 extends TargetAgent { const auth = new Auth(params.serviceAccount ?? undefined); this.authToken = auth.getAuthToken(); + if (action === DV360_ACTION.TOGGLE) { + return this.handleToggle(identifier, type, evaluation, params); + } else { + throw new Error( + `Action '${action}' not supported in '${DV360.friendlyName}' agent` + ); + } + } + + /** + * Handle toggle action + * + * @param {string} identifier + * @param {DV360_ENTITY_TYPE} type + * @param {boolean} evaluation + * @param {Parameters} params Additional parameters + */ + handleToggle( + identifier: string, + type: DV360_ENTITY_TYPE, + evaluation: boolean, + params: Parameters + ) { if (type === DV360_ENTITY_TYPE.LINE_ITEM) { this.setLineItemStatus(params.advertiserId, identifier, evaluation); } else if (type === DV360_ENTITY_TYPE.INSERTION_ORDER) { @@ -89,6 +118,7 @@ export class DV360 extends TargetAgent { * * @param {string} identifier * @param {DV360_ENTITY_TYPE} type + * * @param {DV360_ACTION} action * @param {boolean} evaluation * @param {Parameters} params Additional parameters * @returns {string[]} @@ -96,6 +126,7 @@ export class DV360 extends TargetAgent { validate( identifier: string, type: DV360_ENTITY_TYPE, + action: DV360_ACTION, evaluation: boolean, params: Parameters ) { diff --git a/src/target-agents/google-ads.ts b/src/target-agents/google-ads.ts index ca8ef51..a419b8a 100644 --- a/src/target-agents/google-ads.ts +++ b/src/target-agents/google-ads.ts @@ -29,6 +29,10 @@ export enum GOOGLE_ADS_ENTITY_STATUS { PAUSED = 'PAUSED', } +export enum GOOGLE_ADS_ACTION { + TOGGLE = 'Enable/Pause', +} + interface Parameters { customerId: string; developerToken: string; @@ -62,12 +66,14 @@ export class GoogleAds extends TargetAgent { * * @param {string} identifier * @param {GOOGLE_ADS_SELECTOR_TYPE} type + * @param {GOOGLE_ADS_ACTION} action * @param {boolean} evaluation * @param {Parameters} params Additional parameters */ process( identifier: string, type: GOOGLE_ADS_SELECTOR_TYPE, + action: GOOGLE_ADS_ACTION, evaluation: boolean, params: Parameters ) { @@ -79,6 +85,29 @@ export class GoogleAds extends TargetAgent { this.parameters = params; + if (action === GOOGLE_ADS_ACTION.TOGGLE) { + return this.handleToggle(identifier, type, evaluation, params); + } else { + throw new Error( + `Action '${action}' not supported in '${GoogleAds.friendlyName}' agent` + ); + } + } + + /** + * Handle toggle action + * + * @param {string} identifier + * @param {GOOGLE_ADS_SELECTOR_TYPE} type + * @param {boolean} evaluation + * @param {Parameters} params Additional parameters + */ + handleToggle( + identifier: string, + type: GOOGLE_ADS_SELECTOR_TYPE, + evaluation: boolean, + params: Parameters + ) { const status = evaluation ? GOOGLE_ADS_ENTITY_STATUS.ENABLED : GOOGLE_ADS_ENTITY_STATUS.PAUSED; @@ -111,6 +140,7 @@ export class GoogleAds extends TargetAgent { * * @param {string} identifier * @param {GOOGLE_ADS_SELECTOR_TYPE} type + * @param {GOOGLE_ADS_ACTION} action * @param {boolean} evaluation * @param {Parameters} params Additional parameters * @returns {string[]} @@ -118,6 +148,7 @@ export class GoogleAds extends TargetAgent { validate( identifier: string, type: GOOGLE_ADS_SELECTOR_TYPE, + action: GOOGLE_ADS_ACTION, evaluation: boolean, params: Parameters ) { From 82b47558e6d51569ce291af6d33e6a090f2b4254 Mon Sep 17 00:00:00 2001 From: paranerd Date: Mon, 25 Sep 2023 15:28:46 +0200 Subject: [PATCH 78/84] Updated bundle --- dist/index.js | 45 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 10 deletions(-) diff --git a/dist/index.js b/dist/index.js index 2bcfac8..86fe84a 100644 --- a/dist/index.js +++ b/dist/index.js @@ -30,8 +30,9 @@ const CONFIG = { activationFormula: 3, updateInterval: 4, targetAgent: 5, - targetId: 6, + targetAction: 6, targetIdType: 7, + targetId: 8, }, }, }; @@ -294,8 +295,8 @@ class TargetAgent extends ApiHelper { super(); this.requiredParameters = []; } - process(identifier, type, evaluation, params) { } - validate(identifier, type, evaluation, params) { + process(identifier, type, action, evaluation, params) { } + validate(identifier, type, action, evaluation, params) { throw new Error('Method not implemented.'); } findMissingRequiredParameter(params) { @@ -327,16 +328,28 @@ var DV360_ENTITY_TYPE; DV360_ENTITY_TYPE["LINE_ITEM"] = "LINE_ITEM"; DV360_ENTITY_TYPE["INSERTION_ORDER"] = "INSERTION_ORDER"; })(DV360_ENTITY_TYPE || (DV360_ENTITY_TYPE = {})); +var DV360_ACTION; +(function (DV360_ACTION) { + DV360_ACTION["TOGGLE"] = "Activate/Pause"; +})(DV360_ACTION || (DV360_ACTION = {})); class DV360 extends TargetAgent { constructor() { super(); this.requiredParameters = ['advertiserId']; this.baseUrl = 'https://displayvideo.googleapis.com/v2'; } - process(identifier, type, evaluation, params) { + process(identifier, type, action, evaluation, params) { this.ensureRequiredParameters(params); const auth = new Auth(params.serviceAccount ?? undefined); this.authToken = auth.getAuthToken(); + if (action === DV360_ACTION.TOGGLE) { + return this.handleToggle(identifier, type, evaluation, params); + } + else { + throw new Error(`Action '${action}' not supported in '${DV360.friendlyName}' agent`); + } + } + handleToggle(identifier, type, evaluation, params) { if (type === DV360_ENTITY_TYPE.LINE_ITEM) { this.setLineItemStatus(params.advertiserId, identifier, evaluation); } @@ -344,7 +357,7 @@ class DV360 extends TargetAgent { this.setInsertionOrderStatus(params.advertiserId, identifier, evaluation); } } - validate(identifier, type, evaluation, params) { + validate(identifier, type, action, evaluation, params) { this.ensureRequiredParameters(params); const auth = new Auth(params.serviceAccount ?? undefined); this.authToken = auth.getAuthToken(); @@ -412,6 +425,10 @@ var GOOGLE_ADS_ENTITY_STATUS; GOOGLE_ADS_ENTITY_STATUS["ENABLED"] = "ENABLED"; GOOGLE_ADS_ENTITY_STATUS["PAUSED"] = "PAUSED"; })(GOOGLE_ADS_ENTITY_STATUS || (GOOGLE_ADS_ENTITY_STATUS = {})); +var GOOGLE_ADS_ACTION; +(function (GOOGLE_ADS_ACTION) { + GOOGLE_ADS_ACTION["TOGGLE"] = "Enable/Pause"; +})(GOOGLE_ADS_ACTION || (GOOGLE_ADS_ACTION = {})); class GoogleAds extends TargetAgent { constructor() { super(); @@ -420,13 +437,21 @@ class GoogleAds extends TargetAgent { 'customerId', 'developerToken', ]; - this.baseUrl = 'https://googleads.googleapis.com/v13'; + this.baseUrl = 'https://googleads.googleapis.com/v14'; } - process(identifier, type, evaluation, params) { + process(identifier, type, action, evaluation, params) { this.ensureRequiredParameters(params); const auth = new Auth(params.serviceAccount ?? undefined); this.authToken = auth.getAuthToken(); this.parameters = params; + if (action === GOOGLE_ADS_ACTION.TOGGLE) { + return this.handleToggle(identifier, type, evaluation, params); + } + else { + throw new Error(`Action '${action}' not supported in '${GoogleAds.friendlyName}' agent`); + } + } + handleToggle(identifier, type, evaluation, params) { const status = evaluation ? GOOGLE_ADS_ENTITY_STATUS.ENABLED : GOOGLE_ADS_ENTITY_STATUS.PAUSED; @@ -445,7 +470,7 @@ class GoogleAds extends TargetAgent { this.updateAdGroupStatusByLabel(params.customerId, identifier, status); } } - validate(identifier, type, evaluation, params) { + validate(identifier, type, action, evaluation, params) { const auth = new Auth(params.serviceAccount ?? undefined); this.authToken = auth.getAuthToken(); this.parameters = params; @@ -723,7 +748,7 @@ function main(mode) { return; const params = columnHeaderHelper.getMappedValues(row, CONFIG.targetNamespace, false); const targetAgent = getTargetAgent(row[CONFIG.rules.cols.targetAgent]); - targetAgent.process(row[CONFIG.rules.cols.targetId], row[CONFIG.rules.cols.targetIdType], evaluation, params); + targetAgent.process(row[CONFIG.rules.cols.targetId], row[CONFIG.rules.cols.targetIdType], row[CONFIG.rules.cols.targetAction], evaluation, params); status = `Synchronized (${Utils.getCurrentDateString()})`; SheetsService.getInstance().setCellValue(index + CONFIG.rules.startRow + 1, CONFIG.rules.cols.lastUpdate + 1, String(Date.now()), CONFIG.rules.sheetName); } @@ -748,7 +773,7 @@ function validate() { if (evaluation === '') return; const params = columnHeaderHelper.getMappedValues(row, CONFIG.targetNamespace, false); - errors = errors.concat(getTargetAgent(row[CONFIG.rules.cols.targetAgent]).validate(row[CONFIG.rules.cols.targetId], row[CONFIG.rules.cols.targetIdType], evaluation, params)); + errors = errors.concat(getTargetAgent(row[CONFIG.rules.cols.targetAgent]).validate(row[CONFIG.rules.cols.targetId], row[CONFIG.rules.cols.targetIdType], row[CONFIG.rules.cols.targetAction], evaluation, params)); } catch (err) { errors.push(JSON.stringify(err.message)); From d28dd973b824cd160df1ff11c8acf44604e6d685 Mon Sep 17 00:00:00 2001 From: paranerd Date: Mon, 25 Sep 2023 15:28:58 +0200 Subject: [PATCH 79/84] Updated tests --- test/target-agents/dv360.test.ts | 22 +++++++++++++++++++--- test/target-agents/google-ads.test.ts | 19 +++++++++++++++++-- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/test/target-agents/dv360.test.ts b/test/target-agents/dv360.test.ts index 4d84105..919a3d2 100644 --- a/test/target-agents/dv360.test.ts +++ b/test/target-agents/dv360.test.ts @@ -14,7 +14,11 @@ * limitations under the License. */ import { Auth } from '../../src/helpers/auth'; -import { DV360, DV360_ENTITY_TYPE } from '../../src/target-agents/dv360'; +import { + DV360, + DV360_ACTION, + DV360_ENTITY_TYPE, +} from '../../src/target-agents/dv360'; describe('DV360 Target Agent', () => { const params = { @@ -43,7 +47,13 @@ describe('DV360 Target Agent', () => { ); // Call function - dv360.process('1234', DV360_ENTITY_TYPE.LINE_ITEM, true, params); + dv360.process( + '1234', + DV360_ENTITY_TYPE.LINE_ITEM, + DV360_ACTION.TOGGLE, + true, + params + ); // Evaluate expect(setLineItemStatusSpy).toHaveBeenCalledWith('1', '1234', true); @@ -74,7 +84,13 @@ describe('DV360 Target Agent', () => { const fetchUrlSpy = jest.spyOn(DV360.prototype as any, 'fetchUrl'); // Call function - dv360.validate('1234', DV360_ENTITY_TYPE.LINE_ITEM, true, params); + dv360.validate( + '1234', + DV360_ENTITY_TYPE.LINE_ITEM, + DV360_ACTION.TOGGLE, + true, + params + ); // Evaluate expect(isLIActiveSpy).toHaveBeenCalledWith('1', '1234'); diff --git a/test/target-agents/google-ads.test.ts b/test/target-agents/google-ads.test.ts index 8afb3da..ad2a025 100644 --- a/test/target-agents/google-ads.test.ts +++ b/test/target-agents/google-ads.test.ts @@ -19,6 +19,7 @@ import { GoogleAds, GOOGLE_ADS_ENTITY_STATUS, GOOGLE_ADS_SELECTOR_TYPE, + GOOGLE_ADS_ACTION, } from '../../src/target-agents/google-ads'; describe('Google Ads Target Agent', () => { @@ -95,7 +96,13 @@ describe('Google Ads Target Agent', () => { ); // Call function - ads.process('1234', GOOGLE_ADS_SELECTOR_TYPE.AD_ID, true, params); + ads.process( + '1234', + GOOGLE_ADS_SELECTOR_TYPE.AD_ID, + GOOGLE_ADS_ACTION.TOGGLE, + true, + params + ); // Evaluate expect(updateAdStatusByIdSpy).toHaveBeenCalledWith( @@ -141,7 +148,13 @@ describe('Google Ads Target Agent', () => { ); // Call function - ads.process('1234;2345', GOOGLE_ADS_SELECTOR_TYPE.AD_ID, true, params); + ads.process( + '1234;2345', + GOOGLE_ADS_SELECTOR_TYPE.AD_ID, + GOOGLE_ADS_ACTION.TOGGLE, + true, + params + ); // Evaluate expect(updateAdStatusByIdSpy).toHaveBeenCalledWith( @@ -182,6 +195,7 @@ describe('Google Ads Target Agent', () => { const res = ads.validate( '1234', GOOGLE_ADS_SELECTOR_TYPE.AD_ID, + GOOGLE_ADS_ACTION.TOGGLE, true, params ); @@ -209,6 +223,7 @@ describe('Google Ads Target Agent', () => { const res = ads.validate( '1234', GOOGLE_ADS_SELECTOR_TYPE.AD_ID, + GOOGLE_ADS_ACTION.TOGGLE, false, params ); From d0e423e19905e83d80e2e43362f90e9e63779997 Mon Sep 17 00:00:00 2001 From: paranerd Date: Tue, 26 Sep 2023 09:35:28 +0200 Subject: [PATCH 80/84] Added info on 'Target Action' column to README --- README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d4cb7c1..5626f07 100644 --- a/README.md +++ b/README.md @@ -117,9 +117,13 @@ A rule consists of the following elements: This can be various things depending on the Agent. It may be a DV360 Line Item ID, a Google Ads Ad Group Label or something entirely different. - - **Target ID Type** + - **Target Action** - Because the Target Identifier is not one thing for all, the Target ID Type is required to tell the tool what it is working with + The action to be taken upon evaluation, e.g. enabling or pausing an Ad + + - **Target Identifier Type** + + Because the Target Identifier is not one thing for all, the Target Identifier Type is required to tell the tool what it is working with - **Additional Parameters (optional)** From 1365c945ccfe22c3dcd176a28b8655f5bd3ba1e8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Oct 2023 23:24:44 +0000 Subject: [PATCH 81/84] Bump @babel/traverse from 7.21.3 to 7.23.2 Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.21.3 to 7.23.2. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse) --- updated-dependencies: - dependency-name: "@babel/traverse" dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 361 ++++++++++++++++++++++++++++++---------------- 1 file changed, 239 insertions(+), 122 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1f462bf..a897f62 100644 --- a/package-lock.json +++ b/package-lock.json @@ -51,16 +51,81 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dependencies": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/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==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/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==" + }, + "node_modules/@babel/code-frame/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==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/compat-data": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz", @@ -104,11 +169,11 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "node_modules/@babel/generator": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.3.tgz", - "integrity": "sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dependencies": { - "@babel/types": "^7.21.3", + "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -162,31 +227,31 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dependencies": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -241,28 +306,28 @@ } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "engines": { "node": ">=6.9.0" } @@ -289,12 +354,12 @@ } }, "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "engines": { @@ -366,9 +431,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.3.tgz", - "integrity": "sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "bin": { "parser": "bin/babel-parser.js" }, @@ -540,31 +605,31 @@ } }, "node_modules/@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.3.tgz", - "integrity": "sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==", - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.21.3", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.3", - "@babel/types": "^7.21.3", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@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.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -581,12 +646,12 @@ } }, "node_modules/@babel/types": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.3.tgz", - "integrity": "sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -9215,11 +9280,63 @@ } }, "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "requires": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "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==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "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==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, "@babel/compat-data": { @@ -9257,11 +9374,11 @@ } }, "@babel/generator": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.3.tgz", - "integrity": "sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "requires": { - "@babel/types": "^7.21.3", + "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -9307,25 +9424,25 @@ } }, "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==" }, "@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "requires": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" } }, "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" } }, "@babel/helper-module-imports": { @@ -9365,22 +9482,22 @@ } }, "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" } }, "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==" }, "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==" }, "@babel/helper-validator-option": { "version": "7.21.0", @@ -9398,12 +9515,12 @@ } }, "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "dependencies": { @@ -9459,9 +9576,9 @@ } }, "@babel/parser": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.3.tgz", - "integrity": "sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==" + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==" }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", @@ -9576,28 +9693,28 @@ } }, "@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" } }, "@babel/traverse": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.3.tgz", - "integrity": "sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==", - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.21.3", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.3", - "@babel/types": "^7.21.3", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "requires": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@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.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -9610,12 +9727,12 @@ } }, "@babel/types": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.3.tgz", - "integrity": "sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" } }, From 65d2b49c138daa9dd90c3b032e6ed3ed3c701faf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20H=C3=B6sel?= Date: Mon, 4 Dec 2023 10:03:22 +0100 Subject: [PATCH 82/84] align sample agent with updated interface and add dist folder to .prettierignore --- .prettierignore | 1 + src/target-agents/agent.sample.ts | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.prettierignore b/.prettierignore index dd87e2d..e13c8ee 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,2 +1,3 @@ node_modules build +dist \ No newline at end of file diff --git a/src/target-agents/agent.sample.ts b/src/target-agents/agent.sample.ts index 821f1ea..510805d 100644 --- a/src/target-agents/agent.sample.ts +++ b/src/target-agents/agent.sample.ts @@ -30,14 +30,16 @@ export class SampleAgent extends TargetAgent { * * @param {string} identifier * @param {string} type + * @param {string} action * @param {boolean} evaluation * @param {Parameters} params Additional parameters */ process( identifier: string, type: string, + action: string, evaluation: boolean, - params: Parameters + params: Object ) { // Check for missing parameters this.ensureRequiredParameters(params); @@ -48,6 +50,7 @@ export class SampleAgent extends TargetAgent { * * @param {string} identifier * @param {string} type + * @param {string} action * @param {boolean} evaluation * @param {Parameters} params Additional parameters * @returns {string[]}‚ @@ -55,8 +58,9 @@ export class SampleAgent extends TargetAgent { validate( identifier: string, type: string, + action: string, evaluation: boolean, - params: Parameters + params: Object ) { return []; } From 1b8219d1ecdce64f606db1b903b0084336e35d89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20H=C3=B6sel?= Date: Mon, 4 Dec 2023 10:30:39 +0100 Subject: [PATCH 83/84] Bump version to 2.1.1 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index f401ed6..6e9aefe 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "if-this-then-ad", - "version": "2.1.0", + "version": "2.1.1", "description": "Automatic management of marketing campaigns based on real world events", "main": "src/index.ts", "scripts": { @@ -45,4 +45,4 @@ "is-ci": "^3.0.1", "lint-staged": "^13.2.1" } -} +} \ No newline at end of file From 77b55f8b3b1d6e49e930d2f4133388b0a98a94e2 Mon Sep 17 00:00:00 2001 From: Tom Symonds Date: Tue, 18 Jun 2024 10:01:31 +0100 Subject: [PATCH 84/84] Add Ads Script solution for video campaigns The Google Ads API doesn't support mutating video campaigns. This change provides an example workaround to this problem using Google Ads Scripts. --- README.md | 6 + examples/ads-script-video-campaigns.js | 188 +++++++++++++++++++++++++ 2 files changed, 194 insertions(+) create mode 100644 examples/ads-script-video-campaigns.js diff --git a/README.md b/README.md index 5626f07..b2aebe1 100644 --- a/README.md +++ b/README.md @@ -470,6 +470,12 @@ Sadly no, according to the [official documentation](https://developers.google.co An easy workaround to this would be to put all the Line Items you want to control each in their designated Insertion Order which can then be managed by IFTTA. Note: This approach should _not_ affect campaign performance. +### Can I manage Google Ads Video Campaigns with IFTTA? + +Sadly not, as [video campaigns cannot be mutated via the API](https://developers.google.com/google-ads/api/docs/campaigns/overview#differences_from_the_google_ads_ui). + +However, there is a workaround that uses Google Ads Script to make the changes to the ad group. See [ads-script-video-campaigns.js](./examples/ads-script-video-campaigns.js). + ## Disclaimer This is not an officially supported Google product. diff --git a/examples/ads-script-video-campaigns.js b/examples/ads-script-video-campaigns.js new file mode 100644 index 0000000..2d36b84 --- /dev/null +++ b/examples/ads-script-video-campaigns.js @@ -0,0 +1,188 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +/** + * @fileoverview extends If This Then Ad (IFTTA) to work with video campaigns + * in Google Ads, by executing the mutations via this Ads Script. + * At the time of writing the Google Ads API doesn't allow you to mutate video + * campaigns, but this is possible through Ads Script. This Ads Script will read + * the activation formula column and pause/enable based on the true/false value. + * This version is set up to work only with a new target identifier type of: + * `VIDEO_AD_GROUP_ID`. + * To use this script update the rules to use VIDEO_AD_GROUP_ID, and configure + * the constants at the top of this file. + * @version 1.0.0 + */ + +// Set to true if you're going to run this in the MCC account, else false if the +// child Google Ads account. +const RUN_FROM_MCC = true; +// The URL of the Google Sheet containing the rules. +const GOOGLE_SHEET_URL = ''; +// The name of the Sheet to open. +const GOOGLE_SHEET_NAME = 'Rules'; + +/** + * The entry point for the Ads Script. + */ +function main() { + const sheet = getGoogleSheetWithRules(); + const rules = getRulesFromSheet(sheet); + const headerMap = buildHeaderMap(sheet); + processRules(rules, headerMap); +} + +/** + * Retrieves the Google Sheet containing the rules. + * + * @returns {!Spreadsheet} The Google Sheet object representing the rules sheet. + */ +function getGoogleSheetWithRules() { + const spreadsheet = SpreadsheetApp.openByUrl(GOOGLE_SHEET_URL); + return spreadsheet.getSheetByName(GOOGLE_SHEET_NAME); +} + +/** + * Extracts the rules from the provided Google Sheet. + * + * @param {!Spreadsheet} sheet The Google Sheet object containing the rules. + * @returns {!Array>} A 2D array representing the rules data, + * where each inner array represents a single rule. + */ +function getRulesFromSheet(sheet) { + // Skip the header row + const dataRange = sheet.getRange( + 2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()); + return dataRange.getValues(); +} + +/** + * Finds the column index corresponding to a given header name in the sheet. + * + * @param {!Spreadsheet} sheet The Google Sheet object. + * @param {string} headerName The name of the header to search for. + * @returns {number} The index of the column containing the specified header. + */ +function getColumnIndexByHeader(sheet, headerName) { + const headerValues = sheet.getRange( + 1, 1, 1, sheet.getLastColumn()).getValues()[0]; + + // Case-insensitive comparison for flexibility + const columnIndex = headerValues.findIndex(header => + header.toString().toLowerCase() === headerName.toLowerCase() + ); + + if (columnIndex === -1) { + throw new Error('Error: Column header "' + headerName + '" not found.'); + } + + return columnIndex; +} + +/** + * Builds a map of column indices based on header names. + * + * @param {!Spreadsheet} sheet The Google Sheet object. + * @returns {!Object} A map where keys are header names and values are + * corresponding column indices. + */ +function buildHeaderMap(sheet) { + return { + 'Activation Formula': getColumnIndexByHeader(sheet, 'Activation Formula'), + 'Rule Name': getColumnIndexByHeader(sheet, 'Rule Name'), + 'Target Agent': getColumnIndexByHeader(sheet, 'Target Agent'), + 'Target Identifier Type': getColumnIndexByHeader(sheet, + 'Target Identifier Type'), + 'Target Identifier': getColumnIndexByHeader(sheet, 'Target Identifier'), + 'Customer ID': getColumnIndexByHeader(sheet, 'target:customerId') + }; +} + +/** + * Processes the rules extracted from the Google Sheet. + * + * This function iterates through each rule and performs the necessary actions + * based on the rule's activation formula and target information. + * + * @param {!Array>} rules The 2D array representing the rules + * data. + * @param {!Object} headerMap A map of column indices based on header names. + */ +function processRules(rules, headerMap) { + for (const rule of rules) { + if (rule[headerMap['Target Agent']] === 'Google Ads') { + const targetIdentifierType = rule[headerMap['Target Identifier Type']]; + const targetIdentifier = rule[headerMap['Target Identifier']]; + const activationFormula = rule[headerMap['Activation Formula']]; + const ruleName = rule[headerMap['Rule Name']]; + const customerId = rule[headerMap['Customer ID']]; + + Logger.log( + 'Processing rule: "' + ruleName + + '" for target identifier: "' + targetIdentifier + + '" with target identifier type: "' + targetIdentifierType + + '" with activation formula: "' + activationFormula + + '" for customer ID: "' + customerId + + '"'); + + switch (targetIdentifierType) { + case 'VIDEO_AD_GROUP_ID': + mutateVideoAdGroup(targetIdentifier, activationFormula, customerId); + break; + + default: + Logger.log( + 'Unsupported target identifier type: ' + targetIdentifierType); + break; + } + } + } +} + +/** + * Mutates a video ad group based on the provided activation formula. + * + * This function retrieves the video ad group using the provided ad group ID, + * and then enables or pauses it based on the activation formula. + * + * @param {string} adGroupId The ID of the video ad group to mutate. + * @param {string} activationFormula The activation formula, which should be + * either 'true' or 'false'. + * @param {string} customerId The CID in Google Ads for the ad group + */ +function mutateVideoAdGroup(adGroupId, activationFormula, customerId) { + Logger.log('Mutating video ad group with ID: ' + adGroupId); + + if (RUN_FROM_MCC) { + const account = MccApp.accounts().withIds([customerId]).get().next(); + MccApp.select(account); + } + + const videoAdGroupIterator = AdWordsApp.videoAdGroups() + .withIds([adGroupId]) + .get(); + if (videoAdGroupIterator.hasNext()) { + const videoAdGroup =videoAdGroupIterator.next(); + if (activationFormula === 'true' || activationFormula === true) { + videoAdGroup.enable(); + } else if (activationFormula === 'false' || activationFormula === false) { + videoAdGroup.pause(); + } else { + Logger.log('Unknown activation formula: ' + activationFormula); + } + } else { + Logger.log('Video Ad Group with ID ' + adGroupId + ' not found.'); + } +}